This repo is a BOSH release for deploying Diego and associated tasks for testing a Diego deployment. Diego builds out the new runtime architecture for Cloud Foundry, replacing the DEAs and Health Manager.
This release relies on a separate deployment to provide NATS and Loggregator. In practice these come from cf-release.
Learn more about Diego and its components at diego-design-notes.
When working on individual components of Diego, work out of the submodules under src/.
See Initial Setup.
Run the individual component unit tests as you work on them using
ginkgo. To see if everything still works, run
./scripts/run-unit-tests in the root of the release.
When you're ready to commit, run:
./scripts/prepare-to-diego <story-id> <another-story-id>...
This will synchronize submodules, update the BOSH package specs, run all unit tests, all integration tests, and make a commit, bringing up a commit edit dialogue. The story IDs correspond to stories in our Pivotal Tracker backlog. You should simultaneously also build the release and deploy it to a local BOSH-Lite environment, and run the acceptance tests. See Running Smoke Tests & DATs.
If you're introducing a new component (e.g. a new job/errand) or changing the main path
for an existing component, make sure to update ./scripts/sync-package-specs and
./scripts/sync-submodule-config.
This BOSH release doubles as a $GOPATH. It will automatically be set up for
you if you have direnv installed.
# fetch release repo
mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/cloudfoundry-incubator/diego-release.git
cd diego-release/
# automate $GOPATH and $PATH setup
direnv allow
# switch to develop branch (not master!)
git checkout develop
# initialize and sync submodules
./scripts/update
If you do not wish to use direnv, you can simply source the .envrc file in the root
of the release repo. You may manually need to update your $GOPATH and $PATH variables
as you switch in and out of the directory.
-
Install ginkgo
go install github.com/onsi/ginkgo/ginkgo -
Install gnatsd
go install github.com/apcera/gnatsd -
Install etcd
go install github.com/coreos/etcd -
Run the unit test script
./scripts/run-unit-tests
-
Install the
flyCLI:# cd to the concourse release repo, cd /path/to/concourse/repo # switch to using the concourse $GOPATH and $PATH setup temporarily direnv allow # install the version of fly from Concourse's release go install github.com/concourse/fly # add the concourse release repo's bin/ directory to your $PATH export PATH=$PWD/bin:$PATH -
Run Inigo.
# cd back to the diego-release release repo cd diego-release/ # run the tests ./scripts/run-inigo
-
Download the latest Warden Trusty Go-Agent stemcell and upload it to BOSH-lite
bosh public stemcells bosh download public stemcell (name) bosh upload stemcell (downloaded filename) -
Checkout cf-release (develop branch) from git
cd ~/workspace git clone [email protected]:cloudfoundry/cf-release.git cd ~/workspace/cf-release git checkout develop ./update -
Checkout diego-release (develop branch) from git
cd ~/workspace git clone [email protected]:cloudfoundry-incubator/diego-release.git cd ~/workspace/diego-release git checkout develop ./scripts/update -
Install spiff, a tool for generating BOSH manifests. spiff is required for running the scripts in later steps. The following installation method assumes that go is installed. For other ways of installing
spiff, see the spiff README.go get github.com/cloudfoundry-incubator/spiff -
Generate a deployment stub with the BOSH director UUID
mkdir -p ~/deployments/bosh-lite cd ~/workspace/diego-release ./scripts/print-director-stub > ~/deployments/bosh-lite/director.yml -
Generate and target cf-release manifest:
cd ~/workspace/cf-release ./generate_deployment_manifest warden \ ~/deployments/bosh-lite/director.yml \ ~/workspace/diego-release/templates/enable_diego_in_cc.yml > \ ~/deployments/bosh-lite/cf.yml bosh deployment ~/deployments/bosh-lite/cf.yml -
Do the BOSH dance:
cd ~/workspace/cf-release bosh create release --force bosh -n upload release bosh -n deploy -
Generate and target diego's manifest:
cd ~/workspace/diego-release ./scripts/generate-deployment-manifest bosh-lite ../cf-release \ ~/deployments/bosh-lite/director.yml > \ ~/deployments/bosh-lite/diego.yml bosh deployment ~/deployments/bosh-lite/diego.yml -
Dance some more:
bosh create release --force bosh -n upload release bosh -n deploy
Now you can either run the DATs or deploy your own app.
### Running Smoke Tests & DATs
To deploy and run the smoke tests:
-
Create a test Organization and Space for your smoke test applications:
cf api --skip-ssl-validation api.10.244.0.34.xip.io cf auth admin admin cf create-org smoke-tests cf create-space smoke-tests -o smoke-tests -
Create a deployment manifest for the smoke test task (known as a BOSH errand).
spiff merge ~/workspace/diego-release/templates/smoke-tests-bosh-lite.yml \ ~/deployments/bosh-lite/director.yml \ > ~/deployments/bosh-lite/diego-smoke-tests.yml -
Deploy the task and run it.
bosh -d ~/deployments/bosh-lite/diego-smoke-tests.yml deploy bosh -d ~/deployments/bosh-lite/diego-smoke-tests.yml run errand diego_smoke_tests
To deploy and run the DATs:
-
Create a deployment manifest for the DATs errand (you do not need to create an Org or Space for this):
spiff merge ~/workspace/diego-release/templates/acceptance-tests-bosh-lite.yml \ ~/deployments/bosh-lite/director.yml \ > ~/deployments/bosh-lite/diego-acceptance-tests.yml bosh -d ~/deployments/bosh-lite/diego-acceptance-tests.yml deploy bosh -d ~/deployments/bosh-lite/diego-acceptance-tests.yml run errand diego_acceptance_tests
-
Create new CF Org & Space
cf api --skip-ssl-validation api.10.244.0.34.xip.io cf auth admin admin cf create-org diego cf target -o diego cf create-space diego cf target -s diego -
Push your application
cf push my-app --no-start cf set-env my-app DIEGO_STAGE_BETA true cf set-env my-app DIEGO_RUN_BETA true cf start my-app
The DIEGO_STAGE_BETAflag instructs the Cloud Controller to stage the application on Diego.DIEGO_RUN_BETA` instructs the Cloud Controller to run the application on Diego.