From 76a3d876ee35d939ac3b5c10847b1ee90dfda867 Mon Sep 17 00:00:00 2001 From: Alexey Sheplyakov Date: Fri, 29 Jul 2016 13:30:21 +0300 Subject: [PATCH] ceph-mon: fix the loop in `secure the cluster' task Deployment fails when the ``secure_cluster`` is false: TASK [ceph-mon : secure the cluster] ******************************************* fatal: [saceph-mon.vm.ceph.asheplyakov]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'stdout_lines'"} fatal: [saceph-mon2.vm.ceph.asheplyakov]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'stdout_lines'"} fatal: [saceph-mon3.vm.ceph.asheplyakov]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'stdout_lines'"} A conditional include evaluates all included tasks with the (additional) conditional applied to every task [1]. Thus all tasks from `secure_cluster.yml' are always evaluated (with an additional 'when: secure_cluster' condition). The `secure the cluster' task iterates over ``ceph_pools.stdout_lines`` even if ``secure_cluster`` is false: in loops ansible applies conditional to every item (by design) [2]. However the `collect all the pools' task is skipped if the very same condition evaluates to false, which leaves the ``ceph_pools`` undefined, so the `secure the cluster' task fails: Provide the default (empty) list to avoid the problem. [1] http://docs.ansible.com/ansible/playbooks_conditionals.html#applying-when-to-roles-and-includes [2] http://docs.ansible.com/ansible/playbooks_conditionals.html#loops-and-conditionals Closes: #913 Signed-off-by: Alexey Sheplyakov --- roles/ceph-mon/tasks/secure_cluster.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/ceph-mon/tasks/secure_cluster.yml b/roles/ceph-mon/tasks/secure_cluster.yml index 5ee48ca5e..9c67becea 100644 --- a/roles/ceph-mon/tasks/secure_cluster.yml +++ b/roles/ceph-mon/tasks/secure_cluster.yml @@ -7,6 +7,6 @@ - name: secure the cluster command: ceph --cluster {{ cluster }} osd pool set {{ item[0] }} {{ item[1] }} true with_nested: - - ceph_pools.stdout_lines + - "{{ ceph_pools.stdout_lines|default([]) }}" - secure_cluster_flags when: "{{ ceph_version | version_compare('0.94.0', '>=') }}"