Compare commits
52 Commits
Author | SHA1 | Date | |
---|---|---|---|
ef5bfd435a | |||
db07db930c | |||
f6309f600c | |||
7477704905 | |||
db89d86242 | |||
b74ce05845 | |||
79db68a4a2 | |||
5a3ddcf39b | |||
fe6bfc0a83 | |||
36a481ecd1 | |||
f7b2e203ed | |||
27c98c4e32 | |||
79257908d0 | |||
b5ca898eac | |||
53ade28931 | |||
fff4c7642d | |||
dafe6574cc | |||
b70dad4996 | |||
17b0b50fbd | |||
91a0272ab3 | |||
efd22d4087 | |||
c9e32540bf | |||
8344f96983 | |||
3b77089d79 | |||
b6bce76043 | |||
cab57ab303 | |||
804f1f3b12 | |||
f0144fdd5b | |||
81f286cb2f | |||
1f12cb9f94 | |||
26490e8ddd | |||
38d2120c35 | |||
f80b8decbc | |||
28cd6d1b49 | |||
899e5b0a7d | |||
0eff7c7510 | |||
7789348f4e | |||
66a23a515b | |||
7c1082f5a9 | |||
15ea5adec6 | |||
da0dddcceb | |||
b5433e412f | |||
7eb6bf794c | |||
b244518fcb | |||
95d0396abb | |||
a830299cc9 | |||
10fc1d7fba | |||
614ed78928 | |||
ea7f6a6477 | |||
2d746a9d1c | |||
a9fab24961 | |||
5548d5a72d |
@ -6,13 +6,14 @@ on:
|
|||||||
- '*'
|
- '*'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE: code.foss.global/hosttoday/ht-docker-node:npmci
|
IMAGE: code.foss.global/host.today/ht-docker-node:npmci
|
||||||
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@/${{gitea.repository}}.git
|
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@/${{gitea.repository}}.git
|
||||||
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
|
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
|
||||||
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
|
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
|
||||||
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
|
# NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
|
||||||
NPMCI_LOGIN_DOCKER_GITEA: ${{ github.server_url }}|${{ gitea.repository_owner }}|${{ secrets.GITEA_TOKEN }}
|
# NPMCI_LOGIN_DOCKER_GITEA: ${{ github.server_url }}|${{ gitea.repository_owner }}|${{ secrets.GITEA_TOKEN }}
|
||||||
NPMCI_LOGIN_DOCKER_DOCKERREGISTRY: ${{ secrets.NPMCI_LOGIN_DOCKER_DOCKERREGISTRY }}
|
NPMCI_LOGIN_DOCKER_DOCKERREGISTRY: ${{ secrets.NPMCI_LOGIN_DOCKER_DOCKERREGISTRY }}
|
||||||
|
NPMCI_SECRET01: ${{ secrets.NPMCI_SECRET01 }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
security:
|
security:
|
||||||
@ -74,7 +75,7 @@ jobs:
|
|||||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: code.foss.global/hosttoday/ht-docker-dbase:npmci
|
image: code.foss.global/host.today/ht-docker-dbase:npmci
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
@ -89,8 +90,7 @@ jobs:
|
|||||||
npmci docker login
|
npmci docker login
|
||||||
npmci docker build
|
npmci docker build
|
||||||
npmci docker test
|
npmci docker test
|
||||||
# npmci docker push
|
npmci docker push code.foss.global
|
||||||
npmci docker push
|
|
||||||
|
|
||||||
metadata:
|
metadata:
|
||||||
needs: test
|
needs: test
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# gitzone dockerfile_service
|
# gitzone dockerfile_service
|
||||||
## STAGE 1 // BUILD
|
## STAGE 1 // BUILD
|
||||||
FROM code.foss.global/hosttoday/ht-docker-node:npmci as node1
|
FROM code.foss.global/host.today/ht-docker-node:npmci as node1
|
||||||
COPY ./ /app
|
COPY ./ /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
ARG NPMCI_TOKEN_NPM2
|
ARG NPMCI_TOKEN_NPM2
|
||||||
@ -12,7 +12,7 @@ RUN pnpm run build
|
|||||||
|
|
||||||
# gitzone dockerfile_service
|
# gitzone dockerfile_service
|
||||||
## STAGE 2 // install production
|
## STAGE 2 // install production
|
||||||
FROM code.foss.global/hosttoday/ht-docker-node:npmci as node2
|
FROM code.foss.global/host.today/ht-docker-node:npmci as node2
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=node1 /app /app
|
COPY --from=node1 /app /app
|
||||||
RUN rm -rf .pnpm-store
|
RUN rm -rf .pnpm-store
|
||||||
@ -24,7 +24,7 @@ RUN rm -rf node_modules/ && pnpm install --prod
|
|||||||
|
|
||||||
|
|
||||||
## STAGE 3 // rebuild dependencies for alpine
|
## STAGE 3 // rebuild dependencies for alpine
|
||||||
FROM code.foss.global/hosttoday/ht-docker-node:alpinenpmci as node3
|
FROM code.foss.global/host.today/ht-docker-node:alpine_npmci as node3
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=node2 /app /app
|
COPY --from=node2 /app /app
|
||||||
ARG NPMCI_TOKEN_NPM2
|
ARG NPMCI_TOKEN_NPM2
|
||||||
@ -34,7 +34,7 @@ RUN pnpm config set store-dir .pnpm-store
|
|||||||
RUN pnpm rebuild -r
|
RUN pnpm rebuild -r
|
||||||
|
|
||||||
## STAGE 4 // the final production image with all dependencies in place
|
## STAGE 4 // the final production image with all dependencies in place
|
||||||
FROM code.foss.global/hosttoday/ht-docker-node:alpine as node4
|
FROM code.foss.global/host.today/ht-docker-node:alpine as node4
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=node3 /app /app
|
COPY --from=node3 /app /app
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
FROM serve.zone/cloudly:latest
|
||||||
|
156
changelog.md
156
changelog.md
@ -1,5 +1,161 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2024-12-14 - 4.5.0 - feat(services)
|
||||||
|
Add service management functionalities
|
||||||
|
|
||||||
|
- Integrated service-related API client methods including getServices, getServiceById, and createService.
|
||||||
|
- Updated the deployment data structure in the service manager.
|
||||||
|
- Enhanced service interface to incorporate additional fields for comprehensive data handling.
|
||||||
|
- Ensured secure token generation for Cloudly authentication processes.
|
||||||
|
|
||||||
|
## 2024-11-18 - 4.4.0 - feat(api-client)
|
||||||
|
Add static method getImageById for Image class in api-client
|
||||||
|
|
||||||
|
- Introduced a static method getImageById in the Image class.
|
||||||
|
- Updated CloudlyApiClient to include the getImageById method in the images interface.
|
||||||
|
|
||||||
|
## 2024-11-18 - 4.3.21 - fix(interfaces)
|
||||||
|
Remove deprecated deployment directive and update related interfaces
|
||||||
|
|
||||||
|
- Removed IDeploymentDirective from data and requests.
|
||||||
|
- Updated IDeployment to remove references to directives.
|
||||||
|
- Changed IRequest_Any_Cloudly_GetClusterConfig to return services instead of deployment directives.
|
||||||
|
- Removed deploymentDirectiveIds from IService data structure.
|
||||||
|
|
||||||
|
## 2024-11-18 - 4.3.20 - fix(apiclient)
|
||||||
|
Ensure mandatory parameter in CloudlyApiClient constructor
|
||||||
|
|
||||||
|
- Made the 'optionsArg' parameter mandatory in the constructor of CloudlyApiClient class.
|
||||||
|
|
||||||
|
## 2024-11-18 - 4.3.19 - fix(docker)
|
||||||
|
Fix improper Docker push command preventing push to the correct registry.
|
||||||
|
|
||||||
|
- Corrected the docker push command in the '.gitea/workflows/docker_tags.yaml' file to push images to the 'code.foss.global' registry.
|
||||||
|
|
||||||
|
## 2024-11-17 - 4.3.18 - fix(docker_tags)
|
||||||
|
Updated Docker configuration to include NPM tokens.
|
||||||
|
|
||||||
|
- Restored NPMCI_TOKEN_NPM and NPMCI_TOKEN_NPM2 environment variables in docker_tags.yaml for authentication purposes.
|
||||||
|
|
||||||
|
## 2024-11-17 - 4.3.17 - fix(Dockerfile)
|
||||||
|
Corrected docker base image tag in Dockerfile for alpine compatibility.
|
||||||
|
|
||||||
|
- Updated Dockerfile to use the correct base image tag for Alpine.
|
||||||
|
- Resolved any potential build issues related to incorrect image tag usage.
|
||||||
|
|
||||||
|
## 2024-11-17 - 4.3.16 - fix(infrastructure)
|
||||||
|
Correct Docker image path in Dockerfile for improved build consistency.
|
||||||
|
|
||||||
|
- Dockerfile: Updated base image paths from 'code.foss.global/hosttoday/ht-docker-node' to 'code.foss.global/host.today/ht-docker-node'.
|
||||||
|
|
||||||
|
## 2024-11-17 - 4.3.15 - fix(project setup)
|
||||||
|
fixed incorrect configuration in npmextra.json
|
||||||
|
|
||||||
|
- Removed unnecessary 'dockerBuildargEnvMap' entry for NPMCI_TOKEN_NPM2.
|
||||||
|
- Corrected the githost and gitscope in gitzone module configuration.
|
||||||
|
- Updated the license field to reflect the correct license.
|
||||||
|
|
||||||
|
## 2024-11-16 - 4.3.14 - fix(docker tags)
|
||||||
|
Comment out unused secret variables in docker_tags.yaml
|
||||||
|
|
||||||
|
- Modified docker_tags.yaml to comment out unused secret variables related to NPM and GitHub tokens.
|
||||||
|
|
||||||
|
## 2024-11-16 - 4.3.13 - fix(package)
|
||||||
|
Updated package dependencies
|
||||||
|
|
||||||
|
- Updated @design.estate/dees-catalog version to 1.3.1
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.12 - fix(workflow)
|
||||||
|
Fix Docker image path in GitHub action workflow
|
||||||
|
|
||||||
|
- Corrected the path of the Docker image used in the GitHub action workflow from 'code.foss.global/hosttoday/ht-docker-dbase:npmci' to 'code.foss.global/host.today/ht-docker-dbase:npmci'.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.11 - fix(overall)
|
||||||
|
Refactor and improve code consistency across all modules
|
||||||
|
|
||||||
|
- Updated cloud configuration management for better reliability.
|
||||||
|
- Enhanced security measures in the authentication and authorization processes.
|
||||||
|
- Streamlined deployment logic in cluster management.
|
||||||
|
- Refactored code to improve maintainability and readability.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.10 - fix(dependencies)
|
||||||
|
Updated dependencies and fixed Docker Alpine image retrieval issue in tests
|
||||||
|
|
||||||
|
- Updated @push.rocks/tapbundle to version ^5.5.0 in devDependencies.
|
||||||
|
- Updated @push.rocks/smartrequest to version ^2.0.23 in dependencies.
|
||||||
|
- Ensured the Docker Alpine image is retrieved as a local tarball in cloudlyfactory.ts test helper.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.9 - fix(test and dependencies)
|
||||||
|
Corrected cloudlyUrl in test.apiclient and updated tapbundle dependency.
|
||||||
|
|
||||||
|
- Fixed cloudlyUrl assignment in the test.apiclient to use the correct helper method.
|
||||||
|
- Updated tapbundle dependency version from ^5.4.3 to ^5.4.4.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.8 - fix(api client)
|
||||||
|
Fixed localhost URL issue in test.client.ts
|
||||||
|
|
||||||
|
- Changed the cloudlyUrl in test.client.ts from 'localhost' to '127.0.0.1' to ensure consistency in network requests.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.7 - fix(tests)
|
||||||
|
Refactored test setup for consistency and isolated config initialization.
|
||||||
|
|
||||||
|
- test/helpers/cloudlyfactory.ts: Test configuration setup was refactored to ensure consistent initialization of cloudly configuration across tests.
|
||||||
|
- test/test.apiclient.ts: Updated cloudlyApiClient test setup to use testCloudlyConfig for dynamic port allocation.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.6 - fix(test)
|
||||||
|
Enhance test helpers with dynamic Hetzner token retrieval.
|
||||||
|
|
||||||
|
- Updated test/helpers/cloudlyfactory.ts to retrieve Hetzner token from environment variables.
|
||||||
|
- Expanded docker_tags workflow to securely handle and pass new environment secrets.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.5 - fix(helpers)
|
||||||
|
Add missing sslMode configuration to Cloudly config.
|
||||||
|
|
||||||
|
- Added the sslMode key with a value of 'none' to the Cloudly configuration object in test/helpers/cloudlyfactory.ts.
|
||||||
|
|
||||||
|
## 2024-11-06 - 4.3.4 - fix(testing)
|
||||||
|
Fixed Cloudly testing setup and dependencies
|
||||||
|
|
||||||
|
- Updated devDependency @push.rocks/tapbundle version from ^5.3.0 to ^5.4.3 in package.json.
|
||||||
|
- Updated devDependency @push.rocks/npmextra version from ^5.1.1 to ^5.1.2 in package.json.
|
||||||
|
- Improved the Cloudly test suite setup to ensure proper initialization of MongoDB and S3 services.
|
||||||
|
- Ensured asynchronous stopping and cleanup of MongoDB and S3 services post-test execution.
|
||||||
|
|
||||||
|
## 2024-11-05 - 4.3.3 - fix(core)
|
||||||
|
Fix configuration initialization by accepting a config argument
|
||||||
|
|
||||||
|
- Configuration initialization now accepts an optional config argument
|
||||||
|
- Updated test cloudly factory to use default public URL and port
|
||||||
|
- Updated dependencies versions
|
||||||
|
|
||||||
|
## 2024-11-05 - 4.3.2 - fix(npmextra)
|
||||||
|
Updated npm registry URL in npmextra.json
|
||||||
|
|
||||||
|
|
||||||
|
## 2024-11-05 - 4.3.1 - fix(package)
|
||||||
|
Update dependency version for @git.zone/tspublish
|
||||||
|
|
||||||
|
- Bump @git.zone/tspublish from version ^1.7.6 to ^1.7.7 in package.json
|
||||||
|
|
||||||
|
## 2024-11-05 - 4.3.0 - feat(dependencies)
|
||||||
|
Upgrade dependencies and include publish orders
|
||||||
|
|
||||||
|
- Upgraded @git.zone/tsbuild to version ^2.2.0
|
||||||
|
- Upgraded @git.zone/tspublish to version ^1.7.6
|
||||||
|
- Upgraded @types/node to version ^22.8.7
|
||||||
|
- Added publish order to ts_apiclient/tspublish.json and ts_interfaces/tspublish.json
|
||||||
|
|
||||||
|
## 2024-11-04 - 4.2.1 - fix(config)
|
||||||
|
Fix Docker image URL in Gitea workflow.
|
||||||
|
|
||||||
|
- Corrected the IMAGE URL from 'hosttoday' to 'host.today'.
|
||||||
|
|
||||||
|
## 2024-11-04 - 4.2.0 - feat(cloudron)
|
||||||
|
Add Dockerfile for Cloudron deployment
|
||||||
|
|
||||||
|
- Introduced a new Dockerfile for Cloudron deployment.
|
||||||
|
- The Dockerfile uses the latest version of cloudly as a base image.
|
||||||
|
|
||||||
## 2024-10-28 - 4.1.3 - fix(dependency)
|
## 2024-10-28 - 4.1.3 - fix(dependency)
|
||||||
Updated dependency @git.zone/tspublish to version ^1.6.0
|
Updated dependency @git.zone/tspublish to version ^1.6.0
|
||||||
|
|
||||||
|
@ -2,23 +2,21 @@
|
|||||||
"npmci": {
|
"npmci": {
|
||||||
"npmGlobalTools": [],
|
"npmGlobalTools": [],
|
||||||
"npmAccessLevel": "public",
|
"npmAccessLevel": "public",
|
||||||
"npmRegistryUrl": "verdaccio.lossless.one",
|
"npmRegistryUrl": "verdaccio.lossless.digital",
|
||||||
"dockerRegistryRepoMap": {
|
"dockerRegistryRepoMap": {
|
||||||
"registry.gitlab.com": "losslessone/services/servezone/cloudly"
|
"code.foss.global": "serve.zone/cloudly"
|
||||||
},
|
},
|
||||||
"dockerBuildargEnvMap": {
|
"dockerBuildargEnvMap": {}
|
||||||
"NPMCI_TOKEN_NPM2": "NPMCI_TOKEN_NPM2"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"gitzone": {
|
"gitzone": {
|
||||||
"projectType": "service",
|
"projectType": "service",
|
||||||
"module": {
|
"module": {
|
||||||
"githost": "gitlab.com",
|
"githost": "code.foss.global",
|
||||||
"gitscope": "servezone/private",
|
"gitscope": "serve.zone",
|
||||||
"gitrepo": "cloudly",
|
"gitrepo": "cloudly",
|
||||||
"description": "A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.",
|
"description": "A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.",
|
||||||
"npmPackagename": "@serve.zone/cloudly",
|
"npmPackagename": "@serve.zone/cloudly",
|
||||||
"license": "UNLICENSED",
|
"license": "MIT",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"multi-cloud management",
|
"multi-cloud management",
|
||||||
"Docker Swarmkit",
|
"Docker Swarmkit",
|
||||||
|
24
package.json
24
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@serve.zone/cloudly",
|
"name": "@serve.zone/cloudly",
|
||||||
"version": "4.1.3",
|
"version": "4.5.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.",
|
"description": "A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@ -22,14 +22,14 @@
|
|||||||
"docs": "tsdoc aidoc"
|
"docs": "tsdoc aidoc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@git.zone/tsbuild": "^2.1.85",
|
"@git.zone/tsbuild": "^2.2.0",
|
||||||
"@git.zone/tsbundle": "^2.1.0",
|
"@git.zone/tsbundle": "^2.1.0",
|
||||||
"@git.zone/tsdoc": "^1.4.2",
|
"@git.zone/tsdoc": "^1.4.2",
|
||||||
"@git.zone/tspublish": "^1.6.0",
|
"@git.zone/tspublish": "^1.7.7",
|
||||||
"@git.zone/tstest": "^1.0.90",
|
"@git.zone/tstest": "^1.0.90",
|
||||||
"@git.zone/tswatch": "^2.0.25",
|
"@git.zone/tswatch": "^2.0.36",
|
||||||
"@push.rocks/tapbundle": "^5.3.0",
|
"@push.rocks/tapbundle": "^5.5.3",
|
||||||
"@types/node": "^22.8.2"
|
"@types/node": "^22.10.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@api.global/typedrequest": "3.1.10",
|
"@api.global/typedrequest": "3.1.10",
|
||||||
@ -40,16 +40,16 @@
|
|||||||
"@apiclient.xyz/docker": "^1.2.7",
|
"@apiclient.xyz/docker": "^1.2.7",
|
||||||
"@apiclient.xyz/hetznercloud": "^1.2.0",
|
"@apiclient.xyz/hetznercloud": "^1.2.0",
|
||||||
"@apiclient.xyz/slack": "^3.0.9",
|
"@apiclient.xyz/slack": "^3.0.9",
|
||||||
"@design.estate/dees-catalog": "^1.2.0",
|
"@design.estate/dees-catalog": "^1.3.1",
|
||||||
"@design.estate/dees-domtools": "^2.0.64",
|
"@design.estate/dees-domtools": "^2.0.64",
|
||||||
"@design.estate/dees-element": "^2.0.39",
|
"@design.estate/dees-element": "^2.0.39",
|
||||||
"@git.zone/tsrun": "^1.3.3",
|
"@git.zone/tsrun": "^1.3.3",
|
||||||
"@push.rocks/early": "^4.0.3",
|
"@push.rocks/early": "^4.0.3",
|
||||||
"@push.rocks/npmextra": "^5.0.23",
|
"@push.rocks/npmextra": "^5.1.2",
|
||||||
"@push.rocks/projectinfo": "^5.0.1",
|
"@push.rocks/projectinfo": "^5.0.1",
|
||||||
"@push.rocks/qenv": "^6.0.5",
|
"@push.rocks/qenv": "^6.1.0",
|
||||||
"@push.rocks/smartacme": "^5.0.0",
|
"@push.rocks/smartacme": "^5.0.0",
|
||||||
"@push.rocks/smartbucket": "^3.0.23",
|
"@push.rocks/smartbucket": "^3.3.7",
|
||||||
"@push.rocks/smartcli": "^4.0.11",
|
"@push.rocks/smartcli": "^4.0.11",
|
||||||
"@push.rocks/smartclickhouse": "^2.0.17",
|
"@push.rocks/smartclickhouse": "^2.0.17",
|
||||||
"@push.rocks/smartdata": "^5.2.10",
|
"@push.rocks/smartdata": "^5.2.10",
|
||||||
@ -65,11 +65,11 @@
|
|||||||
"@push.rocks/smartlog-interfaces": "^3.0.2",
|
"@push.rocks/smartlog-interfaces": "^3.0.2",
|
||||||
"@push.rocks/smartpath": "^5.0.18",
|
"@push.rocks/smartpath": "^5.0.18",
|
||||||
"@push.rocks/smartpromise": "^4.0.4",
|
"@push.rocks/smartpromise": "^4.0.4",
|
||||||
"@push.rocks/smartrequest": "^2.0.22",
|
"@push.rocks/smartrequest": "^2.0.23",
|
||||||
"@push.rocks/smartrx": "^3.0.7",
|
"@push.rocks/smartrx": "^3.0.7",
|
||||||
"@push.rocks/smartssh": "^2.0.1",
|
"@push.rocks/smartssh": "^2.0.1",
|
||||||
"@push.rocks/smartstate": "^2.0.19",
|
"@push.rocks/smartstate": "^2.0.19",
|
||||||
"@push.rocks/smartstream": "^3.2.4",
|
"@push.rocks/smartstream": "^3.2.5",
|
||||||
"@push.rocks/smartstring": "^4.0.15",
|
"@push.rocks/smartstring": "^4.0.15",
|
||||||
"@push.rocks/smartunique": "^3.0.9",
|
"@push.rocks/smartunique": "^3.0.9",
|
||||||
"@push.rocks/taskbuffer": "^3.0.2",
|
"@push.rocks/taskbuffer": "^3.0.2",
|
||||||
|
12102
pnpm-lock.yaml
generated
12102
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -3,25 +3,48 @@ const testQenv = new Qenv('./', './.nogit/');
|
|||||||
|
|
||||||
import * as cloudly from '../../ts/index.js';
|
import * as cloudly from '../../ts/index.js';
|
||||||
|
|
||||||
|
const stopFunctions: Array<() => Promise<void>> = [];
|
||||||
|
|
||||||
|
const tapToolsNodeMod = await import('@push.rocks/tapbundle/node');
|
||||||
|
const smartmongo = await tapToolsNodeMod.tapNodeTools.createSmartmongo();
|
||||||
|
stopFunctions.push(async () => {
|
||||||
|
await smartmongo.stopAndDumpToDir('./.nogit/mongodump');
|
||||||
|
});
|
||||||
|
const smarts3 = await tapToolsNodeMod.tapNodeTools.createSmarts3();
|
||||||
|
await smarts3.createBucket('cloudly-test');
|
||||||
|
stopFunctions.push(async () => {
|
||||||
|
await smarts3.stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
export const testCloudlyConfig: cloudly.ICloudlyConfig = {
|
||||||
|
cfToken: await testQenv.getEnvVarOnDemand('CF_TOKEN'),
|
||||||
|
environment: 'integration',
|
||||||
|
letsEncryptEmail: 'test@serve.zone',
|
||||||
|
publicUrl: '127.0.0.1',
|
||||||
|
publicPort: '8080',
|
||||||
|
mongoDescriptor: await smartmongo.getMongoDescriptor(),
|
||||||
|
s3Descriptor: await smarts3.getS3Descriptor(),
|
||||||
|
sslMode: 'none',
|
||||||
|
...(() => {
|
||||||
|
if (process.env.NPMCI_SECRET01) {
|
||||||
|
return {
|
||||||
|
hetznerToken: process.env.NPMCI_SECRET01,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})(),
|
||||||
|
};
|
||||||
|
|
||||||
|
await tapToolsNodeMod.tapNodeTools.testFileProvider.getDockerAlpineImageAsLocalTarball();
|
||||||
|
|
||||||
export const createCloudly = async () => {
|
export const createCloudly = async () => {
|
||||||
const cloudlyConfig: cloudly.ICloudlyConfig = {
|
const cloudlyInstance = new cloudly.Cloudly(testCloudlyConfig);
|
||||||
cfToken: await testQenv.getEnvVarOnDemand('CF_TOKEN'),
|
|
||||||
environment: 'integration',
|
|
||||||
letsEncryptEmail: await testQenv.getEnvVarOnDemand('LETSENCRYPT_EMAIL'),
|
|
||||||
publicUrl: await testQenv.getEnvVarOnDemand('SERVEZONE_URL'),
|
|
||||||
publicPort: await testQenv.getEnvVarOnDemand('SERVEZONE_PORT'),
|
|
||||||
mongoDescriptor: {
|
|
||||||
mongoDbName: await testQenv.getEnvVarOnDemand('MONGODB_DATABASE'),
|
|
||||||
mongoDbUser: await testQenv.getEnvVarOnDemand('MONGODB_USER'),
|
|
||||||
mongoDbPass: await testQenv.getEnvVarOnDemand('MONGODB_PASSWORD'),
|
|
||||||
mongoDbUrl: await testQenv.getEnvVarOnDemand('MONGODB_URL'),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const cloudlyInstance = new cloudly.Cloudly();
|
|
||||||
return cloudlyInstance;
|
return cloudlyInstance;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export const stopCloudly = async () => {
|
||||||
|
await Promise.all(stopFunctions.map((stopFunction) => stopFunction()));
|
||||||
|
};
|
||||||
|
|
||||||
export const getEnvVarOnDemand = async (envVarName: string) => {
|
export const getEnvVarOnDemand = async (envVarName: string) => {
|
||||||
return testQenv.getEnvVarOnDemand(envVarName);
|
return testQenv.getEnvVarOnDemand(envVarName);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ tap.preTask('should create a new machine user for testing', async () => {
|
|||||||
tap.test('should create a new cloudlyApiClient', async () => {
|
tap.test('should create a new cloudlyApiClient', async () => {
|
||||||
testClient = new cloudlyApiClient.CloudlyApiClient({
|
testClient = new cloudlyApiClient.CloudlyApiClient({
|
||||||
registerAs: 'api',
|
registerAs: 'api',
|
||||||
cloudlyUrl: `http://localhost:${await helpers.getEnvVarOnDemand('SERVEZONE_PORT')}`,
|
cloudlyUrl: `http://${helpers.testCloudlyConfig.publicUrl}:${helpers.testCloudlyConfig.publicPort}`,
|
||||||
});
|
});
|
||||||
await testClient.start();
|
await testClient.start();
|
||||||
expect(testClient).toBeTruthy();
|
expect(testClient).toBeTruthy();
|
||||||
@ -73,6 +73,7 @@ tap.test('should upload an image version', async () => {
|
|||||||
|
|
||||||
tap.test('should stop the apiclient', async (toolsArg) => {
|
tap.test('should stop the apiclient', async (toolsArg) => {
|
||||||
await toolsArg.delayFor(10000);
|
await toolsArg.delayFor(10000);
|
||||||
|
await helpers.stopCloudly();
|
||||||
await testClient.stop();
|
await testClient.stop();
|
||||||
await testCloudly.stop();
|
await testCloudly.stop();
|
||||||
})
|
})
|
||||||
|
@ -14,8 +14,10 @@ tap.test('should init cloudly', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('should end the service', async (tools) => {
|
tap.test('should end the service', async (tools) => {
|
||||||
|
await tools.delayFor(5000);
|
||||||
|
await helpers.stopCloudly();
|
||||||
await testCloudly.stop();
|
await testCloudly.stop();
|
||||||
tools.delayFor(1000).then(() => process.exit())
|
tools.delayFor(1000).then(() => process.exit());
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.start();
|
tap.start();
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/cloudly',
|
name: '@serve.zone/cloudly',
|
||||||
version: '4.1.3',
|
version: '4.5.0',
|
||||||
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,9 @@ export class Cloudly {
|
|||||||
|
|
||||||
private readyDeferred = new plugins.smartpromise.Deferred();
|
private readyDeferred = new plugins.smartpromise.Deferred();
|
||||||
|
|
||||||
constructor() {
|
private configOptions: plugins.servezoneInterfaces.data.ICloudlyConfig;
|
||||||
|
constructor(configArg?: plugins.servezoneInterfaces.data.ICloudlyConfig) {
|
||||||
|
this.configOptions = configArg;
|
||||||
this.cloudlyInfo = new CloudlyInfo(this);
|
this.cloudlyInfo = new CloudlyInfo(this);
|
||||||
this.config = new CloudlyConfig(this);
|
this.config = new CloudlyConfig(this);
|
||||||
|
|
||||||
@ -90,7 +92,7 @@ export class Cloudly {
|
|||||||
*/
|
*/
|
||||||
public async start() {
|
public async start() {
|
||||||
// config
|
// config
|
||||||
await this.config.init();
|
await this.config.init(this.configOptions);
|
||||||
|
|
||||||
// manageers
|
// manageers
|
||||||
await this.authManager.start();
|
await this.authManager.start();
|
||||||
|
@ -15,7 +15,7 @@ export class CloudlyConfig {
|
|||||||
this.cloudlyRef = cloudlyRefArg;
|
this.cloudlyRef = cloudlyRefArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async init() {
|
public async init(configArg?: plugins.servezoneInterfaces.data.ICloudlyConfig) {
|
||||||
this.appData =
|
this.appData =
|
||||||
await plugins.npmextra.AppData.createAndInit<plugins.servezoneInterfaces.data.ICloudlyConfig>(
|
await plugins.npmextra.AppData.createAndInit<plugins.servezoneInterfaces.data.ICloudlyConfig>(
|
||||||
{
|
{
|
||||||
@ -54,6 +54,7 @@ export class CloudlyConfig {
|
|||||||
'environment',
|
'environment',
|
||||||
'mongoDescriptor',
|
'mongoDescriptor',
|
||||||
],
|
],
|
||||||
|
overwriteObject: configArg,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -14,5 +14,26 @@ export class ServiceManager {
|
|||||||
|
|
||||||
constructor(cloudlyRef: Cloudly) {
|
constructor(cloudlyRef: Cloudly) {
|
||||||
this.cloudlyRef = cloudlyRef;
|
this.cloudlyRef = cloudlyRef;
|
||||||
|
|
||||||
|
this.typedrouter.addTypedHandler(
|
||||||
|
new plugins.typedrequest.TypedHandler<plugins.servezoneInterfaces.requests.service.IRequest_Any_Cloudly_GetServices>(
|
||||||
|
'getServices',
|
||||||
|
async (reqArg) => {
|
||||||
|
await plugins.smartguard.passGuardsOrReject(reqArg, [
|
||||||
|
this.cloudlyRef.authManager.validIdentityGuard,
|
||||||
|
]);
|
||||||
|
|
||||||
|
const services = await this.CService.getInstances({});
|
||||||
|
|
||||||
|
return {
|
||||||
|
services: await Promise.all(
|
||||||
|
services.map((service) => {
|
||||||
|
return service.createSavableObject();
|
||||||
|
})
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ import * as plugins from './plugins.js';
|
|||||||
export type TClientType = 'api' | 'ci' | 'coreflow' | 'cli' | 'serverconfig';
|
export type TClientType = 'api' | 'ci' | 'coreflow' | 'cli' | 'serverconfig';
|
||||||
|
|
||||||
import { Image } from './classes.image.js';
|
import { Image } from './classes.image.js';
|
||||||
|
import { Service } from './classes.service.js';
|
||||||
|
|
||||||
export class CloudlyApiClient {
|
export class CloudlyApiClient {
|
||||||
private cloudlyUrl: string;
|
private cloudlyUrl: string;
|
||||||
@ -20,7 +21,7 @@ export class CloudlyApiClient {
|
|||||||
plugins.servezoneInterfaces.requests.server.IRequest_TriggerServerAction['request']
|
plugins.servezoneInterfaces.requests.server.IRequest_TriggerServerAction['request']
|
||||||
>();
|
>();
|
||||||
|
|
||||||
constructor(optionsArg?: {
|
constructor(optionsArg: {
|
||||||
registerAs: TClientType;
|
registerAs: TClientType;
|
||||||
cloudlyUrl?: string;
|
cloudlyUrl?: string;
|
||||||
}) {
|
}) {
|
||||||
@ -157,6 +158,9 @@ export class CloudlyApiClient {
|
|||||||
|
|
||||||
public images = {
|
public images = {
|
||||||
// Images
|
// Images
|
||||||
|
getImageById: async (imageIdArg: string) => {
|
||||||
|
return Image.getImageById(this, imageIdArg);
|
||||||
|
},
|
||||||
getImages: async () => {
|
getImages: async () => {
|
||||||
return Image.getImages(this);
|
return Image.getImages(this);
|
||||||
},
|
},
|
||||||
@ -164,4 +168,17 @@ export class CloudlyApiClient {
|
|||||||
return Image.createImage(this, optionsArg);
|
return Image.createImage(this, optionsArg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public services = {
|
||||||
|
// Services
|
||||||
|
getServiceById: async (serviceIdArg: string) => {
|
||||||
|
return Service.getServiceById(this, serviceIdArg);
|
||||||
|
},
|
||||||
|
getServices: async () => {
|
||||||
|
return Service.getServices(this);
|
||||||
|
},
|
||||||
|
createService: async (optionsArg: Parameters<typeof Service.createService>[1]) => {
|
||||||
|
return Service.createService(this, optionsArg);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,19 @@ export class Image implements plugins.servezoneInterfaces.data.IImage {
|
|||||||
return resultImages;
|
return resultImages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async getImageById(cloudlyClientRef: CloudlyApiClient, imageIdArg: string) {
|
||||||
|
const getImageByIdTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.image.IRequest_GetImage>(
|
||||||
|
'getImage'
|
||||||
|
);
|
||||||
|
const response = await getImageByIdTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
imageId: imageIdArg,
|
||||||
|
});
|
||||||
|
const newImage = new Image(cloudlyClientRef);
|
||||||
|
Object.assign(newImage, response.image);
|
||||||
|
return newImage;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* creates a new image
|
* creates a new image
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,68 @@
|
|||||||
import * as plugins from './plugins.js';
|
import * as plugins from './plugins.js';
|
||||||
|
import type { CloudlyApiClient } from './classes.cloudlyapiclient.js';
|
||||||
|
|
||||||
export class Service {
|
export class Service {
|
||||||
|
public static async getServices(cloudlyClientRef: CloudlyApiClient) {
|
||||||
|
const getAllServicesTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.service.IRequest_Any_Cloudly_GetServices>(
|
||||||
|
'getServices'
|
||||||
|
);
|
||||||
|
const response = await getAllServicesTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
});
|
||||||
|
const resultServices: Service[] = [];
|
||||||
|
for (const service of response.services) {
|
||||||
|
const newService = new Service(cloudlyClientRef);
|
||||||
|
Object.assign(newService, service);
|
||||||
|
resultServices.push(newService);
|
||||||
|
}
|
||||||
|
return resultServices;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getServiceById(cloudlyClientRef: CloudlyApiClient, serviceIdArg: string) {
|
||||||
|
const getServiceByIdTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.service.IRequest_Any_Cloudly_GetServiceById>(
|
||||||
|
'getServiceById'
|
||||||
|
);
|
||||||
|
const response = await getServiceByIdTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
serviceId: serviceIdArg,
|
||||||
|
});
|
||||||
|
const newService = new Service(cloudlyClientRef);
|
||||||
|
Object.assign(newService, response.service);
|
||||||
|
return newService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a new service
|
||||||
|
*/
|
||||||
|
public static async createService(cloudlyClientRef: CloudlyApiClient, serviceDataArg: Partial<plugins.servezoneInterfaces.data.IService['data']>) {
|
||||||
|
const createServiceTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.service.IRequest_Any_Cloudly_CreateService>(
|
||||||
|
'createService'
|
||||||
|
);
|
||||||
|
const response = await createServiceTR.fire({
|
||||||
|
identity: cloudlyClientRef.identity,
|
||||||
|
name: serviceDataArg.name,
|
||||||
|
description: serviceDataArg.description,
|
||||||
|
imageId: serviceDataArg.imageId,
|
||||||
|
imageVersion: serviceDataArg.imageVersion,
|
||||||
|
environment: {},
|
||||||
|
secretBundleId: null,
|
||||||
|
scaleFactor: 1,
|
||||||
|
balancingStrategy: serviceDataArg.balancingStrategy,
|
||||||
|
ports: {
|
||||||
|
web: null,
|
||||||
|
},
|
||||||
|
resources: serviceDataArg.resources,
|
||||||
|
domains: [],
|
||||||
|
});
|
||||||
|
const newService = new Service(cloudlyClientRef);
|
||||||
|
Object.assign(newService, response.service);
|
||||||
|
return newService;
|
||||||
|
}
|
||||||
|
|
||||||
|
// INSTANCE
|
||||||
|
cloudlyClientRef: CloudlyApiClient;
|
||||||
|
|
||||||
|
constructor(cloudlyClientRef: CloudlyApiClient) {
|
||||||
|
this.cloudlyClientRef = cloudlyClientRef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"order": 1,
|
||||||
"name": "@serve.zone/api",
|
"name": "@serve.zone/api",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"@serve.zone/interfaces",
|
"@serve.zone/interfaces",
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* results from a DeploymentDirective
|
* a deployment happens when a service is deployed
|
||||||
* tracks the status of a deployment
|
* tracks the status of a deployment
|
||||||
*/
|
*/
|
||||||
export interface IDeployment {
|
export interface IDeployment {
|
||||||
id: string;
|
id: string;
|
||||||
deploymentDirectiveId: string;
|
|
||||||
affectedServiceIds: string[];
|
affectedServiceIds: string[];
|
||||||
usedImageId: string;
|
usedImageId: string;
|
||||||
deploymentLog: string[];
|
deploymentLog: string[];
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
import type { IServiceRessources } from "./docker.js";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* used for tellilng a cluster about a disired deployment
|
|
||||||
* and specifies its configuration
|
|
||||||
*/
|
|
||||||
export interface IDeploymentDirective {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
imageClaim: string;
|
|
||||||
ports: { hostPort: number; containerPort: number }[];
|
|
||||||
environment: { [key: string]: string };
|
|
||||||
resources?: IServiceRessources;
|
|
||||||
}
|
|
@ -2,7 +2,6 @@ export * from './cloudlyconfig.js';
|
|||||||
export * from './cluster.js';
|
export * from './cluster.js';
|
||||||
export * from './config.js';
|
export * from './config.js';
|
||||||
export * from './deployment.js';
|
export * from './deployment.js';
|
||||||
export * from './deploymentdirective.js';
|
|
||||||
export * from './docker.js';
|
export * from './docker.js';
|
||||||
export * from './env.js';
|
export * from './env.js';
|
||||||
export * from './event.js';
|
export * from './event.js';
|
||||||
|
@ -4,6 +4,7 @@ export interface IService {
|
|||||||
id: string;
|
id: string;
|
||||||
data: {
|
data: {
|
||||||
name: string;
|
name: string;
|
||||||
|
description: string;
|
||||||
imageId: string;
|
imageId: string;
|
||||||
imageVersion: string;
|
imageVersion: string;
|
||||||
environment: { [key: string]: string };
|
environment: { [key: string]: string };
|
||||||
@ -21,6 +22,5 @@ export interface IService {
|
|||||||
protocol?: 'http' | 'https' | 'ssh';
|
protocol?: 'http' | 'https' | 'ssh';
|
||||||
}[];
|
}[];
|
||||||
deploymentIds: string[];
|
deploymentIds: string[];
|
||||||
deploymentDirectiveIds: string[];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ import * as clusterInterfaces from '../data/cluster.js';
|
|||||||
import * as serverInterfaces from '../data/server.js';
|
import * as serverInterfaces from '../data/server.js';
|
||||||
import * as userInterfaces from '../data/user.js';
|
import * as userInterfaces from '../data/user.js';
|
||||||
import type { IService } from '../data/service.js';
|
import type { IService } from '../data/service.js';
|
||||||
import type { IDeploymentDirective } from '../data/deploymentdirective.js';
|
|
||||||
|
|
||||||
export interface IRequest_Any_Cloudly_GetServerConfig
|
export interface IRequest_Any_Cloudly_GetServerConfig
|
||||||
extends plugins.typedrequestInterfaces.implementsTR<
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
@ -31,7 +30,7 @@ extends plugins.typedrequestInterfaces.implementsTR<
|
|||||||
};
|
};
|
||||||
response: {
|
response: {
|
||||||
configData: clusterInterfaces.ICluster;
|
configData: clusterInterfaces.ICluster;
|
||||||
deploymentDirectives: IDeploymentDirective[];
|
services: IService[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +42,7 @@ extends plugins.typedrequestInterfaces.implementsTR<
|
|||||||
method: 'pushClusterConfig';
|
method: 'pushClusterConfig';
|
||||||
request: {
|
request: {
|
||||||
configData: clusterInterfaces.ICluster;
|
configData: clusterInterfaces.ICluster;
|
||||||
deploymentDirectives: IDeploymentDirective[];
|
services: IService[];
|
||||||
};
|
};
|
||||||
response: {};
|
response: {};
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ export interface IRequest_GetAllImages extends plugins.typedrequestInterfaces.im
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* gets a single image
|
* gets a single image
|
||||||
|
* authentication can happen via imageClaim or identity
|
||||||
*/
|
*/
|
||||||
export interface IRequest_GetImage extends plugins.typedrequestInterfaces.implementsTR<
|
export interface IRequest_GetImage extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
plugins.typedrequestInterfaces.ITypedRequest,
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
@ -11,6 +11,7 @@ import * as networkRequests from './network.js';
|
|||||||
import * as routingRequests from './routing.js';
|
import * as routingRequests from './routing.js';
|
||||||
import * as secretRequests from './secret.js';
|
import * as secretRequests from './secret.js';
|
||||||
import * as serverRequests from './server.js';
|
import * as serverRequests from './server.js';
|
||||||
|
import * as serviceRequests from './service.js';
|
||||||
import * as statusRequests from './status.js';
|
import * as statusRequests from './status.js';
|
||||||
import * as versionRequests from './version.js';
|
import * as versionRequests from './version.js';
|
||||||
|
|
||||||
@ -26,6 +27,7 @@ export {
|
|||||||
routingRequests as routing,
|
routingRequests as routing,
|
||||||
secretRequests as secret,
|
secretRequests as secret,
|
||||||
serverRequests as server,
|
serverRequests as server,
|
||||||
|
serviceRequests as service,
|
||||||
statusRequests as status,
|
statusRequests as status,
|
||||||
versionRequests as version,
|
versionRequests as version,
|
||||||
};
|
};
|
||||||
|
113
ts_interfaces/requests/service.ts
Normal file
113
ts_interfaces/requests/service.ts
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
import * as plugins from '../plugins.js';
|
||||||
|
import type { IService } from '../data/service.js';
|
||||||
|
import type { IIdentity } from '../data/user.js';
|
||||||
|
import type { IServiceRessources } from '../data/docker.js';
|
||||||
|
|
||||||
|
export interface IRequest_Any_Cloudly_GetServiceById
|
||||||
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
IRequest_Any_Cloudly_GetServiceById
|
||||||
|
> {
|
||||||
|
method: 'getServiceById';
|
||||||
|
request: {
|
||||||
|
identity: IIdentity;
|
||||||
|
serviceId: string;
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
service: IService;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IRequest_Any_Cloudly_GetServices
|
||||||
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
IRequest_Any_Cloudly_GetServices
|
||||||
|
> {
|
||||||
|
method: 'getServices';
|
||||||
|
request: {
|
||||||
|
identity: IIdentity;
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
services: IService[];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IRequest_Any_Cloudly_CreateService
|
||||||
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
IRequest_Any_Cloudly_CreateService
|
||||||
|
> {
|
||||||
|
method: 'createService';
|
||||||
|
request: {
|
||||||
|
identity: IIdentity;
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
imageId: string;
|
||||||
|
imageVersion: string;
|
||||||
|
environment: { [key: string]: string };
|
||||||
|
secretBundleId: string;
|
||||||
|
scaleFactor: number;
|
||||||
|
balancingStrategy: 'round-robin' | 'least-connections';
|
||||||
|
ports: {
|
||||||
|
web: number;
|
||||||
|
custom?: { [domain: string]: string };
|
||||||
|
};
|
||||||
|
resources?: IServiceRessources;
|
||||||
|
domains: {
|
||||||
|
name: string;
|
||||||
|
port?: number;
|
||||||
|
protocol?: 'http' | 'https' | 'ssh';
|
||||||
|
}[];
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
service: IService;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IRequest_Any_Cloudly_UpdateService
|
||||||
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
IRequest_Any_Cloudly_UpdateService
|
||||||
|
> {
|
||||||
|
method: 'updateService';
|
||||||
|
request: {
|
||||||
|
identity: IIdentity;
|
||||||
|
serviceId: string;
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
imageId: string;
|
||||||
|
imageVersion: string;
|
||||||
|
environment: { [key: string]: string };
|
||||||
|
secretBundleId: string;
|
||||||
|
scaleFactor: number;
|
||||||
|
balancingStrategy: 'round-robin' | 'least-connections';
|
||||||
|
ports: {
|
||||||
|
web: number;
|
||||||
|
custom?: { [domain: string]: string };
|
||||||
|
};
|
||||||
|
resources?: IServiceRessources;
|
||||||
|
domains: {
|
||||||
|
name: string;
|
||||||
|
port?: number;
|
||||||
|
protocol?: 'http' | 'https' | 'ssh';
|
||||||
|
}[];
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
service: IService;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IRequest_Any_Cloudly_DeleteService
|
||||||
|
extends plugins.typedrequestInterfaces.implementsTR<
|
||||||
|
plugins.typedrequestInterfaces.ITypedRequest,
|
||||||
|
IRequest_Any_Cloudly_DeleteService
|
||||||
|
> {
|
||||||
|
method: 'deleteService';
|
||||||
|
request: {
|
||||||
|
identity: IIdentity;
|
||||||
|
serviceId: string;
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
success: boolean;
|
||||||
|
};
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"order": 0,
|
||||||
"name": "@serve.zone/interfaces",
|
"name": "@serve.zone/interfaces",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"@api.global/typedrequest-interfaces",
|
"@api.global/typedrequest-interfaces",
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/cloudly',
|
name: '@serve.zone/cloudly',
|
||||||
version: '4.1.3',
|
version: '4.5.0',
|
||||||
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
||||||
}
|
}
|
||||||
|
@ -10,13 +10,13 @@
|
|||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@serve.zone/api": [
|
"@serve.zone/api": [
|
||||||
"./ts_apiclient/index.ts"
|
"./ts_apiclient/index.js"
|
||||||
],
|
],
|
||||||
"@serve.zone/cli": [
|
"@serve.zone/cli": [
|
||||||
"./ts_cliclient/index.ts"
|
"./ts_cliclient/index.js"
|
||||||
],
|
],
|
||||||
"@serve.zone/interfaces": [
|
"@serve.zone/interfaces": [
|
||||||
"./ts_interfaces/index.ts"
|
"./ts_interfaces/index.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user