From 86c3f149726b58951e85f9bd6e324b032430b5ae Mon Sep 17 00:00:00 2001
From: Dag Wieers <dag@wieers.com>
Date: Mon, 28 Jan 2019 12:55:29 +0100
Subject: [PATCH] mso_st_deploy: Deploy a schema template (#51379)

This new module deploys a schema template to sites.
---
 .../network/aci/mso_schema_template_deploy.py | 116 ++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 lib/ansible/modules/network/aci/mso_schema_template_deploy.py

diff --git a/lib/ansible/modules/network/aci/mso_schema_template_deploy.py b/lib/ansible/modules/network/aci/mso_schema_template_deploy.py
new file mode 100644
index 00000000000..0058fe2aee1
--- /dev/null
+++ b/lib/ansible/modules/network/aci/mso_schema_template_deploy.py
@@ -0,0 +1,116 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Copyright: (c) 2018, Dag Wieers (@dagwieers) <dag@wieers.com>
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+ANSIBLE_METADATA = {'metadata_version': '1.1',
+                    'status': ['preview'],
+                    'supported_by': 'community'}
+
+DOCUMENTATION = r'''
+---
+module: mso_schema_template_deploy
+short_description: Deploy schema templates to sites
+description:
+- Deploy schema templates to sites.
+author:
+- Dag Wieers (@dagwieers)
+version_added: '2.8'
+options:
+  schema:
+    description:
+    - The name of the schema.
+    type: str
+    required: yes
+  template:
+    description:
+    - The name of the template.
+    type: str
+    aliases: [ name ]
+  state:
+    description:
+    - Use C(deploy) to deploy schema template.
+    - Use C(status) to get deployment status.
+    type: str
+    choices: [ deploy, status ]
+    default: deploy
+seealso:
+- module: mso_schema_site
+- module: mso_schema_template
+extends_documentation_fragment: mso
+'''
+
+EXAMPLES = r'''
+- name: Deploy a schema template
+  mso_schema_template:
+    host: mso_host
+    username: admin
+    password: SomeSecretPassword
+    schema: Schema 1
+    template: Template 1
+    state: deploy
+  delegate_to: localhost
+
+- name: Get deployment status
+  mso_schema:
+    host: mso_host
+    username: admin
+    password: SomeSecretPassword
+    schema: Schema 1
+    template: Template 1
+    state: status
+  delegate_to: localhost
+  register: status_result
+'''
+
+RETURN = r'''
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.network.aci.mso import MSOModule, mso_argument_spec
+
+
+def main():
+    argument_spec = mso_argument_spec()
+    argument_spec.update(
+        schema=dict(type='str', required=True),
+        template=dict(type='str', required=True, aliases=['name']),
+        state=dict(type='str', default='deploy', choices=['deploy', 'status']),
+    )
+
+    module = AnsibleModule(
+        argument_spec=argument_spec,
+        supports_check_mode=True,
+    )
+
+    schema = module.params['schema']
+    template = module.params['template']
+    state = module.params['state']
+
+    mso = MSOModule(module)
+
+    # Get schema
+    schema_id = mso.lookup_schema(schema)
+
+    payload = dict(
+        schemaId=schema_id,
+        templateName=template,
+    )
+
+    if state == 'deploy':
+        path = 'execute/schema/{0}/template/{1}'.format(schema_id, template)
+    elif state == 'status':
+        path = 'status/schema/{0}/template/{1}'.format(schema_id, template)
+
+    if not module.check_mode:
+        status = mso.request(path, method='GET', data=payload)
+
+    mso.exit_json(**status)
+
+
+if __name__ == "__main__":
+    main()