From 3e37e4108c95100a7b7944e011f2a2cba11ffa4e Mon Sep 17 00:00:00 2001 From: Taseer Ahmed Date: Mon, 16 Oct 2017 14:47:28 +0500 Subject: Add support for Mirantis Cloud Platform. JIRA: QTIP-261 Change-Id: Ied9c3d91b25bc8dad7deb0cf30f83cd2b7855a92 Signed-off-by: Taseer Ahmed --- qtip/ansible_library/modules/mcp.py | 105 +++++++++++++++++++++ qtip/cli/commands/cmd_project.py | 2 +- .../ansible_roles/qtip-generator/defaults/main.yml | 1 + .../files/compute/group_vars/all.yml | 1 + .../ansible_roles/qtip/tasks/gather-facts-mcp.yml | 14 +++ 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 qtip/ansible_library/modules/mcp.py create mode 100644 resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml diff --git a/qtip/ansible_library/modules/mcp.py b/qtip/ansible_library/modules/mcp.py new file mode 100644 index 00000000..21be7bcc --- /dev/null +++ b/qtip/ansible_library/modules/mcp.py @@ -0,0 +1,105 @@ +#!/usr/bin/python + +############################################################### +# Copyright (c) 2017 ZTE Corporation and others +# taseer94@gmail.com +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import json +from collections import defaultdict + +from ansible.module_utils.basic import AnsibleModule + +ANSIBLE_METADATA = {'metadata_version': '1.0', + 'status': ['preview'], + 'supported_by': 'community'} + +DOCUMENTATION = ''' +--- +module: mcp +short_description: collecting facts from mcp environments +description: + - Use this module to create a dynamic inventory from salt master (mcp). +version_added: "1.0" +author: "Taseer Ahmed (@Taseer)" +options: +notes: +requirements: + - Host 'salt-master' is in ~/.ssh/config +''' + +RETURN = ''' +ansible_facts: + description: facts collected for ansible + returned: success + type: dictionary + contains: + hosts: + description: host grouped by hostname, cluster, role and manufacture + type: dict + hosts_meta: + description: hosts meta data indexed by hostname + type: dict +''' + +EXAMPLES = ''' +--- +- hosts: salt-master + tasks: + - name: collect facts of mcp hosts + mcp: + - debug: var=hostvars + - name: add compute node to ansible inventory + add_host: + name: "{{ hosts_meta[item]['ip'] }}" + groups: mcp-compute + ansible_user: root + ansible_ssh_common_args: '-o StrictHostKeyChecking=No -o ProxyJump=salt-master' + with_items: "{{ hosts.compute }}" +- hosts: mcp-compute + tasks: + - name: check ssh connection + ping: +''' + + +def generate_inventory(nodes): + """Generate ansible inventory from node list in json format""" + hosts = defaultdict(list) + hosts_meta = {} + node_meta = {} + + for key, value in nodes.iteritems(): + if isinstance(value, dict): + for k, v in value.iteritems(): + if k == "fqdn_ip4": + node_meta['ansible_ssh_host'] = v[0] + node_meta['ansible_user'] = 'root' + hosts_meta[key] = node_meta + hosts['compute-nodes'].append(node_meta['ansible_ssh_host']) + + return {'hosts': hosts, 'hosts_meta': hosts_meta} + + +def main(): + module = AnsibleModule(argument_spec=dict()) + + cmd = [module.get_bin_path('salt', True), '-C', '-t 5', '--static', '--out=json', 'cmp*', 'grains.item', + 'fqdn_ip4', 'host'] + (rc, out, err) = module.run_command(cmd) + + if rc is not None and rc != 0: + return module.fail_json(msg=err) + + nodes = json.loads(out) + + module.exit_json(changed=False, ansible_facts=generate_inventory(nodes)) + + +if __name__ == '__main__': + main() diff --git a/qtip/cli/commands/cmd_project.py b/qtip/cli/commands/cmd_project.py index 325594ad..2836fa69 100644 --- a/qtip/cli/commands/cmd_project.py +++ b/qtip/cli/commands/cmd_project.py @@ -50,7 +50,7 @@ def cli(): default='opnfv-pod', help='Name of pod under test') @click.option('--installer-type', - type=click.Choice(['apex', 'fuel', 'manual']), + type=click.Choice(['apex', 'fuel', 'manual', 'mcp']), prompt='OPNFV Installer Type', default='manual', help='OPNFV installer') diff --git a/resources/ansible_roles/qtip-generator/defaults/main.yml b/resources/ansible_roles/qtip-generator/defaults/main.yml index 527da6f7..f6714b8d 100644 --- a/resources/ansible_roles/qtip-generator/defaults/main.yml +++ b/resources/ansible_roles/qtip-generator/defaults/main.yml @@ -14,6 +14,7 @@ installer_group: manual: dummy-group fuel: fuel-masters apex: apex-underclouds + mcp: salt-masters project_name: 'qtip-project' project_template: 'compute' diff --git a/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml b/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml index 8b90b498..efb2bdb7 100644 --- a/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml +++ b/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml @@ -20,3 +20,4 @@ installer_group: manual: dummy-group fuel: fuel-masters apex: apex-underclouds + mcp: salt-master diff --git a/resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml b/resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml new file mode 100644 index 00000000..5aed9e75 --- /dev/null +++ b/resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml @@ -0,0 +1,14 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# taseer94@gmail.com +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +--- + +- name: gathering facts for mcp slave nodes + mcp: \ No newline at end of file -- cgit 1.2.3-korg