Bug 1635303

Summary: ceph.conf generation fails when mixing monitor_address / monitor_address_block / monitor_interface
Product: [Red Hat Storage] Red Hat Ceph Storage Reporter: Guillaume Abrioux <gabrioux>
Component: Ceph-AnsibleAssignee: Guillaume Abrioux <gabrioux>
Status: CLOSED ERRATA QA Contact: subhash <vpoliset>
Severity: medium Docs Contact: Bara Ancincova <bancinco>
Priority: medium    
Version: 3.1CC: aschoen, ceph-eng-bugs, gabrioux, gmeno, kdreyer, nthomas, rperiyas, sankarshan, shan, tchandra
Target Milestone: z1   
Target Release: 3.1   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: RHEL: ceph-ansible-3.1.8-1.el7cp Ubuntu: ceph-ansible_3.1.8-2redhat1 Doc Type: Bug Fix
Doc Text:
.Ansible handles using multiple ways to set Monitor addresses as expected Previously the `ceph.conf.j2` template used an incorrect path to detect if the `monitor_address_block` setting was defined in the Ansible playbook. As a consequence, when using multiple ways to set a Monitor address by using the `monitor_address`, `monitor_address_block`, or `monitor_interface` in the inventory file, Ansible failed to generate the Ceph configuration file and returned the following error: ---- 'ansible.vars.hostvars.HostVarsVars object' has no attribute u'ansible_interface' ---- With this update, the template now uses a correct path to detect the value of `monitor_address_block`, and Ansible handles using multiple ways to set Monitor addresses as expected.
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-11-09 01:00:57 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1584264    

Description Guillaume Abrioux 2018-10-02 14:49:30 UTC
Description of problem:

Let's assume we have the inventory:

[mons]
ceph-mon0 monitor_address=192.168.1.10
ceph-mon1 monitor_interface=eth1
ceph-mon2 monitor_address_block=192.168.1.0/24


the ceph.conf generation task will end up with:


fatal: [ceph-mon0]: FAILED! => {}

MSG:

'ansible.vars.hostvars.HostVarsVars object' has no attribute u'ansible_interface'



the reason is that it will assume monitor_address_block isn't defined even on
ceph-mon2 because looking for monitor_address_block instead of
hostvars[host]['monitor_address_block'], therefore it enters in the condition as default value:


    {%- else -%}
      {% set interface = 'ansible_' + (monitor_interface | replace('-', '_')) %}
      {% if ip_version == 'ipv4' -%}
        {{ hostvars[host][interface][ip_version]['address'] }}
      {%- elif ip_version == 'ipv6' -%}
        [{{ hostvars[host][interface][ip_version][0]['address'] }}]
      {%- endif %}
    {%- endif %}


monitor_interface is set with default value 'interface' so the interface
variable is built with 'ansible_' + 'interface'. It makes ansible throwing a
confusing message about 'ansible_interface'.


Steps to Reproduce:
1. Mix multiple monitor_address / monitor_address_block / monitor_interface on different mons in your inventory
2. Launch the deployment

Actual results:

ceph.conf generation task fails


Expected results:

ceph.conf is properly generated on all nodes.

Comment 4 Sébastien Han 2018-10-03 14:17:14 UTC
Present in https://github.com/ceph/ceph-ansible/releases/tag/v3.1.8

Comment 15 errata-xmlrpc 2018-11-09 01:00:57 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2018:3530