#!/bin/bash # Copyright 2018 AT&T Intellectual Property. All other rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -ex # We will need to pass the name of the site/collection as well as the # path of the directory where the YAMLs are stored when we execute the # script. It is mandatory to do so and the script will exit with exception # if these parameters are missing. For instance, we can excute the script # in the following manner: # # $ ./deckhand_load_yaml.sh site1 '/home/ubuntu/site1' # if [[ -z "$1" ]]; then echo -e "Please specify site/collection name!" exit 1 fi if [[ -z "$2" ]]; then echo -e "Please specify the directory where the YAMLs are stored!" exit 1 fi # Define Variables collection=$1 directory=$2 namespace="ucp" # Initialize Variables with Default Values OS_USER_DOMAIN_NAME="${OS_USER_DOMAIN_NAME:-default}" OS_PROJECT_DOMAIN_NAME="${OS_PROJECT_DOMAIN_NAME:-default}" OS_PROJECT_NAME="${OS_PROJECT_NAME:-service}" OS_USERNAME="${OS_USERNAME:-shipyard}" OS_PASSWORD="${OS_PASSWORD:-password}" OS_AUTH_URL="${OS_AUTH_URL:-http://keystone.${namespace}:80/v3}" # Determine IP address of Ingress Controller ingress_controller_ip=`sudo kubectl get pods -n ${namespace} -o wide | grep -v ingress-error-pages | grep -m 1 ingress | awk '{print $6}'` # Update /etc/hosts with the IP of the ingress controller # Note that these values would need to be set in the case # where DNS resolution of the Keystone and Shipyard URLs # is not available. We can skip this step if DNS is in place. delete_etc_hosts_entries() { # Delete lines in /etc/hosts that contain reference to the # keystone and shipyard-api pods sudo sed -i '/keystone/d' /etc/hosts sudo sed -i '/shipyard-api/d' /etc/hosts } update_etc_hosts() { cat << EOF | sudo tee -a /etc/hosts $ingress_controller_ip keystone.${namespace} $ingress_controller_ip shipyard-api.${namespace}.svc.cluster.local EOF } if [[ ${ingress_controller_ip} ]]; then # Delete any existing entries for the keystone and shipyard-api # pods and replace it with the latest retrieved IP delete_etc_hosts_entries update_etc_hosts else echo -e "Unable to retrieve IP of Ingress Controller!" exit 1 fi # Clone shipyard repository if it does not exists if [[ ! -d shipyard ]]; then git clone --depth=1 https://github.com/att-comdev/shipyard.git fi # Set up Genesis host with the Shipyard Client # This will allow us to use the Shipyard CLI sudo apt install python3-pip -y sudo pip3 install --upgrade pip cd shipyard && sudo pip3 install -r requirements.txt sudo python3 setup.py install # Export Environment Variables export OS_USER_DOMAIN_NAME=${OS_USER_DOMAIN_NAME} export OS_PROJECT_DOMAIN_NAME=${OS_PROJECT_DOMAIN_NAME} export OS_PROJECT_NAME=${OS_PROJECT_NAME} export OS_USERNAME=${OS_USERNAME} export OS_PASSWORD=${OS_PASSWORD} export OS_AUTH_URL=${OS_AUTH_URL} # The directory will contain all the .yaml files with Drydock, Promenade, # Armada, and Divingbell configurations. It will also contain all the # secrets such as certificates, CAs and passwords. # We will make use of Shipyard CLI to load all the document as a named # collection, e.g. "site1" into Deckhand (as a bucket in a revision) # Note that the name of the collection differs from site to site and is # specific to that particular deployment # Note that we will also make use of the '--replace' option so that the # script can be executed multiple times to replace existing collection echo -e "Loading YAMLs as named collection..." shipyard create configdocs ${collection} --replace --directory=${directory} # Following the creation of a configdocs collection in the Shipyard buffer, # the configdocs must be committed before Shipyard is able to use them as # part of an action. # The other UCP components will be contacted to validate the designs in # Deckhand when 'commit configdocs' command is executed. Shipyard will # only mark the revision as committed if the validations are successful echo -e "Committing Configdocs..." shipyard commit configdocs # Exit the script exit 0