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