From 1a560c19021ff232b7869b3057af4bcc46145b40 Mon Sep 17 00:00:00 2001 From: Stefan Berg Date: Fri, 29 Jan 2016 14:44:43 +0100 Subject: Brahmaputra master sync Signed-off-by: Stefan Berg --- .../f_isoroot/f_bootstrap/bootstrap_admin_node.sh | 229 ++++++++++++++---- .../f_bootstrap/bootstrap_admin_node.sh.orig | 263 ++++++++++++++++----- 2 files changed, 393 insertions(+), 99 deletions(-) (limited to 'build/f_isoroot/f_bootstrap') diff --git a/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh b/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh index 8bf1bb165..b096a7812 100755 --- a/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh +++ b/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh @@ -65,16 +65,139 @@ function fail() { echo "ERROR: Fuel node deployment FAILED! Check /var/log/puppet/bootstrap_admin_node.log for details" 1>&2 exit 1 } + +function get_ethernet_interfaces() { + # Get list of all ethernet interfaces, non-virtual, not a wireless + for DEV in /sys/class/net/* ; do + # Take only links into account, skip files + if test ! -L $DEV ; then + continue + fi + DEVPATH=$(readlink -f $DEV) + # Avoid virtual devices like loopback, tunnels, bonding, vlans ... + case $DEVPATH in + */virtual/*) + continue + ;; + esac + IF=${DEVPATH##*/} + # Check ethernet only + case "`cat $DEV/type`" in + 1) + # TYPE=1 is ethernet, may also be wireless, bond, tunnel ... + # Virtual lo, bound, vlan, tunneling has been skipped before + if test -d $DEV/wireless -o -L $DEV/phy80211 ; + then + continue + else + # Catch ethernet non-virtual device + echo $IF + fi + ;; + *) continue + ;; + esac + done +} + +# Get value of a key from ifcfg-* files +# Usage: +# get_ifcfg_value NAME /etc/sysconfig/network-scripts/ifcfg-eth0 +function get_ifcfg_value { + local key=$1 + local path=$2 + local value='' + if [[ -f ${path} ]]; then + value=$(awk -F\= "\$1==\"${key}\" {print \$2}" ${path}) + value=${value//\"/} + fi + echo ${value} +} + +# Workaround to fix dracut network configuration approach: +# Bring down all network interfaces which have the same IP +# address statically configured as 'primary' interface +function ifdown_ethernet_interfaces { + local adminif_ipaddr + local if_config + local if_name + local if_ipaddr + + adminif_ipaddr=$(get_ifcfg_value IPADDR /etc/sysconfig/network-scripts/ifcfg-${ADMIN_INTERFACE}) + if [[ -z "${adminif_ipaddr}" ]]; then + return + fi + for if_config in $(find /etc/sysconfig/network-scripts -name 'ifcfg-*' ! -name 'ifcfg-lo'); do + if_name=$(get_ifcfg_value NAME $if_config) + if [[ "${if_name}" == "${ADMIN_INTERFACE}" ]]; then + continue + fi + if_ipaddr=$(get_ifcfg_value IPADDR $if_config) + if [[ "${if_ipaddr}" == "${adminif_ipaddr}" ]]; then + echo "Interface '${if_name}' uses the same ip '${if_ipaddr}' as admin interface '${ADMIN_INTERFACE}', removing ..." + ifdown ${if_name} + mkdir -p "${bup_folder}" + mv -f "${if_config}" "${bup_folder}" + fi + done +} + +# Check if interface name is valid by checking that +# a config file with NAME equal to given name exists. +function ifname_valid { + local adminif_name=$1 + local if_name + local if_config + for if_config in $(find /etc/sysconfig/network-scripts -name 'ifcfg-*' ! -name 'ifcfg-lo'); do + if_name=$(get_ifcfg_value NAME $if_config) + if [[ "${if_name}" == "${adminif_name}" ]]; then + return 0 + fi + done + return 1 +} + + # LANG variable is a workaround for puppet-3.4.2 bug. See LP#1312758 for details export LANG=en_US.UTF8 -export ADMIN_INTERFACE=eth0 +# Be sure, that network devices have been initialized +udevadm trigger --subsystem-match=net +udevadm settle -showmenu="no" -if [ -f /etc/fuel/bootstrap_admin_node.conf ]; then - . /etc/fuel/bootstrap_admin_node.conf - echo "Applying admin interface '$ADMIN_INTERFACE'" +# Import bootstrap_admin_node.conf if exists +if [ -f "${BOOTSTRAP_NODE_CONFIG}" ]; then + source "${BOOTSTRAP_NODE_CONFIG}" fi +# Set defaults to unset / empty variables +# Although eth0 is not always valid it's a good well-known default +# If there is no such interface it will fail to pass ifname_valid +# check and will be replaced. +OLD_ADMIN_INTERFACE=${ADMIN_INTERFACE} +ADMIN_INTERFACE=${ADMIN_INTERFACE:-'eth0'} +showmenu=${showmenu:-'no'} + +# Now check that ADMIN_INTERFACE points to a valid interface +# If it doesn't fallback to getting the first interface name +# from a list of all available interfaces sorted alphabetically +if ! ifname_valid $ADMIN_INTERFACE; then + # Take the very first ethernet interface as an admin interface + ADMIN_INTERFACE=$(get_ethernet_interfaces | sort -V | head -1) +fi + +if [[ "${OLD_ADMIN_INTERFACE}" != "${ADMIN_INTERFACE}" ]]; then + echo "Saving ADMIN_INTERFACE value" + sed -ie "s/^ADMIN_INTERFACE=.*/ADMIN_INTERFACE=${ADMIN_INTERFACE}/g" \ + ${BOOTSTRAP_NODE_CONFIG} +fi + +echo "Applying admin interface '$ADMIN_INTERFACE'" +export ADMIN_INTERFACE + +echo "Bringing down ALL network interfaces except '${ADMIN_INTERFACE}'" +ifdown_ethernet_interfaces +systemctl restart network + echo "Applying default Fuel settings..." set -x fuelmenu --save-only --iface=$ADMIN_INTERFACE @@ -116,13 +239,6 @@ if [[ "$showmenu" == "yes" || "$showmenu" == "YES" ]]; then fi fi -systemctl reload sshd - -# Enable iptables -systemctl enable iptables.service -systemctl start iptables.service - - if [ ! -f "${ASTUTE_YAML}" ]; then echo ${fuelmenu_fail_message} fail @@ -167,11 +283,13 @@ hostname "$HOSTNAME" # and egg problem. Fortunately cobbler is pretty happy with empty files # so it's easy to break the loop. make_ubuntu_bootstrap_stub () { - local bootstrap_dir='/var/www/nailgun/bootstrap/ubuntu' - mkdir -p $bootstrap_dir - for item in linux initramfs.img; do - touch "$bootstrap_dir/$item" - done + local bootstrap_dir='/var/www/nailgun/bootstraps/active_bootstrap' + local bootstrap_stub_dir='/var/www/nailgun/bootstraps/bootstrap_stub' + mkdir -p ${bootstrap_stub_dir} + for item in vmlinuz initrd.img; do + touch "${bootstrap_stub_dir}/$item" + done + ln -s ${bootstrap_stub_dir} ${bootstrap_dir} || true } get_bootstrap_flavor () { @@ -221,13 +339,18 @@ build_ubuntu_bootstrap () { return $ret } - # Create empty files to make cobbler happy # (even if we don't use Ubuntu based bootstrap) make_ubuntu_bootstrap_stub service docker start +old_sysctl_vm_value=$(sysctl -n vm.min_free_kbytes) +if [ ${old_sysctl_vm_value} -lt 65535 ]; then + echo "Set vm.min_free_kbytes..." + sysctl -w vm.min_free_kbytes=65535 +fi + if [ -f /root/.build_images ]; then #Fail on all errors set -e @@ -239,7 +362,7 @@ if [ -f /root/.build_images ]; then echo "Building Fuel Docker images..." WORKDIR=$(mktemp -d /tmp/docker-buildXXX) SOURCE=/var/www/nailgun/docker - REPO_CONT_ID=$(docker -D run -d -p 80 -v /var/www/nailgun:/var/www/nailgun fuel/centos sh -c 'mkdir /var/www/html/os;ln -sf /var/www/nailgun/centos/x86_64 /var/www/html/os/x86_64;/usr/sbin/apachectl -DFOREGROUND') + REPO_CONT_ID=$(docker -D run -d -p 80 -v /var/www/nailgun:/var/www/nailgun fuel/centos sh -c 'mkdir -p /var/www/html/repo/os;ln -sf /var/www/nailgun/centos/x86_64 /var/www/html/repo/os/x86_64;ln -s /var/www/nailgun/mos-centos/x86_64 /var/www/html/mos-repo;/usr/sbin/apachectl -DFOREGROUND') RANDOM_PORT=$(docker port $REPO_CONT_ID 80 | cut -d':' -f2) for imagesource in /var/www/nailgun/docker/sources/*; do @@ -252,6 +375,10 @@ if [ -f /root/.build_images ]; then mkdir -p $WORKDIR/$image/etc cp -R /etc/puppet /etc/fuel $WORKDIR/$image/etc sed -e "s/_PORT_/${RANDOM_PORT}/" -i $WORKDIR/$image/Dockerfile + sed -r -e 's/^"?PRODUCTION"?:.*/PRODUCTION: "docker-build"/' -i $WORKDIR/$image/etc/fuel/astute.yaml + # FIXME(kozhukalov): Once this patch https://review.openstack.org/#/c/219581/ is merged + # remove this line. fuel-library is to use PRODUCTION value from astute.yaml instead of + # the same value from version.yaml. It is a part of version.yaml deprecation plan. sed -e 's/production:.*/production: "docker-build"/' -i $WORKDIR/$image/etc/fuel/version.yaml docker build -t fuel/${image}_${FUEL_RELEASE} $WORKDIR/$image done @@ -266,12 +393,22 @@ else docker load -i /var/www/nailgun/docker/images/fuel-images.tar fi +if [ ${old_sysctl_vm_value} -lt 65535 ]; then + echo "Restore sysctl vm.min_free_kbytes value..." + sysctl -w vm.min_free_kbytes=${old_sysctl_vm_value} +fi + # apply puppet puppet apply --detailed-exitcodes -d -v /etc/puppet/modules/nailgun/examples/host-only.pp if [ $? -ge 4 ];then fail fi +# Sync time +systemctl stop ntpd +systemctl start ntpdate || echo "Failed to synchronize time with 'ntpdate'" +systemctl start ntpd + rmdir /var/log/remote && ln -s /var/log/docker-logs/remote /var/log/remote dockerctl check || fail @@ -288,7 +425,15 @@ shopt -u nullglob ### OPNFV addition END if [ "`get_bootstrap_flavor`" = "ubuntu" ]; then - build_ubuntu_bootstrap || true + if [ "`get_bootstrap_skip`" = "False" ]; then + build_ubuntu_bootstrap bs_status || true + else + fuel notify --topic "warning" --send "${bs_skip_message}" + bs_status=2 + fi +else + fuel notify --topic "warning" --send "${bs_centos_message}" + bs_status=3 fi @@ -296,7 +441,7 @@ fi cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-updates.repo << EOF [mos${FUEL_RELEASE}-updates] name=mos${FUEL_RELEASE}-updates -baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos6-fuel/updates/x86_64/ +baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos\$releasever-fuel/updates/x86_64/ gpgcheck=0 skip_if_unavailable=1 EOF @@ -305,14 +450,14 @@ EOF cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-security.repo << EOF [mos${FUEL_RELEASE}-security] name=mos${FUEL_RELEASE}-security -baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos6-fuel/security/x86_64/ +baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos\$releasever-fuel/security/x86_64/ gpgcheck=0 skip_if_unavailable=1 EOF #Check if repo is accessible echo "Checking for access to updates repository..." -repourl=$(grep baseurl /etc/yum.repos.d/*updates* 2>/dev/null | cut -d'=' -f2- | head -1) +repourl=$(yum repolist all -v | awk '{if ($1 ~ "baseurl" && $3 ~ "updates") print $3}' | head -1) if urlaccesscheck check "$repourl" ; then UPDATE_ISSUES=0 else @@ -320,30 +465,34 @@ else fi if [ $UPDATE_ISSUES -eq 1 ]; then - message="There is an issue connecting to the Fuel update repository. \ -Please fix your connection prior to applying any updates. \ -Once the connection is fixed, we recommend reviewing and applying \ -Maintenance Updates for this release of Mirantis OpenStack: \ -https://docs.mirantis.com/openstack/fuel/fuel-${FUEL_RELEASE}/\ -release-notes.html#maintenance-updates" + message=${update_warn_message} level="warning" else - message="We recommend reviewing and applying Maintenance Updates \ -for this release of Mirantis OpenStack: \ -https://docs.mirantis.com/openstack/fuel/fuel-${FUEL_RELEASE}/\ -release-notes.html#maintenance-updates" + message=${update_done_message} level="done" fi echo echo "*************************************************" echo -e "${message}" echo "*************************************************" -echo "Sending notification to Fuel UI..." -fuel notify --topic "${level}" --send "${message}" - -# TODO(kozhukalov) If building of bootstrap image fails -# and if this image was supposed to be a default bootstrap image -# we need to warn a user about this and give her -# advice how to treat this. +fuel notify --topic "${level}" --send $(echo "${message}" | tr '\r\n' ' ') 2>&1 + +# Perform bootstrap messaging to stdout +case ${bs_status} in + 1) + echo -e "${bs_error_message}" + echo "*************************************************" + ;; + 2) + echo -e "${bs_skip_message}" + echo "*************************************************" + ;; + 3) + echo -e "${bs_centos_message}" + echo "*************************************************" + ;; +esac echo "Fuel node deployment complete!" +# Sleep for agetty autologon +sleep 3 diff --git a/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig b/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig index e637c7b6d..69e38e42a 100755 --- a/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig +++ b/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig @@ -65,16 +65,139 @@ function fail() { echo "ERROR: Fuel node deployment FAILED! Check /var/log/puppet/bootstrap_admin_node.log for details" 1>&2 exit 1 } + +function get_ethernet_interfaces() { + # Get list of all ethernet interfaces, non-virtual, not a wireless + for DEV in /sys/class/net/* ; do + # Take only links into account, skip files + if test ! -L $DEV ; then + continue + fi + DEVPATH=$(readlink -f $DEV) + # Avoid virtual devices like loopback, tunnels, bonding, vlans ... + case $DEVPATH in + */virtual/*) + continue + ;; + esac + IF=${DEVPATH##*/} + # Check ethernet only + case "`cat $DEV/type`" in + 1) + # TYPE=1 is ethernet, may also be wireless, bond, tunnel ... + # Virtual lo, bound, vlan, tunneling has been skipped before + if test -d $DEV/wireless -o -L $DEV/phy80211 ; + then + continue + else + # Catch ethernet non-virtual device + echo $IF + fi + ;; + *) continue + ;; + esac + done +} + +# Get value of a key from ifcfg-* files +# Usage: +# get_ifcfg_value NAME /etc/sysconfig/network-scripts/ifcfg-eth0 +function get_ifcfg_value { + local key=$1 + local path=$2 + local value='' + if [[ -f ${path} ]]; then + value=$(awk -F\= "\$1==\"${key}\" {print \$2}" ${path}) + value=${value//\"/} + fi + echo ${value} +} + +# Workaround to fix dracut network configuration approach: +# Bring down all network interfaces which have the same IP +# address statically configured as 'primary' interface +function ifdown_ethernet_interfaces { + local adminif_ipaddr + local if_config + local if_name + local if_ipaddr + + adminif_ipaddr=$(get_ifcfg_value IPADDR /etc/sysconfig/network-scripts/ifcfg-${ADMIN_INTERFACE}) + if [[ -z "${adminif_ipaddr}" ]]; then + return + fi + for if_config in $(find /etc/sysconfig/network-scripts -name 'ifcfg-*' ! -name 'ifcfg-lo'); do + if_name=$(get_ifcfg_value NAME $if_config) + if [[ "${if_name}" == "${ADMIN_INTERFACE}" ]]; then + continue + fi + if_ipaddr=$(get_ifcfg_value IPADDR $if_config) + if [[ "${if_ipaddr}" == "${adminif_ipaddr}" ]]; then + echo "Interface '${if_name}' uses the same ip '${if_ipaddr}' as admin interface '${ADMIN_INTERFACE}', removing ..." + ifdown ${if_name} + mkdir -p "${bup_folder}" + mv -f "${if_config}" "${bup_folder}" + fi + done +} + +# Check if interface name is valid by checking that +# a config file with NAME equal to given name exists. +function ifname_valid { + local adminif_name=$1 + local if_name + local if_config + for if_config in $(find /etc/sysconfig/network-scripts -name 'ifcfg-*' ! -name 'ifcfg-lo'); do + if_name=$(get_ifcfg_value NAME $if_config) + if [[ "${if_name}" == "${adminif_name}" ]]; then + return 0 + fi + done + return 1 +} + + # LANG variable is a workaround for puppet-3.4.2 bug. See LP#1312758 for details export LANG=en_US.UTF8 -export ADMIN_INTERFACE=eth0 +# Be sure, that network devices have been initialized +udevadm trigger --subsystem-match=net +udevadm settle + +# Import bootstrap_admin_node.conf if exists +if [ -f "${BOOTSTRAP_NODE_CONFIG}" ]; then + source "${BOOTSTRAP_NODE_CONFIG}" +fi + +# Set defaults to unset / empty variables +# Although eth0 is not always valid it's a good well-known default +# If there is no such interface it will fail to pass ifname_valid +# check and will be replaced. +OLD_ADMIN_INTERFACE=${ADMIN_INTERFACE} +ADMIN_INTERFACE=${ADMIN_INTERFACE:-'eth0'} +showmenu=${showmenu:-'no'} + +# Now check that ADMIN_INTERFACE points to a valid interface +# If it doesn't fallback to getting the first interface name +# from a list of all available interfaces sorted alphabetically +if ! ifname_valid $ADMIN_INTERFACE; then + # Take the very first ethernet interface as an admin interface + ADMIN_INTERFACE=$(get_ethernet_interfaces | sort -V | head -1) +fi -showmenu="no" -if [ -f /etc/fuel/bootstrap_admin_node.conf ]; then - . /etc/fuel/bootstrap_admin_node.conf - echo "Applying admin interface '$ADMIN_INTERFACE'" +if [[ "${OLD_ADMIN_INTERFACE}" != "${ADMIN_INTERFACE}" ]]; then + echo "Saving ADMIN_INTERFACE value" + sed -ie "s/^ADMIN_INTERFACE=.*/ADMIN_INTERFACE=${ADMIN_INTERFACE}/g" \ + ${BOOTSTRAP_NODE_CONFIG} fi +echo "Applying admin interface '$ADMIN_INTERFACE'" +export ADMIN_INTERFACE + +echo "Bringing down ALL network interfaces except '${ADMIN_INTERFACE}'" +ifdown_ethernet_interfaces +systemctl restart network + echo "Applying default Fuel settings..." set -x fuelmenu --save-only --iface=$ADMIN_INTERFACE @@ -148,11 +271,13 @@ hostname "$HOSTNAME" # and egg problem. Fortunately cobbler is pretty happy with empty files # so it's easy to break the loop. make_ubuntu_bootstrap_stub () { - local bootstrap_dir='/var/www/nailgun/bootstrap/ubuntu' - mkdir -p $bootstrap_dir - for item in linux initramfs.img; do - touch "$bootstrap_dir/$item" - done + local bootstrap_dir='/var/www/nailgun/bootstraps/active_bootstrap' + local bootstrap_stub_dir='/var/www/nailgun/bootstraps/bootstrap_stub' + mkdir -p ${bootstrap_stub_dir} + for item in vmlinuz initrd.img; do + touch "${bootstrap_stub_dir}/$item" + done + ln -s ${bootstrap_stub_dir} ${bootstrap_dir} || true } get_bootstrap_flavor () { @@ -185,41 +310,35 @@ set_ui_bootstrap_error () { # Actually build the bootstrap image build_ubuntu_bootstrap () { - local ret=1 - local max_attempts=3 - local config='/etc/fuel-bootstrap-image.conf' - local log='/var/log/fuel-bootstrap-image-build.log' - if ! grep -qE '^BOOTSTRAP_SSH_KEYS' "$config"; then - # FIXME: config file generated by fuelmenu has no trailing newline - echo >> "$config" - cat >> "$config" <<-EOF - BOOTSTRAP_SSH_KEYS=/root/.ssh/id_rsa.pub - EOF - fi - for n in `seq 1 $max_attempts`; do - echo "Bulding bootstrap image, attempt $n" >&2 - if fuel-bootstrap-image >>"$log" 2>&1; then - ret=0 - fuel-bootstrap-image-set "ubuntu" - break - fi - done - if [ $ret -ne 0 ]; then - warning="WARNING: failed to build the bootstrap image, see $log for details. -Perhaps your Internet connection is broken. Please fix the problem and run -\`fuel-bootstrap-image-set ubuntu\`" - fuel notify --topic warning --send "$warning" - fi - return $ret + local ret=1 + echo ${bs_progress_message} >&2 + set_ui_bootstrap_error "${bs_progress_message}" >&2 + if fuel-bootstrap -v --debug build --activate >>"$bs_build_log" 2>&1; then + ret=0 + fuel notify --topic "done" --send "${bs_done_message}" + else + ret=1 + set_ui_bootstrap_error "${bs_error_message}" >&2 + fi + # perform hard-return from func + # this part will update input $1 variable + local __resultvar=$1 + eval $__resultvar="'${ret}'" + return $ret } - # Create empty files to make cobbler happy # (even if we don't use Ubuntu based bootstrap) make_ubuntu_bootstrap_stub service docker start +old_sysctl_vm_value=$(sysctl -n vm.min_free_kbytes) +if [ ${old_sysctl_vm_value} -lt 65535 ]; then + echo "Set vm.min_free_kbytes..." + sysctl -w vm.min_free_kbytes=65535 +fi + if [ -f /root/.build_images ]; then #Fail on all errors set -e @@ -231,7 +350,7 @@ if [ -f /root/.build_images ]; then echo "Building Fuel Docker images..." WORKDIR=$(mktemp -d /tmp/docker-buildXXX) SOURCE=/var/www/nailgun/docker - REPO_CONT_ID=$(docker -D run -d -p 80 -v /var/www/nailgun:/var/www/nailgun fuel/centos sh -c 'mkdir /var/www/html/os;ln -sf /var/www/nailgun/centos/x86_64 /var/www/html/os/x86_64;/usr/sbin/apachectl -DFOREGROUND') + REPO_CONT_ID=$(docker -D run -d -p 80 -v /var/www/nailgun:/var/www/nailgun fuel/centos sh -c 'mkdir -p /var/www/html/repo/os;ln -sf /var/www/nailgun/centos/x86_64 /var/www/html/repo/os/x86_64;ln -s /var/www/nailgun/mos-centos/x86_64 /var/www/html/mos-repo;/usr/sbin/apachectl -DFOREGROUND') RANDOM_PORT=$(docker port $REPO_CONT_ID 80 | cut -d':' -f2) for imagesource in /var/www/nailgun/docker/sources/*; do @@ -244,6 +363,10 @@ if [ -f /root/.build_images ]; then mkdir -p $WORKDIR/$image/etc cp -R /etc/puppet /etc/fuel $WORKDIR/$image/etc sed -e "s/_PORT_/${RANDOM_PORT}/" -i $WORKDIR/$image/Dockerfile + sed -r -e 's/^"?PRODUCTION"?:.*/PRODUCTION: "docker-build"/' -i $WORKDIR/$image/etc/fuel/astute.yaml + # FIXME(kozhukalov): Once this patch https://review.openstack.org/#/c/219581/ is merged + # remove this line. fuel-library is to use PRODUCTION value from astute.yaml instead of + # the same value from version.yaml. It is a part of version.yaml deprecation plan. sed -e 's/production:.*/production: "docker-build"/' -i $WORKDIR/$image/etc/fuel/version.yaml docker build -t fuel/${image}_${FUEL_RELEASE} $WORKDIR/$image done @@ -258,26 +381,44 @@ else docker load -i /var/www/nailgun/docker/images/fuel-images.tar fi +if [ ${old_sysctl_vm_value} -lt 65535 ]; then + echo "Restore sysctl vm.min_free_kbytes value..." + sysctl -w vm.min_free_kbytes=${old_sysctl_vm_value} +fi + # apply puppet puppet apply --detailed-exitcodes -d -v /etc/puppet/modules/nailgun/examples/host-only.pp if [ $? -ge 4 ];then fail fi +# Sync time +systemctl stop ntpd +systemctl start ntpdate || echo "Failed to synchronize time with 'ntpdate'" +systemctl start ntpd + rmdir /var/log/remote && ln -s /var/log/docker-logs/remote /var/log/remote dockerctl check || fail bash /etc/rc.local if [ "`get_bootstrap_flavor`" = "ubuntu" ]; then - build_ubuntu_bootstrap || true + if [ "`get_bootstrap_skip`" = "False" ]; then + build_ubuntu_bootstrap bs_status || true + else + fuel notify --topic "warning" --send "${bs_skip_message}" + bs_status=2 + fi +else + fuel notify --topic "warning" --send "${bs_centos_message}" + bs_status=3 fi # Enable updates repository cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-updates.repo << EOF [mos${FUEL_RELEASE}-updates] name=mos${FUEL_RELEASE}-updates -baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos6-fuel/updates/x86_64/ +baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos\$releasever-fuel/updates/x86_64/ gpgcheck=0 skip_if_unavailable=1 EOF @@ -286,14 +427,14 @@ EOF cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-security.repo << EOF [mos${FUEL_RELEASE}-security] name=mos${FUEL_RELEASE}-security -baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos6-fuel/security/x86_64/ +baseurl=http://mirror.fuel-infra.org/mos-repos/centos/mos${FUEL_RELEASE}-centos\$releasever-fuel/security/x86_64/ gpgcheck=0 skip_if_unavailable=1 EOF #Check if repo is accessible echo "Checking for access to updates repository..." -repourl=$(grep baseurl /etc/yum.repos.d/*updates* 2>/dev/null | cut -d'=' -f2- | head -1) +repourl=$(yum repolist all -v | awk '{if ($1 ~ "baseurl" && $3 ~ "updates") print $3}' | head -1) if urlaccesscheck check "$repourl" ; then UPDATE_ISSUES=0 else @@ -301,30 +442,34 @@ else fi if [ $UPDATE_ISSUES -eq 1 ]; then - message="There is an issue connecting to the Fuel update repository. \ -Please fix your connection prior to applying any updates. \ -Once the connection is fixed, we recommend reviewing and applying \ -Maintenance Updates for this release of Mirantis OpenStack: \ -https://docs.mirantis.com/openstack/fuel/fuel-${FUEL_RELEASE}/\ -release-notes.html#maintenance-updates" + message=${update_warn_message} level="warning" else - message="We recommend reviewing and applying Maintenance Updates \ -for this release of Mirantis OpenStack: \ -https://docs.mirantis.com/openstack/fuel/fuel-${FUEL_RELEASE}/\ -release-notes.html#maintenance-updates" + message=${update_done_message} level="done" fi echo echo "*************************************************" echo -e "${message}" echo "*************************************************" -echo "Sending notification to Fuel UI..." -fuel notify --topic "${level}" --send "${message}" - -# TODO(kozhukalov) If building of bootstrap image fails -# and if this image was supposed to be a default bootstrap image -# we need to warn a user about this and give her -# advice how to treat this. +fuel notify --topic "${level}" --send $(echo "${message}" | tr '\r\n' ' ') 2>&1 + +# Perform bootstrap messaging to stdout +case ${bs_status} in + 1) + echo -e "${bs_error_message}" + echo "*************************************************" + ;; + 2) + echo -e "${bs_skip_message}" + echo "*************************************************" + ;; + 3) + echo -e "${bs_centos_message}" + echo "*************************************************" + ;; +esac echo "Fuel node deployment complete!" +# Sleep for agetty autologon +sleep 3 -- cgit 1.2.3-korg