fix apex integration 61/33561/2
authorzhihui wu <wu.zhihui1@zte.com.cn>
Thu, 20 Apr 2017 01:57:06 +0000 (09:57 +0800)
committerzhihui wu <wu.zhihui1@zte.com.cn>
Thu, 20 Apr 2017 03:10:16 +0000 (11:10 +0800)
I didnot find a right way to source Openstack rc file via ansible
module python api. Without openstack rc fiel, openstack cli command
can not be executed. So I move this part to ansible playbook.

Change-Id: I44439560f8ffa1b41890c4e94c9657ab2cc43241
Signed-off-by: zhihui wu <wu.zhihui1@zte.com.cn>
qtip/ansible_library/modules/apex_generate_inventory.py [moved from qtip/ansible_library/modules/apex.py with 72% similarity]
tests/integration/setup.yaml
tests/unit/ansible_library/modules/apex_generate_inventory_test.py [moved from tests/unit/ansible_library/modules/apex_test.py with 89% similarity]

@@ -10,7 +10,6 @@
 ##############################################################################
 
 from collections import defaultdict
-import json
 import re
 
 from ansible.module_utils.basic import AnsibleModule
@@ -70,10 +69,7 @@ EXAMPLES = '''
 
 
 def generate_inventory(baremetal_info, server_info):
-    """Generate ansible inventory from node list in json format
-
-    Modified from https://github.com/martineg/ansible-apex-inventory/blob/master/apex.py
-    """
+    """Generate ansible inventory in json format"""
 
     hosts = defaultdict(list)
     hosts_meta = {}
@@ -95,37 +91,17 @@ def generate_inventory(baremetal_info, server_info):
 
 
 def main():
-    module = AnsibleModule(argument_spec=dict())
-
-    (rc, out, err) = module.run_command(['source ~/stackrc'])
-
-    if rc is not None and rc != 0:
-        return module.fail_json(msg=err)
-
-    cmd = [module.get_bin_path('openstack', True),
-           'baremetal',
-           'list',
-           '--fields instance_uuid properties provision_state',
-           '--format json']
-    (rc, out, err) = module.run_command(cmd)
-
-    if rc is not None and rc != 0:
-        return module.fail_json(msg=err)
-
-    baremetal_info = json.loads(out)
-
-    cmd = [module.get_bin_path('openstack', True),
-           'server',
-           'list',
-           '--format json']
-    (rc, out, err) = module.run_command(cmd)
-
-    if rc is not None and rc != 0:
-        return module.fail_json(msg=err)
+    module = AnsibleModule(
+        argument_spec=dict(
+            baremetal_info=dict(type='list'),
+            server_info=dict(type='list')
+        )
+    )
 
-    server_info = json.loads(out)
+    baremetal_info = module.params['baremetal_info']
+    server_info = module.params['server_info']
 
-    module.exit_json(changed=False,
+    module.exit_json(changed=True,
                      ansible_facts=generate_inventory(baremetal_info, server_info))
 
 
index 8d055c2..fed5e9d 100644 (file)
     template: src={{ qtip_resources }}/template/ssh.cfg.j2 dest=./ssh.cfg
     delegate_to: localhost
 
+- hosts: apex-undercloud
+  gather_facts: no
+
+  tasks:
+  - name: collect overcloud baremetal info
+    shell: . /root/stackrc && openstack baremetal list --fields instance_uuid properties provision_state --format json
+    register: baremetal_info
+  - name: collect overcloud server info
+    shell: . /root/stackrc && openstack server list --format json
+    register: server_info
+  - name: generate inventory
+    apex_generate_inventory:
+      baremetal_info: "{{ baremetal_info.stdout | from_json }}"
+      server_info: "{{ server_info.stdout | from_json }}"
+  - name: update inventory file
+    template: src={{ qtip_resources }}/template/hosts.j2 dest=./hosts
+    delegate_to: localhost
+  - name: update ssh.cfg file
+    template: src={{ qtip_resources }}/template/ssh.cfg.j2 dest=./ssh.cfg
+    delegate_to: localhost
+
 # Initialize testapi database
 - hosts: localhost
   tasks:
@@ -10,7 +10,7 @@
 import json
 import os
 
-from qtip.ansible_library.modules import apex
+from qtip.ansible_library.modules import apex_generate_inventory
 
 
 def test_generate_inventory(data_root):
@@ -18,7 +18,7 @@ def test_generate_inventory(data_root):
                                                  'apex', 'baremetal_info.json')))
     server_info = json.load(open(os.path.join(data_root, 'external',
                                               'apex', 'server_info.json')))
-    inventory = apex.generate_inventory(baremetal_info, server_info)
+    inventory = apex_generate_inventory.generate_inventory(baremetal_info, server_info)
     assert dict(inventory['hosts']) == {
         u'compute': [u'192.0.2.5', u'192.0.2.6'],
         u'control': [u'192.0.2.7', u'192.0.2.8', u'192.0.2.9']}