Overcloud deploy failing due to "Invalid input for dns_nameservers" when passing overcloud_dns_servers parameter
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
tripleo |
Invalid
|
Medium
|
Jose Luis Franco |
Bug Description
Description
===========
After this patch got merged https:/
The content of the parameters is as follows:
overcloud_
After running quickstart.sh passing also the parameter, we get the following error:
Monday 11 December 2017 07:17:22 -0500 (0:00:18.130) 1:30:42.002 *******
fatal: [undercloud]: FAILED! => {"changed": true, "cmd": "set -o pipefail && /home/stack/
If we go to check the script content, we can see that the whole IP has been split per character and passed as a --dns-nameserver option:
## * Set the DNS server in the control plane network
## ::
CTLPLANE_
neutron subnet-update $CTLPLANE_SUBNET \
Steps to reproduce
==================
git clone https:/
chmod u+x ./tripleo-
printf "\n\nSee:
bash ./tripleo-
export VIRTHOST=127.0.0.2
export CONFIG=
cat > $CONFIG << EOF
# undercloud_
# control_memory: 8192
# compute_memory: 6120
# undercloud_memory: 10240
# undercloud_vcpu: 4
# undercloud_workers: 3
# default_vcpu: 1
custom_nameserver: '10.16.36.29'
undercloud_
overcloud_
# node_count: 4
# overcloud_nodes:
# - name: control_0
# flavor: control
# virtualbmc_port: 6230
# - name: control_1
# flavor: control
# virtualbmc_port: 6231
# - name: control_2
# flavor: control
# virtualbmc_port: 6232
# - name: compute_0
# flavor: compute
# virtualbmc_port: 6233
# topology: >-
# --control-scale 3
# --compute-scale 1
extra_args: >-
--libvirt-type qemu
--ntp-server pool.ntp.org
# -e /usr/share/
run_tempest: false
EOF
bash ./tripleo-
-e @$CONFIG \
Changed in tripleo: | |
milestone: | none → queens-3 |
status: | New → Triaged |
importance: | Undecided → Medium |
tags: | added: quickstart |
Testing it locally in a python virtual environment I get the same result:
>>> tmpl = ''' SUBNET= $(openstack subnet show ctlplane-subnet -f value -c id) dns_servers %} --dns-nameserver "{{ nameserver }}" {% endfor %}''' render( {'overcloud_ dns_servers' : '10.16.36.29'})
... CTLPLANE_
... neutron subnet-update $CTLPLANE_SUBNET \
... {% for nameserver in overcloud_
>>> from jinja2 import Template
>>> template = Template(tmpl)
>>> print template.
CTLPLANE_ SUBNET= $(openstack subnet show ctlplane-subnet -f value -c id)
neutron subnet-update $CTLPLANE_SUBNET --dns-nameserver "1" --dns-nameserver "0" --dns-nameserver "." --dns-nameserver "1" --dns-nameserver "6" --dns-nameserver "." --dns-nameserver "3" --dns-nameserver "6" --dns-nameserver "." --dns-nameserver "2" --dns-nameserver "9"
In the documentation is stated that the "overcloud_ dns_servers" is a list, but it can easily happen that the user will add the dns server as a single string. So either we warn of the error, or we protect the code by cheking if the input is iterable and it's not string, in any other case add only one --dns-nameserver parameter:
>>> tmpl = ''' SUBNET= $(openstack subnet show ctlplane-subnet -f value -c id) dns_servers is iterable and overcloud_ dns_servers is not string %}{% for nameserver in overcloud_ dns_servers %} --dns-nameserver "{{ nameserver|e }}" {% endfor %}{% else %} --dns-nameserver "{{ overcloud_ dns_servers }}" {% endif %}''' render( {'overcloud_ dns_servers' : "10.16.36.29"})
... CTLPLANE_
... {% if overcloud_
>>>
>>> template = Template(tmpl)
>>> print template.
CTLPLANE_ SUBNET= $(openstack subnet show ctlplane-subnet -f value -c id)
--dns- nameserver "10.16.36.29" render( {'overcloud_ dns_servers' : ["10.16.36.29", "10.15.14.34"]})
>>> print template.
CTLPLANE_ SUBNET= $(openstack subnet show ctlplane-subnet -f value -c id)
--dns- nameserver "10.16.36.29" --dns-nameserver "10.15.14.34"