From 5533b8f7a1c93dc251f8f1f99faf90e82e9e346a Mon Sep 17 00:00:00 2001 From: Gael Chamoulaud Date: Mon, 6 Feb 2017 15:01:25 +0100 Subject: [PATCH] Adds a Bashate target to tox.ini. This will now run bashate on all shell scripts. We could ignore the following list of bashate errors: - E006: Line longer than 79 columns (as many scripts use jinja templating, this is very difficult) - E040: Syntax error determined using `bash -n` (as many scripts use jinja templating, this will often fail and the syntax error will be discovered in execution anyway) Change-Id: I6f6d454ac54a0ac98d8b8a092fa522cba092a592 Signed-off-by: Gael Chamoulaud --- ci-scripts/releasenotes_tox.sh | 5 ++--- .../templates/adjust-interface-mtus.sh.j2 | 4 ++-- .../templates/overcloud-prep-containers.sh.j2 | 4 ++-- .../templates/overcloud-prep-images.sh.j2 | 5 ++++- .../templates/overcloud-create-ssl-cert.sh.j2 | 12 ++++++------ .../templates/major-upgrade-overcloud.sh.j2 | 14 +++++++------- .../toci_vxlan_networking_multinode.sh.j2 | 10 +++++----- roles/validate-ha/templates/workarounds.sh.j2 | 8 ++++++-- .../validate-overcloud-ipmi-connection.sh.j2 | 4 ++-- .../templates/overcloud-validate.sh.j2 | 8 ++++---- test-requirements.txt | 1 + tox.ini | 16 ++++++++++++++++ 12 files changed, 57 insertions(+), 34 deletions(-) diff --git a/ci-scripts/releasenotes_tox.sh b/ci-scripts/releasenotes_tox.sh index 06ee7f9cc..c37cf598e 100755 --- a/ci-scripts/releasenotes_tox.sh +++ b/ci-scripts/releasenotes_tox.sh @@ -11,8 +11,7 @@ BUILD_RESULT=$? UNCOMMITTED_NOTES=$(git status --porcelain | \ awk '$1 == "M" && $2 ~ /releasenotes\/notes/ {print $2}') -if [ "${UNCOMMITTED_NOTES}" ] -then +if [ "${UNCOMMITTED_NOTES}" ]; then cat <> /etc/sysconfig/network-scripts/ifcfg-{{ interface }} + ip link set {{ interface }} mtu {{ mtu }} + echo "MTU={{ mtu }}" >> /etc/sysconfig/network-scripts/ifcfg-{{ interface }} {% endfor %} ## * Modify dnsmasq-ironic.conf diff --git a/roles/overcloud-prep-containers/templates/overcloud-prep-containers.sh.j2 b/roles/overcloud-prep-containers/templates/overcloud-prep-containers.sh.j2 index c622d4bdd..6ea260729 100644 --- a/roles/overcloud-prep-containers/templates/overcloud-prep-containers.sh.j2 +++ b/roles/overcloud-prep-containers/templates/overcloud-prep-containers.sh.j2 @@ -30,8 +30,8 @@ neutron subnet-show $subnet_uuid ## :: if ! [[ -e {{ container_image }} ]]; then - curl -O {{ container_url }} - gunzip -f "{{ container_image }}.gz" + curl -O {{ container_url }} + gunzip -f "{{ container_image }}.gz" fi glance image-list | grep atomic-image || glance image-create --name atomic-image --file {{ container_image }} --disk-format qcow2 --container-format bare diff --git a/roles/overcloud-prep-images/templates/overcloud-prep-images.sh.j2 b/roles/overcloud-prep-images/templates/overcloud-prep-images.sh.j2 index 7acfb19d2..8d55bd6e7 100644 --- a/roles/overcloud-prep-images/templates/overcloud-prep-images.sh.j2 +++ b/roles/overcloud-prep-images/templates/overcloud-prep-images.sh.j2 @@ -28,7 +28,10 @@ openstack overcloud image upload {% if bash_deploy_ramdisk %}--old-deploy-image{ ## * Upload images to glance, this step is specific to nodepool based deployments. ## :: - glance image-create --container-format bare --disk-format qcow2 --name overcloud-full --file overcloud-full.qcow2 + glance image-create --container-format bare \ + --disk-format qcow2 \ + --name overcloud-full \ + --file overcloud-full.qcow2 {% endif %} diff --git a/roles/overcloud-ssl/templates/overcloud-create-ssl-cert.sh.j2 b/roles/overcloud-ssl/templates/overcloud-create-ssl-cert.sh.j2 index 1f80b2ea9..54de9a605 100755 --- a/roles/overcloud-ssl/templates/overcloud-create-ssl-cert.sh.j2 +++ b/roles/overcloud-ssl/templates/overcloud-create-ssl-cert.sh.j2 @@ -32,9 +32,9 @@ sudo update-ca-trust extract {% set _vip = overcloud_public_vip if not overcloud_ipv6|bool else overcloud_public_vip6 %} openssl req -newkey rsa:2048 -days 365 \ - -nodes -keyout {{ working_dir }}/server-key.pem \ - -out {{ working_dir }}/server-req.pem \ - -subj "/C=US/ST=NC/L=Raleigh/O=Red Hat/OU=OOOQ/CN={{_vip}}" + -nodes -keyout {{ working_dir }}/server-key.pem \ + -out {{ working_dir }}/server-req.pem \ + -subj "/C=US/ST=NC/L=Raleigh/O=Red Hat/OU=OOOQ/CN={{_vip}}" ## * Process the server RSA key ## :: @@ -47,8 +47,8 @@ openssl rsa -in {{ working_dir }}/server-key.pem \ ## :: openssl x509 -req -in server-req.pem -days 365 \ - -CA {{ working_dir }}/overcloud-cacert.pem \ - -CAkey {{ working_dir }}/overcloud-ca-privkey.pem \ - -set_serial 01 -out {{ working_dir }}/server-cert.pem + -CA {{ working_dir }}/overcloud-cacert.pem \ + -CAkey {{ working_dir }}/overcloud-ca-privkey.pem \ + -set_serial 01 -out {{ working_dir }}/server-cert.pem ## --stop_docs diff --git a/roles/overcloud-upgrade/templates/major-upgrade-overcloud.sh.j2 b/roles/overcloud-upgrade/templates/major-upgrade-overcloud.sh.j2 index 27a2b9806..ad6191f95 100644 --- a/roles/overcloud-upgrade/templates/major-upgrade-overcloud.sh.j2 +++ b/roles/overcloud-upgrade/templates/major-upgrade-overcloud.sh.j2 @@ -9,13 +9,13 @@ onerror(){ --nested-depth 5 overcloud | grep FAIL | grep 'StructuredDeployment ' | cut -d '|' -f3) do echo -n "heat deployment-show out put for deployment: $failed" >> failed_upgrade.log - echo -n "######################################################" >> failed_upgrade.log - heat deployment-show $failed >> failed_upgrade.log - echo -n "######################################################" >> failed_upgrade.log - echo "puppet standard error for deployment: $failed" >> failed_upgrade.log - echo -n "######################################################" >> failed_upgrade.log - echo -e $(heat deployment-show $failed | jq .output_values.deploy_stderr) >> failed_upgrade.log - echo -n "######################################################" >> failed_upgrade.log + echo -n "######################################################" >> failed_upgrade.log + heat deployment-show $failed >> failed_upgrade.log + echo -n "######################################################" >> failed_upgrade.log + echo "puppet standard error for deployment: $failed" >> failed_upgrade.log + echo -n "######################################################" >> failed_upgrade.log + echo -e $(heat deployment-show $failed | jq .output_values.deploy_stderr) >> failed_upgrade.log + echo -n "######################################################" >> failed_upgrade.log done exit 1 } diff --git a/roles/undercloud-setup/templates/toci_vxlan_networking_multinode.sh.j2 b/roles/undercloud-setup/templates/toci_vxlan_networking_multinode.sh.j2 index dc1c93aef..7f83b18c7 100644 --- a/roles/undercloud-setup/templates/toci_vxlan_networking_multinode.sh.j2 +++ b/roles/undercloud-setup/templates/toci_vxlan_networking_multinode.sh.j2 @@ -15,15 +15,15 @@ while read sub; do ## * Create the expected directories and symlinks ## :: - ssh $SSH_ARGS $sub mkdir -p $WORKSPACE/tripleo - ssh $SSH_ARGS $sub ln -sf $WORKSPACE/tripleo $WORKSPACE/tripleo/new + ssh $SSH_ARGS $sub mkdir -p $WORKSPACE/tripleo + ssh $SSH_ARGS $sub ln -sf $WORKSPACE/tripleo $WORKSPACE/tripleo/new ## * Clone the appropriate repositories in the expected locations ## :: - ssh $SSH_ARGS $sub git clone https://git.openstack.org/openstack-infra/tripleo-ci $WORKSPACE/tripleo/tripleo-ci - ssh $SSH_ARGS $sub git clone https://git.openstack.org/openstack-dev/devstack $WORKSPACE/tripleo/devstack - ssh $SSH_ARGS $sub git clone https://git.openstack.org/openstack-infra/devstack-gate $WORKSPACE/tripleo/devstack-gate + ssh $SSH_ARGS $sub git clone https://git.openstack.org/openstack-infra/tripleo-ci $WORKSPACE/tripleo/tripleo-ci + ssh $SSH_ARGS $sub git clone https://git.openstack.org/openstack-dev/devstack $WORKSPACE/tripleo/devstack + ssh $SSH_ARGS $sub git clone https://git.openstack.org/openstack-infra/devstack-gate $WORKSPACE/tripleo/devstack-gate done < /etc/nodepool/sub_nodes_private diff --git a/roles/validate-ha/templates/workarounds.sh.j2 b/roles/validate-ha/templates/workarounds.sh.j2 index 52b3f6482..444ec2c30 100644 --- a/roles/validate-ha/templates/workarounds.sh.j2 +++ b/roles/validate-ha/templates/workarounds.sh.j2 @@ -10,12 +10,16 @@ CONTROLLER0=$(nova list | grep controller-0 | awk '{print $12}' | cut -f2 -d=) {% if release == 'newton' or release == 'mitaka' %} # Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1348222 -for CONTROLLER in $CONTROLLERS; do $SSH heat-admin@$CONTROLLER sudo pip install redis; done +for CONTROLLER in $CONTROLLERS; do + $SSH heat-admin@$CONTROLLER sudo pip install redis; +done {% endif %} {% if release == 'mitaka' %} # Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1357229 -for CONTROLLER in $CONTROLLERS; do $SSH heat-admin@$CONTROLLER "sudo sed -i -e 's/^After=.*/After=syslog.target network.target/g' /usr/lib/systemd/system/openstack-heat-engine.service"; done +for CONTROLLER in $CONTROLLERS; do + $SSH heat-admin@$CONTROLLER "sudo sed -i -e 's/^After=.*/After=syslog.target network.target/g' /usr/lib/systemd/system/openstack-heat-engine.service"; +done {% endif %} {% if release == 'newton' or release == 'mitaka' %} diff --git a/roles/validate-ipmi/templates/validate-overcloud-ipmi-connection.sh.j2 b/roles/validate-ipmi/templates/validate-overcloud-ipmi-connection.sh.j2 index 53d33df77..9fb3756c1 100644 --- a/roles/validate-ipmi/templates/validate-overcloud-ipmi-connection.sh.j2 +++ b/roles/validate-ipmi/templates/validate-overcloud-ipmi-connection.sh.j2 @@ -31,8 +31,8 @@ git clone "https://github.com/rthallisey/clapper.git" "{{ working_dir }}/clapper export IPMI_VALIDATE="$(python {{ working_dir }}/clapper/instackenv-validator.py -f {{ working_dir }}/instackenv.json)" if [[ $IPMI_VALIDATE != *SUCCESS* ]] ; then - echo "instackenv.json did not validate." - echo $IPMI_VALIDATE + echo "instackenv.json did not validate." + echo $IPMI_VALIDATE fi ### --stop_docs diff --git a/roles/validate-simple/templates/overcloud-validate.sh.j2 b/roles/validate-simple/templates/overcloud-validate.sh.j2 index 7d3013346..cdbd1a2c3 100644 --- a/roles/validate-simple/templates/overcloud-validate.sh.j2 +++ b/roles/validate-simple/templates/overcloud-validate.sh.j2 @@ -12,11 +12,11 @@ set -eux ## * Create cleanup env function for heat ## :: -function cleanup() { +function cleanup { {% if release in ['kilo', 'liberty', 'rhos-7'] %} heat stack-delete {{ validate_stack_name }} {% else %} - openstack stack delete --yes {{ validate_stack_name }} + openstack stack delete --yes {{ validate_stack_name }} {% endif %} if [[ $(tripleo wait_for -w 300 -d 30 -s "Stack not found" -- "heat stack-show {{ validate_stack_name }}") ]]; then echo "openstack stack delete" @@ -25,7 +25,7 @@ function cleanup() { {% if release in ['kilo', 'liberty', 'rhos-7'] %} heat stack-delete {{ validate_stack_name }} {% else %} - openstack stack delete --yes {{ validate_stack_name }} + openstack stack delete --yes {{ validate_stack_name }} {% endif %} fi fi @@ -104,7 +104,7 @@ heat stack-create {{ validate_stack_name }} --template-file {{ working_dir }}/t ### --stop_docs /bin/bash /usr/libexec/openstack-tripleo/wait_for -w 600 --delay 30 \ - --success-match {{ validate_success_status }} -- heat stack-show {{ validate_stack_name }} + --success-match {{ validate_success_status }} -- heat stack-show {{ validate_stack_name }} sleep 30 ### --start_docs diff --git a/test-requirements.txt b/test-requirements.txt index c6c009871..9c4604dea 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,6 @@ hacking<0.11,>=0.10 +bashate>=0.2 # Apache-2.0 ansible-lint sphinx!=1.3b1,<1.4,>=1.2.1 # BSD oslosphinx>=4.7.0 # Apache-2.0 diff --git a/tox.ini b/tox.ini index 070d5af72..f0fe9afc8 100644 --- a/tox.ini +++ b/tox.ini @@ -21,6 +21,21 @@ commands = bindep test [testenv:docs] commands = python setup.py build_sphinx +[testenv:bashate] +commands = +# Run bashate check for all bash scripts +# Ignores the following rules: +# E006: Line longer than 79 columns (as many scripts use jinja +# templating, this is very difficult) +# E040: Syntax error determined using `bash -n` (as many scripts +# use jinja templating, this will often fail and the syntax +# error will be discovered in execution anyway) + bash -c "grep --recursive --binary-files=without-match \ + --files-with-match '^.!.*\(ba\)\?sh$' \ + --exclude-dir .tox \ + --exclude-dir .git \ + {toxinidir} | xargs bashate --error . --verbose --ignore=E006,E040" + [testenv:pep8] commands = # Run hacking/flake8 check for all python files @@ -46,6 +61,7 @@ commands = bash -c ci-scripts/releasenotes_tox.sh [testenv:linters] commands = + {[testenv:bashate]commands} {[testenv:pep8]commands} {[testenv:ansible-lint]commands}