github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/ci/local-integration-env/deploy_bosh_lite.sh (about) 1 #!/bin/bash 2 3 set -e 4 5 if [[ "$WORKSPACE" -eq "" ]]; then 6 WORKSPACE="$HOME/workspace" 7 fi 8 9 CLI_OPS_DIR=$GOPATH/src/code.cloudfoundry.org/cli/ci/local-integration-env/operations 10 CLI_BOSHLITE_DIR=$WORKSPACE/cli-lite # created by this script for storing BOSH Lite credentials 11 BOSH_DEPLOYMENT=$WORKSPACE/bosh-deployment # location where this script clones the cloudfoundry/bosh-deployment repository 12 CF_DEPLOYMENT=$WORKSPACE/cf-deployment # location where this script clones the cloudfoundry/cf-deployment repository 13 14 mkdir -p $WORKSPACE 15 mkdir -p $CLI_BOSHLITE_DIR 16 17 ensure_bosh_cli_installed () { 18 if [ -z "$(which bosh)" ]; then 19 echo "Please install the bosh cli from https://github.com/cloudfoundry/bosh-cli/releases" 20 exit 1 21 fi 22 } 23 24 cleanup_vms_and_stemcells () { 25 echo "removing old bosh lite" 26 # power off any running vms 27 vboxmanage list runningvms | \ 28 awk '{print $1}' | \ 29 grep -i ^vm- | \ 30 xargs -n1 -I% vboxmanage controlvm % poweroff 31 32 # delete existing bosh lite vms and stemcells and, if that succeeds, associated bosh state file 33 vboxmanage list vms | \ 34 awk '{print $1}' | \ 35 grep -e ^sc- -e ^vm- | \ 36 xargs -r -n 1 -I% vboxmanage unregistervm % --delete && \ 37 rm -rf $HOME/deployments/vbox 38 } 39 40 setup_git_repositories () { # Takes one argument, which is the directory to clone the repos into 41 if [ ! -d $BOSH_DEPLOYMENT ]; then 42 echo "cloning cloudfoundry/bosh-deployment to $BOSH_DEPLOYMENT" 43 git clone https://github.com/cloudfoundry/bosh-deployment.git $BOSH_DEPLOYMENT 44 fi 45 pushd $BOSH_DEPLOYMENT 46 git pull 47 popd 48 49 if [ ! -d $CF_DEPLOYMENT ]; then 50 echo "cloning cloudfoundry/cf-deployment to $CF_DEPLOYMENT" 51 git clone https://github.com/cloudfoundry/cf-deployment.git $CF_DEPLOYMENT 52 fi 53 pushd $CF_DEPLOYMENT 54 git checkout master 55 git pull 56 popd 57 } 58 59 configure_bosh_environment_access () { 60 # Create an environment alias for the bosh lite 61 bosh alias-env vbox --ca-cert <(bosh int $CLI_BOSHLITE_DIR/creds.yml --path /director_ssl/ca) 62 63 # Set environment and authentication so that we don't have to pass flags to every bosh command 64 export BOSH_ENVIRONMENT=vbox # now that we have an alias we can use the human-friendly name 65 export BOSH_CLIENT=admin 66 export BOSH_CLIENT_SECRET=`bosh int $CLI_BOSHLITE_DIR/creds.yml --path /admin_password` 67 } 68 69 update_bosh_configs () { 70 bosh update-runtime-config $BOSH_DEPLOYMENT/runtime-configs/dns.yml \ 71 --vars-store=$CLI_BOSHLITE_DIR/runtime-config-vars.yml \ 72 --name=dns 73 74 bosh \ 75 update-cloud-config $CF_DEPLOYMENT/iaas-support/bosh-lite/cloud-config.yml \ 76 -o $CLI_OPS_DIR/cloud-config-internet-required.yml 77 } 78 79 interpolate_and_deploy_cf () { 80 # Store the uninterpolated manifest on disk for easier debugging and iterating 81 cd $CF_DEPLOYMENT 82 bosh interpolate cf-deployment.yml \ 83 -o operations/use-compiled-releases.yml \ 84 -o operations/bosh-lite.yml \ 85 -o operations/test/add-persistent-isolation-segment-diego-cell.yml \ 86 -o operations/experimental/fast-deploy-with-downtime-and-danger.yml \ 87 -o operations/use-postgres.yml \ 88 -o $CLI_OPS_DIR/cli-bosh-lite.yml \ 89 -o $CLI_OPS_DIR/cli-bosh-lite-uaa-client-credentials.yml \ 90 -o $CLI_OPS_DIR/disable-rep-kernel-params.yml \ 91 -o $CLI_OPS_DIR/add-oidc-provider.yml \ 92 -v system_domain=bosh-lite.com \ 93 -v cf_admin_password=admin > $CLI_BOSHLITE_DIR/cf-manifest-no-vars.yml 94 95 bosh \ 96 -n \ 97 -d cf deploy $CLI_BOSHLITE_DIR/cf-manifest-no-vars.yml \ 98 --vars-store $CLI_BOSHLITE_DIR/deployment-vars.yml 99 } 100 101 setup_routing_for_bosh_ssh () { 102 BOSH_LITE_NETWORK=10.244.0.0 103 BOSH_LITE_NETMASK=255.255.0.0 104 BOSH_LITE_IP=192.168.50.6 105 106 # Set up virtualbox IP as the gateway to our CF 107 if ! route | egrep -q "$BOSH_LITE_NETWORK\\s+$BOSH_LITE_IP\\s+$BOSH_LITE_NETMASK\\s"; then 108 sudo route add -net $BOSH_LITE_NETWORK netmask $BOSH_LITE_NETMASK gw $BOSH_LITE_IP 109 fi 110 } 111 112 login_to_cf () { 113 cf api api.bosh-lite.com --skip-ssl-validation 114 cf auth admin admin 115 cf enable-feature-flag diego_docker 116 } 117 118 ### MAIN BODY OF SCRIPT 119 120 ensure_bosh_cli_installed 121 122 if [[ $1 == "clean" ]]; then 123 cleanup_vms_and_stemcells 124 fi 125 126 setup_git_repositories 127 128 if [[ -n "$BOSH_ALL_PROXY" ]]; then 129 unset $BOSH_ALL_PROXY # if this is set, the bosh cli will fail to talk to the bosh director because it will try to proxy its traffic through the value of this variable. 130 fi 131 132 export BOSH_ENVIRONMENT=192.168.50.6 133 export BOSH_NON_INTERACTIVE=true # prevent bosh from issuing y/n prompts 134 135 bosh create-env $BOSH_DEPLOYMENT/bosh.yml \ 136 --state $CLI_BOSHLITE_DIR/state.json \ 137 -o $BOSH_DEPLOYMENT/virtualbox/cpi.yml \ 138 -o $BOSH_DEPLOYMENT/virtualbox/outbound-network.yml \ 139 -o $BOSH_DEPLOYMENT/bosh-lite.yml \ 140 -o $BOSH_DEPLOYMENT/bosh-lite-runc.yml \ 141 -o $BOSH_DEPLOYMENT/jumpbox-user.yml \ 142 -o $CLI_OPS_DIR/bosh-lite-more-power.yml \ 143 --vars-store $CLI_BOSHLITE_DIR/creds.yml \ 144 -v director_name="Bosh Lite Director" \ 145 -v internal_ip=$BOSH_ENVIRONMENT \ 146 -v internal_gw=192.168.50.1 \ 147 -v internal_cidr=192.168.50.0/24 \ 148 -v outbound_network_name=NatNetwork 149 150 configure_bosh_environment_access 151 152 update_bosh_configs 153 154 CFD_STEMCELL_VERSION="$(bosh int $CF_DEPLOYMENT/cf-deployment.yml --path /stemcells/alias=default/version)" 155 bosh upload-stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent?v=$CFD_STEMCELL_VERSION 156 157 interpolate_and_deploy_cf 158 159 setup_routing_for_bosh_ssh 160 161 login_to_cf