forked from metal3-io/metal3-dev-env
-
Notifications
You must be signed in to change notification settings - Fork 0
/
01_prepare_host.sh
executable file
·170 lines (145 loc) · 5.53 KB
/
01_prepare_host.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/env bash
set -xe
# shellcheck disable=SC1091
source lib/logging.sh
# shellcheck disable=SC1091
source lib/common.sh
if [[ $(id -u) == 0 ]]; then
echo "Please run 'make' as a non-root user"
exit 1
fi
if [[ $OS == ubuntu ]]; then
# shellcheck disable=SC1091
source ubuntu_install_requirements.sh
else
# shellcheck disable=SC1091
source centos_install_requirements.sh
fi
# shellcheck disable=SC1091
source lib/network.sh
# shellcheck disable=SC1091
source lib/images.sh
# Install requirements
ansible-galaxy install -r vm-setup/requirements.yml
ansible-galaxy collection install ansible.netcommon
ANSIBLE_FORCE_COLOR=true ansible-playbook \
-e "working_dir=$WORKING_DIR" \
-e "virthost=$HOSTNAME" \
-i vm-setup/inventory.ini \
-b -vvv vm-setup/install-package-playbook.yml
# Add usr/local/go/bin to the PATH environment variable
GOBINARY="/usr/local/go/bin"
if [[ ":$PATH:" != *":$GOBINARY:"* ]]; then
echo export PATH="$PATH":/usr/local/go/bin >> ~/.bashrc
# shellcheck disable=SC1090
source ~/.bashrc
fi
# shellcheck disable=SC1091
source lib/releases.sh
# Allow local non-root-user access to libvirt
# Restart libvirtd service to get the new group membership loaded
if ! id "$USER" | grep -q libvirt; then
sudo usermod -a -G "libvirt" "$USER"
sudo systemctl restart libvirtd
fi
if [ "${EPHEMERAL_CLUSTER}" == "minikube" ]; then
if ! command -v minikube 2>/dev/null ; then
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/.
fi
if ! command -v docker-machine-driver-kvm2 2>/dev/null ; then
curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2
chmod +x docker-machine-driver-kvm2
sudo mv docker-machine-driver-kvm2 /usr/local/bin/.
fi
# Install Kind for both Kind and tilt
else
if ! command -v kind 2>/dev/null ; then
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/"${KIND_VERSION}"/kind-"$(uname)"-amd64
chmod +x ./kind
sudo mv kind /usr/local/bin/.
sudo "${CONTAINER_RUNTIME}" pull kindest/node:"${KUBERNETES_VERSION}"
fi
if [ "${EPHEMERAL_CLUSTER}" == "tilt" ]; then
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
fi
fi
KUBECTL_LATEST=$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)
KUBECTL_LOCAL=$(kubectl version --client --short | cut -d ":" -f2 | sed 's/[[:space:]]//g' 2> /dev/null)
KUBECTL_PATH=$(whereis -b kubectl | cut -d ":" -f2 | awk '{print $1}')
if [ "$KUBECTL_LOCAL" != "$KUBECTL_LATEST" ]; then
curl -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_LATEST}/bin/linux/amd64/kubectl"
chmod +x kubectl
KUBECTL_PATH="${KUBECTL_PATH:-/usr/local/bin/kubectl}"
sudo mv kubectl "${KUBECTL_PATH}"
fi
if ! command -v kustomize 2>/dev/null ; then
curl -L -O "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz"
tar -xzvf "kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz"
chmod +x kustomize
sudo mv kustomize /usr/local/bin/.
rm "kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz"
fi
# Install clusterctl client
function install_clusterctl() {
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/"${CAPIRELEASE}"/clusterctl-linux-amd64 -o clusterctl
chmod +x ./clusterctl
sudo mv ./clusterctl /usr/local/bin/clusterctl
mkdir -p home/"${USER}"/.cluster-api
touch home/"${USER}"/.cluster-api/version.yaml
}
if ! [ -x "$(command -v clusterctl)" ]; then
install_clusterctl
elif [ "$(clusterctl version | grep -o -P '(?<=GitVersion:").*?(?=",)')" != "${CAPIRELEASE}" ]; then
sudo rm /usr/local/bin/clusterctl
install_clusterctl
fi
# Clean-up any old ironic containers
remove_ironic_containers
# Clean-up existing pod, if podman
case $CONTAINER_RUNTIME in
podman)
for pod in ironic-pod infra-pod; do
if sudo "${CONTAINER_RUNTIME}" pod exists "${pod}" ; then
sudo "${CONTAINER_RUNTIME}" pod rm "${pod}" -f
fi
sudo "${CONTAINER_RUNTIME}" pod create -n "${pod}"
done
;;
esac
# Download IPA and CentOS 8 Images
mkdir -p "$IRONIC_IMAGE_DIR"
pushd "$IRONIC_IMAGE_DIR"
if [ ! -f "${IMAGE_NAME}" ] ; then
curl --insecure --compressed -O -L "${IMAGE_LOCATION}/${IMAGE_NAME}"
if [ "$(echo "${IMAGE_NAME}" | rev | cut -d . -f 1 | rev)" == "xz" ] ; then
unxz -v "${IMAGE_NAME}"
IMAGE_NAME="$(basename "${IMAGE_NAME}" .xz)"
export IMAGE_NAME
IMAGE_BASE_NAME="${IMAGE_NAME%.*}"
export IMAGE_RAW_NAME="${IMAGE_BASE_NAME}-raw.img"
fi
qemu-img convert -O raw "${IMAGE_NAME}" "${IMAGE_RAW_NAME}"
md5sum "${IMAGE_RAW_NAME}" | awk '{print $1}' > "${IMAGE_RAW_NAME}.md5sum"
fi
popd
# Pulling all the images except any local image.
for IMAGE_VAR in $(env | grep -v "_LOCAL_IMAGE=" | grep "_IMAGE=" | grep -o "^[^=]*") ; do
IMAGE="${!IMAGE_VAR}"
sudo "${CONTAINER_RUNTIME}" pull "${IMAGE}"
done
# Start image downloader container
#shellcheck disable=SC2086
sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ipa-downloader ${POD_NAME} \
-e IPA_BASEURI="$IPA_BASEURI" \
-v "$IRONIC_DATA_DIR":/shared "${IPA_DOWNLOADER_IMAGE}" /usr/local/bin/get-resource.sh
sudo "${CONTAINER_RUNTIME}" wait ipa-downloader
function configure_minikube() {
minikube config set vm-driver kvm2
minikube config set memory 4096
}
if [ "${EPHEMERAL_CLUSTER}" == "minikube" ]; then
configure_minikube
init_minikube
fi