@@ -4,15 +4,19 @@ set -ex
44
55SCRIPTDIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) /.." && pwd ) "
66
7- IRONIC_IMAGE=${IRONIC_IMAGE:- " quay.io/metal3-io/ironic:main" }
8- IRONIC_KEEPALIVED_IMAGE=${IRONIC_KEEPALIVED_IMAGE:- " quay.io/metal3-io/keepalived" }
9- IPA_DOWNLOADER_IMAGE=${IPA_DOWNLOADER_IMAGE:- " quay.io/metal3-io/ironic-ipa-downloader:main" }
10- MARIADB_IMAGE=${MARIADB_IMAGE:- " quay.io/metal3-io/mariadb:main" }
7+ IRONIC_IMAGE=" ${IRONIC_IMAGE:- quay.io/ metal3-io/ ironic: main} "
8+ IRONIC_KEEPALIVED_IMAGE=" ${IRONIC_KEEPALIVED_IMAGE:- quay.io/ metal3-io/ keepalived} "
9+ IPA_DOWNLOADER_IMAGE=" ${IPA_DOWNLOADER_IMAGE:- quay.io/ metal3-io/ ironic-ipa-downloader: main} "
10+ MARIADB_IMAGE=" ${MARIADB_IMAGE:- quay.io/ metal3-io/ mariadb: main} "
11+
12+ IPA_BASEURI=" ${IPA_BASEURI:- } "
13+ IRONIC_DATA_DIR=" ${IRONIC_DATA_DIR:-/ opt/ metal3-dev-env/ ironic} "
14+ IRONIC_CONF_DIR=" ${IRONIC_CONF_DIR:- ${IRONIC_DATA_DIR} / conf} "
15+ KEEPALIVED_DATA_DIR=" ${IRONIC_DATA_DIR} /keepalived"
16+ RO_FS=" ${RO_FS:- false} "
1117
12- IPA_BASEURI=${IPA_BASEURI:- }
13- IRONIC_DATA_DIR=${IRONIC_DATA_DIR:- " /opt/metal3-dev-env/ironic" }
1418CONTAINER_RUNTIME=" ${CONTAINER_RUNTIME:- podman} "
15- HTTP_PORT=${HTTP_PORT:- " 6180" }
19+ HTTP_PORT=" ${HTTP_PORT:- 6180} "
1620PROVISIONING_IP=" ${PROVISIONING_IP:- " 172.22.0.1" } "
1721CLUSTER_PROVISIONING_IP=" ${CLUSTER_PROVISIONING_IP:- " 172.22.0.2" } "
1822# ironicendpoint is used in the CI setup
2226 PROVISIONING_INTERFACE=" ${PROVISIONING_INTERFACE:- } "
2327fi
2428CLUSTER_DHCP_RANGE=" ${CLUSTER_DHCP_RANGE:- " 172.22.0.10,172.22.0.100" } "
25- IRONIC_KERNEL_PARAMS=" ${IRONIC_KERNEL_PARAMS:- " console=ttyS0" } "
26- IRONIC_BOOT_ISO_SOURCE=" ${IRONIC_BOOT_ISO_SOURCE:- " local" } "
27- export NAMEPREFIX=${NAMEPREFIX:- " capm3" }
29+ IRONIC_KERNEL_PARAMS=" ${IRONIC_KERNEL_PARAMS:- console=ttyS0} "
30+ IRONIC_BOOT_ISO_SOURCE=" ${IRONIC_BOOT_ISO_SOURCE:- local} "
31+ export NAMEPREFIX=" ${NAMEPREFIX:- capm3} "
2832
2933IRONIC_CACERT_FILE=" ${IRONIC_CACERT_FILE:- } "
3034IRONIC_CERT_FILE=" ${IRONIC_CERT_FILE:- } "
3135IRONIC_KEY_FILE=" ${IRONIC_KEY_FILE:- } "
32- IRONIC_TLS_SETUP=${IRONIC_TLS_SETUP:- " true" }
36+ IRONIC_TLS_SETUP=" ${IRONIC_TLS_SETUP:- true} "
3337
3438MARIADB_CACERT_FILE=" ${MARIADB_CACERT_FILE:- } "
3539MARIADB_CERT_FILE=" ${MARIADB_CERT_FILE:- } "
@@ -49,17 +53,20 @@ HTTPS_PROXY="${HTTPS_PROXY:-}"
4953NO_PROXY=" ${NO_PROXY:- } "
5054
5155# Ensure that the MariaDB key file allow a non-owned user to read.
52- if [ -n " ${MARIADB_KEY_FILE} " ]
53- then
56+ if [[ -n " ${MARIADB_KEY_FILE} " ]]; then
5457 chmod 604 " ${MARIADB_KEY_FILE} "
5558fi
5659
5760sudo mkdir -p " ${IRONIC_DATA_DIR} /auth"
61+ sudo mkdir -p " ${IRONIC_CONF_DIR} "
62+ sudo rm -rf " ${KEEPALIVED_DATA_DIR} "
63+ sudo mkdir -p " ${KEEPALIVED_DATA_DIR} "
5864
59- if [ " $IRONIC_TLS_SETUP " = " true" ]; then
65+
66+ if [[ " ${IRONIC_TLS_SETUP} " = " true" ]]; then
6067 sudo mkdir -p " ${IRONIC_DATA_DIR} /tls"
6168
62- if [ -z " $IRONIC_CERT_FILE " ]; then
69+ if [[ -z " ${ IRONIC_CERT_FILE} " ] ]; then
6370 IRONIC_CERT_FILE=" ${IRONIC_DATA_DIR} /tls/ironic.crt"
6471 IRONIC_KEY_FILE=" ${IRONIC_DATA_DIR} /tls/ironic.key"
6572 IRONIC_CACERT_FILE=" ${IRONIC_CERT_FILE} "
@@ -69,7 +76,7 @@ if [ "$IRONIC_TLS_SETUP" = "true" ]; then
6976 fi
7077
7178 export IRONIC_BASE_URL=" https://${CLUSTER_PROVISIONING_IP} "
72- if [ -z " $IRONIC_CACERT_FILE " ]; then
79+ if [[ -z " ${ IRONIC_CACERT_FILE} " ] ]; then
7380 export IRONIC_CACERT_FILE=$IRONIC_CERT_FILE
7481 fi
7582else
7885
7986DEPLOY_KERNEL_URL=" ${DEPLOY_KERNEL_URL:- " http://${CLUSTER_PROVISIONING_IP} :${HTTP_PORT} /images/ironic-python-agent.kernel" } "
8087DEPLOY_RAMDISK_URL=" ${DEPLOY_RAMDISK_URL:- " http://${CLUSTER_PROVISIONING_IP} :${HTTP_PORT} /images/ironic-python-agent.initramfs" } "
81- DEPLOY_ISO_URL=${DEPLOY_ISO_URL:- }
88+ DEPLOY_ISO_URL=" ${DEPLOY_ISO_URL:- } "
8289IRONIC_ENDPOINT=" ${IRONIC_ENDPOINT:- " ${IRONIC_BASE_URL} :6385/v1/" } "
8390CACHEURL=" ${CACHEURL:- " http://${PROVISIONING_IP} /images" } "
8491IRONIC_FAST_TRACK=" ${IRONIC_FAST_TRACK:- " true" } "
85- IRONIC_REVERSE_PROXY_SETUP=${IRONIC_REVERSE_PROXY_SETUP:- " true" }
86- IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:- " false" }
87- if [[ $ IRONIC_TLS_SETUP == * false* ]]
92+ IRONIC_REVERSE_PROXY_SETUP=" ${IRONIC_REVERSE_PROXY_SETUP:- " true" } "
93+ IRONIC_USE_MARIADB=" ${IRONIC_USE_MARIADB:- " false" } "
94+ if [[ " ${ IRONIC_TLS_SETUP} " == * false* ]]
8895then
8996 # No reverse proxy for Ironic if TLS is not used
9097 IRONIC_REVERSE_PROXY_SETUP=" false"
9198fi
92- IRONIC_INSPECTOR_VLAN_INTERFACES=${IRONIC_INSPECTOR_VLAN_INTERFACES:- " all" }
99+ IRONIC_INSPECTOR_VLAN_INTERFACES=" ${IRONIC_INSPECTOR_VLAN_INTERFACES:- " all" } "
93100
94101cat << EOF | sudo tee "${IRONIC_DATA_DIR} /ironic-vars.env"
95102HTTP_PORT=${HTTP_PORT}
@@ -115,7 +122,7 @@ NO_PROXY=${NO_PROXY}
115122USE_IRONIC_INSPECTOR=false
116123EOF
117124
118- if [ " $IRONIC_TLS_SETUP " == " true" ] && [ -n " $IRONIC_CA_CERT_B64 " ]; then
125+ if [[ " $IRONIC_TLS_SETUP " == " true" ]] && [[ -n " $IRONIC_CA_CERT_B64 " ] ]; then
119126# shellcheck disable=SC2086
120127cat << EOF | kubectl apply -f -
121128apiVersion: v1
@@ -129,32 +136,32 @@ type: Opaque
129136EOF
130137fi
131138
132- sudo " ${CONTAINER_RUNTIME} " pull " $IRONIC_IMAGE "
133- sudo " ${CONTAINER_RUNTIME} " pull " $IRONIC_KEEPALIVED_IMAGE "
134- if [ " $IRONIC_USE_MARIADB " = " true" ]; then
135- sudo " ${CONTAINER_RUNTIME} " pull " $MARIADB_IMAGE "
139+ sudo " ${CONTAINER_RUNTIME} " pull " ${ IRONIC_IMAGE} "
140+ sudo " ${CONTAINER_RUNTIME} " pull " ${ IRONIC_KEEPALIVED_IMAGE} "
141+ if [ " ${ IRONIC_USE_MARIADB} " = " true" ]; then
142+ sudo " ${CONTAINER_RUNTIME} " pull " ${ MARIADB_IMAGE} "
136143fi
137144
138- CERTS_MOUNTS=" "
145+ CERTS_MOUNTS=" -v ${IRONIC_DATA_DIR} /tls:/certs "
139146
140- if [ -r " $IRONIC_CACERT_FILE " ]; then
141- CERTS_MOUNTS=" -v ${IRONIC_CACERT_FILE} :/certs/ca/ironic/tls.crt "
147+ if [[ -r " { $IRONIC_CACERT_FILE } " ] ]; then
148+ CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${IRONIC_CACERT_FILE} :/certs/ca/ironic/tls.crt "
142149fi
143150
144- if [ -r " $IRONIC_CERT_FILE " ]; then
151+ if [[ -r " ${ IRONIC_CERT_FILE} " ] ]; then
145152 CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${IRONIC_CERT_FILE} :/certs/ironic/tls.crt "
146153fi
147- if [ -r " $IRONIC_KEY_FILE " ]; then
154+ if [[ -r " ${ IRONIC_KEY_FILE} " ] ]; then
148155 CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${IRONIC_KEY_FILE} :/certs/ironic/tls.key "
149156fi
150157
151- if [ -r " $MARIADB_CACERT_FILE " ]; then
152- CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${MARIADB_CACERT_FILE} :/certs/ca/mariadb/tls.crt "
158+ if [[ -r " ${ MARIADB_CACERT_FILE} " ] ]; then
159+ CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${MARIADB_CACERT_FILE} :/certs/ca/mariadb/tls.crt "
153160fi
154- if [ -r " $MARIADB_CERT_FILE " ]; then
161+ if [[ -r " ${ MARIADB_CERT_FILE} " ] ]; then
155162 CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${MARIADB_CERT_FILE} :/certs/mariadb/tls.crt "
156163fi
157- if [ -r " $MARIADB_KEY_FILE " ]; then
164+ if [[ -r " ${ MARIADB_KEY_FILE} " ] ]; then
158165 CERTS_MOUNTS=" ${CERTS_MOUNTS} -v ${MARIADB_KEY_FILE} :/certs/mariadb/tls.key "
159166fi
160167
@@ -172,31 +179,36 @@ BASIC_AUTH_MOUNTS=""
172179IRONIC_HTPASSWD_FILE=" ${IRONIC_DATA_DIR} /auth/ironic-htpasswd"
173180IRONIC_HTPASSWD_MOUNT=" "
174181set +x
175- if [ -n " $IRONIC_USERNAME " ]; then
176- htpasswd -n -b -B " ${IRONIC_USERNAME} " " ${IRONIC_PASSWORD} " > " ${IRONIC_HTPASSWD_FILE} "
182+ if [[ -n " $IRONIC_USERNAME " ]]; then
183+ htpasswd -n -b -B " ${IRONIC_USERNAME} " \
184+ " ${IRONIC_PASSWORD} " > " ${IRONIC_HTPASSWD_FILE} "
177185 IRONIC_HTPASSWD_MOUNT=" -v ${IRONIC_HTPASSWD_FILE} :/auth/ironic/htpasswd"
178186fi
179187set -x
180188
181189sudo mkdir -p " $IRONIC_DATA_DIR /html/images"
182- # Locally supplied IPA images are imported here when the environment variables are set accordingly.
183- # Name of the IPA archive is expected to be "ironic-python-agent.tar" at all times.
190+ # Locally supplied IPA images are imported here when the environment variables
191+ # are set accordingly. Name of the IPA archive is expected to be
192+ # "ironic-python-agent.tar" at all times.
184193if ${USE_LOCAL_IPA} && ! ${IPA_DOWNLOAD_ENABLED} ; then
185- sudo cp " ${LOCAL_IPA_PATH} /ironic-python-agent.tar" " $IRONIC_DATA_DIR /html/images"
186- sudo tar --extract --file " $IRONIC_DATA_DIR /html/images/ironic-python-agent.tar" \
187- --directory " $IRONIC_DATA_DIR /html/images"
194+ sudo cp " ${LOCAL_IPA_PATH} /ironic-python-agent.tar" \
195+ " ${IRONIC_DATA_DIR} /html/images"
196+ sudo tar --extract \
197+ --file " ${IRONIC_DATA_DIR} /html/images/ironic-python-agent.tar" \
198+ --directory " ${IRONIC_DATA_DIR} /html/images"
188199fi
189200
190201# The images directory should contain images and an associated md5sum.
191202# - image.qcow2
192203# - image.qcow2.md5sum
193- # By default, image directory points to dir having needed images when metal3-dev-env environment in use.
204+ # By default, image directory points to dir having needed images when
205+ # metal3-dev-env environment in use.
194206# In other cases user has to store images beforehand.
195207
196208" $SCRIPTDIR /tools/remove_local_ironic.sh"
197209
198210set +x
199- if [ " $IRONIC_USE_MARIADB " = " true" ]; then
211+ if [[ " $IRONIC_USE_MARIADB " = " true" ] ]; then
200212 # set password for mariadb
201213 mariadb_password=$( echo " $( date; hostname) " | sha256sum | cut -c-20)
202214 IRONIC_MARIADB_PASSWORD=" --env MARIADB_PASSWORD=$mariadb_password "
220232# Start image downloader container
221233if ${IPA_DOWNLOAD_ENABLED} ; then
222234 # shellcheck disable=SC2086
223- sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name ipa-downloader \
224- ${POD} --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
225- -v " $IRONIC_DATA_DIR :/shared" " ${IPA_DOWNLOADER_IMAGE} " /usr/local/bin/get-resource.sh
235+ sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged \
236+ --read-only=" ${RO_FS} " --name ipa-downloader \
237+ ${POD} --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
238+ -v " $IRONIC_DATA_DIR :/shared" \
239+ " ${IPA_DOWNLOADER_IMAGE} " /usr/local/bin/get-resource.sh
226240
227241 sudo " ${CONTAINER_RUNTIME} " wait ipa-downloader
228242fi
229243
230244# Start dnsmasq, http, mariadb, and ironic containers using same image
231245
246+ # Start dnsmaq
232247# See this file for env vars you can set, like IP, DHCP_RANGE, INTERFACE
233248# https://github.com/metal3-io/ironic-image/blob/main/scripts/rundnsmasq
234249# shellcheck disable=SC2086
235- sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name dnsmasq \
236- ${POD} ${CERTS_MOUNTS} --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
237- -v " $IRONIC_DATA_DIR :/shared" --entrypoint /bin/rundnsmasq " ${IRONIC_IMAGE} "
238-
250+ sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged \
251+ --read-only=" ${RO_FS} " --name dnsmasq \
252+ ${POD} ${CERTS_MOUNTS} --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
253+ -v " $IRONIC_DATA_DIR :/shared" \
254+ -v " ${IRONIC_CONF_DIR} :/conf" \
255+ -v " $IRONIC_DATA_DIR :/data" \
256+ --entrypoint /bin/rundnsmasq " ${IRONIC_IMAGE} "
257+
258+ # Start httpd
239259# See this file for env vars you can set, like IP, DHCP_RANGE, INTERFACE
240260# https://github.com/metal3-io/ironic-image/blob/main/scripts/runhttpd
241261# shellcheck disable=SC2086
242- sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name httpd \
243- ${POD} ${CERTS_MOUNTS} ${BASIC_AUTH_MOUNTS} ${IRONIC_HTPASSWD_MOUNT} \
244- --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
245- -v " ${IRONIC_DATA_DIR} :/shared" --entrypoint /bin/runhttpd " ${IRONIC_IMAGE} "
262+ sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged \
263+ --read-only=" ${RO_FS} " --name httpd \
264+ ${POD} ${CERTS_MOUNTS} ${BASIC_AUTH_MOUNTS} ${IRONIC_HTPASSWD_MOUNT} \
265+ --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
266+ -v " ${IRONIC_DATA_DIR} :/shared" \
267+ -v " ${IRONIC_CONF_DIR} :/conf" \
268+ -v " $IRONIC_DATA_DIR :/data" \
269+ -v " /tmp:/var/tmp" \
270+ --entrypoint /bin/runhttpd " ${IRONIC_IMAGE} "
246271
247272if [ " $IRONIC_USE_MARIADB " = " true" ]; then
248273 # https://github.com/metal3-io/mariadb-image/blob/main/runmariadb
249274 # shellcheck disable=SC2086
250275 sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name mariadb \
251- ${POD} ${CERTS_MOUNTS} --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
252- -v " $IRONIC_DATA_DIR :/shared" \
253- --env " MARIADB_PASSWORD=$mariadb_password " " ${MARIADB_IMAGE} "
276+ ${POD} ${CERTS_MOUNTS} \
277+ --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
278+ -v " $IRONIC_DATA_DIR :/shared" \
279+ --env " MARIADB_PASSWORD=$mariadb_password " \
280+ " ${MARIADB_IMAGE} "
254281fi
255282
256- # See this file for additional env vars you may want to pass, like IP and INTERFACE
283+ # Start ironic
284+ # See this file for additional env vars you may want to pass, e.g IP, INTERFACE
257285# https://github.com/metal3-io/ironic-image/blob/main/scripts/runironic
258286# shellcheck disable=SC2086
259- sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name ironic \
260- ${POD} ${CERTS_MOUNTS} ${BASIC_AUTH_MOUNTS} ${IRONIC_HTPASSWD_MOUNT} \
261- --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
262- ${IRONIC_MARIADB_PASSWORD} --entrypoint /bin/runironic \
263- -v " $IRONIC_DATA_DIR :/shared" " ${IRONIC_IMAGE} "
287+ sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged \
288+ --read-only=" ${RO_FS} " --name ironic \
289+ ${POD} ${CERTS_MOUNTS} ${BASIC_AUTH_MOUNTS} ${IRONIC_HTPASSWD_MOUNT} \
290+ --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
291+ ${IRONIC_MARIADB_PASSWORD} --entrypoint /bin/runironic \
292+ -v " $IRONIC_DATA_DIR :/shared" \
293+ -v " ${IRONIC_CONF_DIR} :/conf" \
294+ -v " $IRONIC_DATA_DIR :/data" \
295+ -v " /tmp:/var/tmp" \
296+ " ${IRONIC_IMAGE} "
264297
265298# Start ironic-endpoint-keepalived
266299# shellcheck disable=SC2086
267- sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name ironic-endpoint-keepalived \
300+ sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged \
301+ --read-only=" ${RO_FS} " --name ironic-endpoint-keepalived \
268302 ${POD} --env-file " ${IRONIC_DATA_DIR} /ironic-vars.env" \
269- -v " $IRONIC_DATA_DIR :/shared" " ${IRONIC_KEEPALIVED_IMAGE} "
303+ -v " $IRONIC_DATA_DIR :/shared" \
304+ -v " ${IRONIC_CONF_DIR} :/conf" \
305+ -v " $IRONIC_DATA_DIR :/data" \
306+ " ${IRONIC_KEEPALIVED_IMAGE} "
270307
271308# Start ironic-log-watch
272309# shellcheck disable=SC2086
273- sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged --name ironic-log-watch \
310+ sudo " ${CONTAINER_RUNTIME} " run -d --net host --privileged \
311+ --read-only=" ${RO_FS} " --name ironic-log-watch \
274312 ${POD} --entrypoint /bin/runlogwatch.sh \
275- -v " $IRONIC_DATA_DIR :/shared" " ${IRONIC_IMAGE} "
313+ -v " $IRONIC_DATA_DIR :/shared" \
314+ -v " ${IRONIC_CONF_DIR} :/conf" \
315+ " ${IRONIC_IMAGE} "
0 commit comments