Files
virtual-kubelet/vendor/github.com/vmware/vic/infra/scripts/replace-running-components.sh
Loc Nguyen 513cebe7b7 VMware vSphere Integrated Containers provider (#206)
* Add Virtual Kubelet provider for VIC

Initial virtual kubelet provider for VMware VIC.  This provider currently
handles creating and starting of a pod VM via the VIC portlayer and persona
server.  Image store handling via the VIC persona server.  This provider
currently requires the feature/wolfpack branch of VIC.

* Added pod stop and delete.  Also added node capacity.

Added the ability to stop and delete pod VMs via VIC.  Also retrieve
node capacity information from the VCH.

* Cleanup and readme file

Some file clean up and added a Readme.md markdown file for the VIC
provider.

* Cleaned up errors, added function comments, moved operation code

1. Cleaned up error handling.  Set standard for creating errors.
2. Added method prototype comments for all interface functions.
3. Moved PodCreator, PodStarter, PodStopper, and PodDeleter to a new folder.

* Add mocking code and unit tests for podcache, podcreator, and podstarter

Used the unit test framework used in VIC to handle assertions in the provider's
unit test.  Mocking code generated using OSS project mockery, which is compatible
with the testify assertion framework.

* Vendored packages for the VIC provider

Requires feature/wolfpack branch of VIC and a few specific commit sha of
projects used within VIC.

* Implementation of POD Stopper and Deleter unit tests (#4)

* Updated files for initial PR
2018-06-04 15:41:32 -07:00

170 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2018 VMware, Inc. All 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 -eo pipefail
if [ -z "$PS1" ]; then
interactive=1
else
interactive=0
fi
BASE_DIR=$(dirname $(readlink -f "$BASH_SOURCE"))
VIC_DIR=$(dirname $(readlink -f $BASE_DIR/..))
# Run the command given on the VCH instead of locally
function on-vch() {
ssh -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -i $VIC_KEY root@$VCH_IP -C $@ 2>/dev/null
}
function get-thumbprint() {
govc about.cert -k -thumbprint | awk '{print $NF}'
}
# Determines whether the human VCH name is adequate to continue
function vch-name-is-ambiguous() {
[ $($VIC_DIR/bin/vic-machine-linux \
ls \
--target=$target \
--user=$username \
--password=$password \
--thumbprint=$(get-thumbprint) \
| grep $VIC_NAME | wc -l) -ne 1 ] \
&& return 0 || return 1
}
# Check GOVC vars & print help text if not
function check-govc-vars() {
if [[ ! $(govc ls 2>/dev/null) ]]; then
echo "ERROR:"
echo "GOVC environment variables are required to use this command. Set the necessary variables to allow govc to connect to your vSphere deployment:";
echo "GOVC_USERNAME: username on vSphere target"
echo "GOVC_PASSWORD: password on vSphere target"
echo "GOVC_URL: IP or FQDN of your vSphere target"
echo "GOVC_INSECURE: set to 1 to disable tls verify when using govc to talk to vSphere"
exit 1
fi
}
# Make sure we have at least one of VIC_NAME or VIC_ID
function check-vch-name-or-id () {
if [[ ! -v VIC_NAME ]] && [[ ! -v VIC_ID ]]; then
echo "Please set one of the following environment variables to specify the VCH which you would like to reconfigure:"
echo "VIC_NAME: name of VCH; matches --name argument for vic-machine"
echo "VIC_ID: ID of VCH, as displayed in output of vic-machine ls"
if [[ $interactive -eq 0 ]]; then
exit 1
fi
read -p "Or enter VCH name to continue: " VIC_NAME
fi
}
# Falls back on VIC_ID if possible, bails if not, assumes the VCH name is ambiguous
function check-name-isnt-ambiguous () {
username=$(govc env | grep GOVC_USERNAME | cut -d= -f2)
password=$(govc env | grep GOVC_PASSWORD | cut -d= -f2)
target=$(govc env | grep GOVC_URL | cut -d= -f2)
if [[ ! -v VIC_ID ]] && [[ $(vch-name-is-ambiguous) ]]; then
echo "The provided VIC name is ambiguous; please choose the correct VCH ID from the output below and assign it to the environment variable VIC_ID, e.g., export VIC_ID=12"
$VIC_DIR/bin/vic-machine-linux\
ls \
--target $GOVC_URL \
--user $GOVC_USER \
--password=$GOVC_PASSWORD \
--thumbprint=$(get-thumbprint)
if [[ $interactive -eq 0 ]]; then
exit 1
fi
read -p "Enter unique VIC ID from above: " VIC_ID
fi
}
# Translates VCH name to ID if necessary
function get-vic-id () {
if [[ -z $VIC_ID ]]; then
export VIC_ID="$($VIC_DIR/bin/vic-machine-linux ls --target=$target --user=$username --password=$password --thumbprint=$(get-thumbprint) | grep $VIC_NAME | awk '{print $1}')"
fi
}
function get-ssh-keys() {
if [[ -z $VIC_KEY ]]; then
echo "Variable VIC_KEY not set. Provide the path to your public SSH key below."
if [[ $interactive -eq 0 ]]; then
exit 1
fi
read -p "Path to your public SSH key for access to VCH [/home/$USER/.ssh/id_rsa.pub]: " key
export VIC_KEY=${key:-/home/$USER/.ssh/id_rsa.pub}
fi
}
# Checks environment for required inputs
function sanity-checks () {
check-govc-vars
check-vch-name-or-id
check-name-isnt-ambiguous
get-vic-id
get-ssh-keys
}
# Enables SSH and saves off the VCH IP address
function enable-debug () {
VCH_IP=$($VIC_DIR/bin/vic-machine-linux debug \
--target=$target \
--id=$VIC_ID \
--user=$username \
--password=$password \
--authorized-key=$VIC_KEY \
--thumbprint=$(get-thumbprint) \
| grep -A1 "Published ports" | tail -n1 | awk '{print $NF}')
}
# SCPs the component in $1 to the VCH, plops it in place, and brutally kills the previous running process
function replace-component() {
scp -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no $VIC_DIR/bin/$1 root@$VCH_IP:/tmp/$1 2>/dev/null
pid=$(on-vch ps -e --format='pid,args' \
| grep $1 | grep -v grep | awk '{print $1}')
on-vch chmod 755 /tmp/$1
on-vch mv /tmp/$1 /sbin/$1
if [[ $1 == "vic-init" ]]; then
on-vch systemctl restart vic-init
else
on-vch kill -9 $pid
fi
}
function replace-components () {
if [[ $1 == "" ]]; then # replace everything
services="port-layer-server docker-engine-server vicadmin vic-init"
else
services="$@"
fi
for x in $services; do
echo "Replacing component $x..."
replace-component $x
done
}
sanity-checks
enable-debug
replace-components $@
echo "If you ran make push with no arguments or replaced vic-init, wait a few moments and run this to get the new IP of your VCH:"
echo "$VIC_DIR/bin/vic-machine-linux inspect --target=$target --id=$VIC_ID --user=$username --password=$password --thumbprint=$(get-thumbprint)"