{"id":15292484,"url":"https://github.com/springernature/ee-snpaas-cli","last_synced_at":"2026-02-13T00:44:18.554Z","repository":{"id":57469006,"uuid":"153640709","full_name":"springernature/ee-snpaas-cli","owner":"springernature","description":"SNPaaS client and docker image","archived":false,"fork":false,"pushed_at":"2024-03-18T13:53:23.000Z","size":146,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":49,"default_branch":"master","last_synced_at":"2025-09-02T00:40:56.530Z","etag":null,"topics":["bosh","cloudfoundry","docker","snpaas","terraform"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/springernature.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-18T14:47:39.000Z","updated_at":"2023-03-16T01:39:33.000Z","dependencies_parsed_at":"2024-11-15T03:51:59.957Z","dependency_job_id":"9eb4dcc2-6581-4754-9959-2f4b44a050a1","html_url":"https://github.com/springernature/ee-snpaas-cli","commit_stats":{"total_commits":183,"total_committers":7,"mean_commits":"26.142857142857142","dds":"0.28415300546448086","last_synced_commit":"ddea7ac7242e4116c686d8c3f044963d6e796799"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/springernature/ee-snpaas-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fee-snpaas-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fee-snpaas-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fee-snpaas-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fee-snpaas-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/springernature","download_url":"https://codeload.github.com/springernature/ee-snpaas-cli/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springernature%2Fee-snpaas-cli/sbom","scorecard":{"id":842457,"data":{"date":"2025-08-11","repo":{"name":"github.com/springernature/ee-snpaas-cli","commit":"ddea7ac7242e4116c686d8c3f044963d6e796799"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/docker-build-gcr.yml:1","Warn: no topLevel permission defined: .github/workflows/docker-push-public-release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker-build-gcr.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-build-gcr.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-build-gcr.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-build-gcr.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-build-gcr.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-build-gcr.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-build-gcr.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-build-gcr.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-build-gcr.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-build-gcr.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker-push-public-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-push-public-release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-push-public-release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-push-public-release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-push-public-release.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-push-public-release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docker-push-public-release.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/springernature/ee-snpaas-cli/docker-push-public-release.yml/master?enable=pin","Warn: containerImage not pinned by hash: docker/snpaas-tools/Dockerfile:1: pin your Docker image by updating debian:10.11-slim to debian:10.11-slim@sha256:bbf8ca5a94fe10b78b681d0f4efe8dbc23839d26e811ab6a1f252c7663c7e244","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}}]},"last_synced_at":"2025-08-23T20:47:13.669Z","repository_id":57469006,"created_at":"2025-08-23T20:47:13.669Z","updated_at":"2025-08-23T20:47:13.669Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274753627,"owners_count":25342825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bosh","cloudfoundry","docker","snpaas","terraform"],"created_at":"2024-09-30T16:18:09.997Z","updated_at":"2026-02-13T00:44:13.527Z","avatar_url":"https://github.com/springernature.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ee-snpaas-cli\n\n[![Build docker and push to GCR (Github Packages and Google)](https://github.com/springernature/ee-snpaas-cli/actions/workflows/docker-build-gcr.yml/badge.svg)](https://github.com/springernature/ee-snpaas-cli/actions/workflows/docker-build-gcr.yml)\n[![Build docker and publish to DockerHub if released](https://github.com/springernature/ee-snpaas-cli/actions/workflows/docker-push-public-release.yml/badge.svg)](https://github.com/springernature/ee-snpaas-cli/actions/workflows/docker-push-public-release.yml)\n\nEngineering Enablement SNPaaS client.\n\nThis repository uses GitHub Actions to build the docker images. All changes are build and push to\nGithub Packages and our Google Container Registry. \nTo release a new version and publish to DockerHUB (in order to be used by snpaas-cli) please create a\nnew Github Release with a proper version (usually the same as you specify in Dockerfile/VERSION, but\nthe version from the release wins).\n\n\n## Install\n```\nwget https://raw.githubusercontent.com/springernature/ee-snpaas-cli/master/snpaas -O snpaas \u0026\u0026 chmod a+x snpaas\n```\n\n## Don't want to install ...\n\nSNPaaS Command line program is based on Docker. This command is just a shell\nwrapper for docker execute something like (plus a lot of variables):\n\n```\ndocker run --rm -v /home/$USER:/home/$USER -v $(pwd):/data -it platformengineering/snpaas-tools \"${@}\"\n```\n\nThere is a python version of this program, but it has some issues, so it is\ndeveloped in the branch `python-cli` of this repo (the documentation is there).\n\nPotentially it should run on Windows by installing Docker client command line\nand delegating the execution to a box with docker daemon running (by defining\nthe proper environment variables), for example: the bastion host.\n\n# Docker development\n\nThe `docker` folder have all the sources to create the Docker container.\nCreating and publishing the container is done with the script `publish-dockers-dockerhub.sh`\n(also with GitHub actions), and uses an experimental docker feature `squash` to\ncreate a single layer image. The script takes all folders (they must have a `Dockerfile`)\nand creates a Docker image with the name of each folder. Once the image is created is\nautomatically pushed to dockerhub.com  using *platformengineering* account.\nYou have to be loged in with `docker login` in other to publish the Image.\n\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n* **Images are public available. DO NOT INCLUDE SECRETS THERE**\n\nIf you include them, your next task will be rotate all secrets everywhere!, without rest!\nAnyway, **if you include secrets, you are doing something wrong. Docker images are not created to store secrets!**\n\n\n## How this thing works?\n\n1. `Dockerfile` includes all software (with specific versions).\n2. Docker reads the `ENTRYPOINT [\"/bin/bash\", \"/run.sh\"]`, which will be always executed.\n3. Docker will make available the current folder to the running container inside `/data`, all programs and scripts will be executed there.\n4. The `run.sh` script reads the `.envrc` files and presents the usage (help) if needed.\n5. Depending on the first argument, it will execute a command like `bosh`, `credhub` ... or it will run `manage-deployment.sh` script\n\n\nThe script `manage-deployment.sh` parses all the folder structure and runs the commands to manage a deployment. It is very verbose and always shows what it is doing, with colors, you can replicate everything copying the blue commands.\n\n\n# Usage\n\nDownload the bash script and make it executable:\n\n```\n$ wget https://raw.githubusercontent.com/springernature/ee-snpaas-cli/master/snpaas -O snpaas \u0026\u0026 chmod a+x snpaas\n```\n\nMake sure to put it into a location included in your `$PATH`.\nOnce it is installed, type `snpaas`\n\n```\n$ snpaas \n# latest: Pulling from platformengineering/snpaas-tools\n# Digest: sha256:98e43521714bbb536bb8d8b95f9bd7515cab8d9d61838ba2b723386465b99187\n# Status: Image is up to date for platformengineering/snpaas-tools:latest\n# docker.io/platformengineering/snpaas-tools:latest\n#\n# Running snpaas cli version 2.0\n# Workdir root: /data\n# Loading repository .envrc\n# \u003e Targeting Bosh director 10.80.202.6 as admin user\n# Using environment '10.80.202.6' as client 'admin'\n# \n# Name      test-bosh-env  \n# UUID      a25d8a26-ec15-40fb-a6da-8e43b269bd11  \n# Version   270.1.1 (00000000)  \n# CPI       google_cpi  \n# Features  compiled_package_cache: disabled  \n#           config_server: enabled  \n#           local_dns: enabled  \n#           power_dns: disabled  \n#           snapshots: disabled  \n# User      admin  \n# \n# Succeeded\n# \u003e Targeting Credhub 10.80.202.6:8844 as credhub-admin user\n# Setting the target url: https://10.80.202.6:8844\n# Login Successful\n# \u003e Defining gcloud config for project sn-paas-test region europe-west4 on zone europe-west4-a ...\n# Updated property [compute/zone].\n# Updated property [compute/region].\n# Updated property [core/project].\n#\n# DONE LOADING .envrc\n\n# No '.envrc' file found in current folder!\n\n# Docker image: platformengineering/snpaas-tools\n\nThis docker image packages the tools SNPaaS team uses to manage the deployments.\nIt includes binary clients for cf, bosh, credhub ...\nFor more information go to: https://github.com/springernature/ee-snpaas-cli\n\n\n# Usage\n\nYou can execute them directly. In the current folder you can define a '.envrc' file\nwith all environment variables you want to be setup in the running container.\nIf you do not have a '.envrc' file but you have the following environment variables\nin your environment, then Bosh-cli, Credhub-cli and CF-cli will automatically log-in: \n\n    \"BOSH_CLIENT\"\n    \"BOSH_CLIENT_SECRET\"\n    \"BOSH_ENVIRONMENT\"\n    \"BOSH_CA_CERT\"\n    \"CREDHUB_SERVER\"\n    \"CREDHUB_CLIENT\"\n    \"CREDHUB_SECRET\"\n    \"CREDHUB_CA_CERT\"\n    \"GCP_PROJECT\"\n    \"GCP_ZONE\"\n    \"GCP_REGION\"\n    \"CF_USER\"\n    \"CF_PASSWORD\"\n    \"CF_API\"\n    \"CF_ORG\"\n    \"CF_SPACE\"\n\nThen you are ready to manage to manage deployments, with this subcommands and options:\n\n    [main-options] \u003csubcommand\u003e [subcommand-options] \u003cfolder-deployment-name\u003e [other-specific-subcommand-args]\n\nMain-options:\n\n    -h --help  Shows this help\n    --noenv    Do not load .envrc files\n\nSubcommand-Options:\n\n    -m      Specify a manifest file, instead of generating a random one\n    -p      Deployments path. Default is $DEPLOYMENTS_PATH\n\nSubcommands:\n\n    help            Shows this usage help\n\n  Bosh/deployment subcommands\n\n    interpolate [bosh-int-parameters]\n                    Create the manifest for an environment\n    create-env      Deploy a Bosh Director\n    delete-env      Destroy a Bosh Director\n    deploy [-f] [bosh-deploy-paramereters] \n                    Update or upgrade deployment after applying cloud/runtime configs\n    destroy [-f] [bosh-destroy-parameters]\n                    Delete deployment (does not delete cloud/runtime configs)\n    cloud-config    Apply cloud-config operations files prefixed with deployment name\n    runtime-config  Apply runtime-config operations files prefixed with deployment name\n    import-secrets  Set secrets in Credhub from \u003cdeployment-folder\u003e/$DEPLOYMENT_CREDS file\n    list-secrets    List secrets from Credhub for \u003cdeployment-folder\u003e\n    export-secrets  Download secrets from Credhub to \u003cdeployment-folder\u003e/$DEPLOYMENT_CREDS\n    agent-certificates\n                    Scan Bosh vms of a deployment (if provided as argument, otherwise it\n                    will scan all vms) looking for Bosh Agent certificates, warning those\n                    vms with certificates about to expire. Helps finding VMs which need to\n                    be recreated when rotating Bosh Agent certificates.\n\n  CloudFoundry subcommands (Please define CF_ environment variables!)\n\n    cf-top                  top like command for Cloudfoundry\n    cf-disk                 Full disk usage report\n    cf-mem                  Memory usage report\n    cf-users                List users and roles\n    cf-usage                Show usage\n    cf-docker               List docker images\n    cf-app-stats \u003capp\u003e      Graphical application stats\n    cf-mysql \u003cservice\u003e      Connect with a mysql database to perform commands\n    cf-route-lookup \u003croute\u003e CF route lookup\n\n  You can type any other (interactive) commands\n\n    bosh\n    cf\n    terraform\n    bash\n    ...\n\n\n# Folder structure:\n\n    \u003cdeployment-folder\u003e\n    ├── \u003cboshrelease1-git-submodule-folder\u003e\n    ├── \u003cboshrelease2-git-submodule-folder\u003e\n    ├── ...\n    ├── [state.json]\n    ├── [cloud-config.yml]\n    ├── [runtime-config.yml]\n    ├── var-files.yml\n    ├── prepare.sh\n    ├── finish.sh\n    ├── operations\n    │   ├── 00-base-manifest.yml -\u003e ../\u003cboshrelease1-git-submodule-folder\u003e/manifest/base.yml\n    │   ├── 10-operation.yml -\u003e ../\u003cboshrelease1-git-submodule-folder\u003e/manifest/operations/operation.yml\n    │   ├── 20-operation2.yml -\u003e ../\u003cboshrelease1-git-submodule-folder\u003e/manifest/operations/operation2.yml\n    │   ├── 99-springer-nature-operation-custom.yml\n    ├── secrets.yml\n    ├── runtime-config\n    │   ├── local-runtime-config-file-for-deployment.yml\n    ├── cloud-config\n    │   ├── local-cloud-config-file-for-deployment.yml\n    └── variables\n        ├── variables-custom1.yml\n        ├── variables-custom1.yml\n        └── variables-provided.yml -\u003e ../\u003cboshrelease1-git-submodule-folder\u003e/manifest/vars.yml\n\n* 'state.json' maintains the CURRENT STATE of the Director. It needs to be commited and pushed\n  everytime Bosh director is updated/created.\n* 'cloud-config.yml' is the DEFAULT cloud-config AUTOMATICALLY applied after Director is updated (always)\n* 'runtime-config.yml' is the DEFAULT runtime-config AUTOMATICALLY applied after Director is updated (always)\n* 'var-files.yml' is a simple yaml key-value store to define 'var-file' arguments to Bosh client.\n   Each line of this file will become an argument of '--var-file' parameters, eg:\n   'director_gcs_credentials_json: ../gcp-creds/bosh-user/sn-paas-74d6f8c8e43e.json'\n   will become an command line argument \n   '--var-file director_gcs_credentials_json=../gcp-creds/bosh-user/sn-paas-74d6f8c8e43e.json'.\n   Files are relative paths to the folder where snpaas-cli is being executed (do not use absolute paths here!).\n* 'prepare.sh' script executed BEFORE ALL actions. If exits with error, the entire process stops.\n  It receives as first argument the ACTION executed in snpaas-cli.\n* 'finish.sh' script executed AFTER ALL actions (last one before snpaas-cli exits).\n  It receives as first argument the ACTION executed in snpaas-cli and the second argument\n  is the EXIT code of the snpaas action executed (normally, 0 if no error, gt 1 otherwise).\n* 'operations' folder is a set of links to other files (normally in the git submodules)\n  or files defining Bosh client operations files. Snpaas-cli generates a list of files alphabetically\n  sorted by name. Order in operations files is important so, files are named with a\n  numerical prefix.\n* 'secrets.yml' holds all secrets (users, passwords and certificates) created by bosh-cli\n  create-env action (formerly called creds.yml). It is an important file, if it gets lost, all\n  credentials will be regenerated and everything will need to get redeployed!.\n* 'cloud-config' folder defines NON-DEFAULT (named) cloud configs for Bosh. Those\n  are not applied automatically. They need to be applied with\n  'snpaas cloud-config \u003cfolder-director-name\u003e' (or manually). The name of each cloud-config\n  will be '\u003cdeployment-or-director_name\u003e-\u003cname_of_the_file_without_extension\u003e'.\n* 'runtime-config' folder defines NON-DEFAULT (named) runtime configs for Bosh. Those\n  are not applied automatically. They need to be applied with\n  'snpaas runtime-config \u003cfolder-director-name\u003e' (or manually). The name of each runtime-config\n  will be '\u003cdeployment-or-director_name\u003e-\u003cname_of_the_file_without_extension\u003e'.\n* 'variables' folder holds a set of files with variables being used in the runtime/cloud\n  configs or manifests/operations files. There is no order in those files and potentially\n  they can be generated by Terraform of in the Prepare script.\n\nSnpaas-cli will try to find variables in the environment, with the prefix of the\nfolder, e.g. if the deployment folder is \"cf-test\" and you have defined an variable \n\"((stemcell))\" in an operations file, you can define a variable like\n\"export CF_TEST_stemcell=ubuntu-xenial\" and it will be used.\n\nSecrets processed by this program are type 'value' and they will be imported/exported\nfrom Credhub from/to a 'secrets.yml' file. When interpolate or deploy, the program\nwill check if there is a secrets file, if so, it will be used as store for generated\nsecrets automatically. If you want to force the script to generate and store\nsecrets there, just create an empty file: \"touch secrets.yml\" otherwise Bosh will\nuse Credhub. So make sure you do not have a 'secrets.yml' if you want to store all\ncredentials in Credhub. To sum up:\n\n* Use a 'secrets.yml' file to export/import credentials from Credhub, then delete\n  it to avoid confusion between Credhub and 'secrets.yml'.\n* If there is no Credhub, create an empty 'secrets.yml' file. All credentials will\n  be generated and stored there.\n* Do not use 'secrets.yml' in any other situation.\n\nYou can add a couple of scripts \"prepare.sh\" and \"finish.sh\" which will be executed\nautomatically before and after the action (destroy, deploy or interpolate). Both\nwill receive the action as first argument, and the \"finish.sh\" script will also get\nthe exit code from the action (the finish script is always executed, even if the \naction fails).\n\nThe operations file is not required if you have a simple manifest which does not need\noperations files. In this situation, just copy the manifest to the deployment folder\nand make sure there is no operations folder there. The first yaml file (in lexical\norder) will be taken as manifest and deployed, so make sure you call the manifest\nfile properly (secrets.yml is always ignored, so do not worry about it).\n\nWhen deploying a Bosh Director, a state file 'state.json' will be created and\nthe DEFAULT cloud-config and runtime-config (name=default!) will be applied AUTOMATICALLY\nif the deployment was successfully done.\n\n# Usage examples\n\nGiven a typical deployment folder called 'app-logging' with this structure:\n\n    app-logging\n    ├── prepare.sh\n    ├── runtime-config\n    │   ├── dns.yml\n    │   └── mtail.yml\n    ├── cloud-config\n    │   └── vm_types.yml\n    ├── operations\n    │   ├── 00-base.yml -\u003e ../cf-logging-boshrelease/manifest/logstash.yml\n    │   ├── 20-cf-apps-es.yml -\u003e ../cf-logging-boshrelease/manifest/operations/pipelines/cf-apps-es-throttling.yml\n    │   ├── 25-add-statsd-conf.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-statsd-conf.yml\n    │   ├── 30-add-throttle-param.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-throttle-param.yml\n    │   ├── 50-add-es-cloud-id.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-es-cloud-id.yml\n    │   ├── 50-add-es-xpack.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-es-xpack.yml\n    │   ├── 80-add-logstash-exporter.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-logstash-exporter.yml\n    │   ├── 90-add-release-version.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-release-version.yml\n    │   ├── 99-deployment-settings.yml\n    │   └── 99-iaas.yml -\u003e ../cf-logging-boshrelease/manifest/operations/add-iaas-parameters.yml\n    ├── secrets.yml\n    └── variables\n        ├── iaas.yml\n        ├── throttle-param.yml\n        └── vars-release-version.yml -\u003e ../cf-logging-boshrelease/manifest/vars-release-version.yml\n\nIn the above structure 'cf-logging-boshrelease' is a git submodule. The idea is reuse\nresources from there (normally operations files).\n\n* To deploy or update the deployment called 'app-logging', execute: 'deploy app-logging'.\n  If you do not want to answer 'y/n' question when bosh runs, just use '-f' option:\n  'deploy app-logging -f'\n* To list secrets of the deployment from Credhub: 'list-secrets app-logging'\n* Exporting the secrets of the deployment from Credhub to file 'app-logging/secrets.yml'\n  is done with: 'export-secrets app-logging'. Only credentials type value are supported.\n* Import the secrets of the deployment to Credhub from a file 'app-logging/secrets.yml':\n  'import-secrets app-logging'. All credentials will be imported as type value.\n* In order to apply the name of the folder to the deployment, you need to provide\n  an operations file with this operation.\n\n      - type: replace\n        path: /name\n        value: ((deployment_name))\n\n  The variable 'deployment_name' is provided by the program and taken from the\n  folder name\n\n* It is possible to define variables in the runtime/cloud configs or\n  manifests/operations files and the program will try to find those variables in\n  the environment, with the prefix of the folder, e.g. if the deployment folder \n  is \"cf-test\" and you have defined an variable \"((stemcell))\" in an operations\n  file, you can define a variable like \"export CF_TEST_stemcell=ubuntu-xenial\"\n  and it will be used.\n\n\n# Why?\n\n* Avoid writting documentation about each deployment. Each folder has a specific\n  structure, the script only goes through the folder structure and generates\n  and applies the operations to the base manifest.\n* Make it easy to manage bosh deployments. If the deployment folder is properly\n  done, replicating it for testing purposes is as easy as clonning the folder\n  and deploy again.\n* Easily manage Credhub secrets in a deployment. One can import, export and\n  list secrets from files to Credhub (Only secrets type value, the other ones \n  are managed via the 'variables' section in a manifest!).\n* Show you the commands it runs each time, with colorized output in order to\n  stand out if something went wrong.\n* Loose coupled. The sript is a wrapper for Bosh and Credhub clients. If you do\n  not like the script, you do not have to use it. The folder structure is \n  self-documented, so you only need to build the bosh and credhub parameters\n  from these files.\n\n\nThe script always show what is executing (blue commands), if something fails,\njust copy the blue commands and execute them step by step.\n\n\n# Programs and versions installed\n\nAdditionally you can directly execute all the following programs installed, just\nby typing then as argument, e.g:\n\n\tsnpaas credhub find -p '/director-name/'\n\n  BBR:  1.7.2\n  CERTSTRAP:  1.1.1\n  YQ:  3.3.2\n  CF6_PLUGINS:  /opt\n  CF_CLI:  6.45.0\n  VARSTOCREDHUB:  0.1.0\n  CF_RTR:  2.22.0\n  HALFPIPE:  3.34.0\n  FLY:  6.3.0\n  HOME:  /home/snpaas\n  VERSION:  3.12\n  GCLOUD_SDK:  298.0.0\n  USER:  snpaas\n  SPIFF:  1.0.8\n  BOSH_CLI:  6.3.0\n  CREDHUB:  2.7.0\n  DATADIR:  /data\n  TERRAFORM:  0.12.23\n  JQ:  1.5\n  SPRUCE:  1.18.0\n  VAULT:  1.4.2\n\n```\n\n# Author\n\nSpringer Nature Engineering Enablement (EE), Jose Riguera Lopez (jose.riguera@springer.com)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspringernature%2Fee-snpaas-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspringernature%2Fee-snpaas-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspringernature%2Fee-snpaas-cli/lists"}