ansible  2.9.27
About: Ansible is an IT Configuration Management, Deployment \
About: Ansible (2.x) is an IT Configuration Management, Deployment & Orchestration tool.
ansible download page.
  Fossies Dox: ansible-2.9.27.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

aci_tenant_span_src_group.py
Go to the documentation of this file.
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
6from __future__ import absolute_import, division, print_function
7__metaclass__ = type
8
9ANSIBLE_METADATA = {'metadata_version': '1.1',
10 'status': ['preview'],
11 'supported_by': 'certified'}
12
13DOCUMENTATION = r'''
14---
15module: aci_tenant_span_src_group
16short_description: Manage SPAN source groups (span:SrcGrp)
17description:
18- Manage SPAN source groups on Cisco ACI fabrics.
19version_added: '2.4'
20options:
21 admin_state:
22 description:
23 - Enable or disable the span sources.
24 - The APIC defaults to C(yes) when unset during creation.
25 type: bool
26 description:
27 description:
28 - The description for Span source group.
29 type: str
30 aliases: [ descr ]
31 dst_group:
32 description:
33 - The Span destination group to associate with the source group.
34 type: str
35 src_group:
36 description:
37 - The name of the Span source group.
38 type: str
39 aliases: [ name ]
40 state:
41 description:
42 - Use C(present) or C(absent) for adding or removing.
43 - Use C(query) for listing an object or multiple objects.
44 type: str
45 choices: [ absent, present, query ]
46 default: present
47 tenant:
48 description:
49 - The name of the Tenant.
50 type: str
51 aliases: [ tenant_name ]
52extends_documentation_fragment: aci
53notes:
54- The C(tenant) used must exist before using this module in your playbook.
55 The M(aci_tenant) module can be used for this.
56seealso:
57- module: aci_tenant
58- name: APIC Management Information Model reference
59 description: More information about the internal APIC class B(span:SrcGrp).
60 link: https://developer.cisco.com/docs/apic-mim-ref/
61author:
62- Jacob McGill (@jmcgill298)
63'''
64
65EXAMPLES = r'''
66- aci_tenant_span_src_group:
67 host: apic
68 username: admin
69 password: SomeSecretPassword
70 tenant: production
71 src_group: "{{ src_group }}"
72 dst_group: "{{ dst_group }}"
73 admin_state: "{{ admin_state }}"
74 description: "{{ description }}"
75 delegate_to: localhost
76'''
77
78RETURN = r'''
79current:
80 description: The existing configuration from the APIC after the module has finished
81 returned: success
82 type: list
83 sample:
84 [
85 {
86 "fvTenant": {
87 "attributes": {
88 "descr": "Production environment",
89 "dn": "uni/tn-production",
90 "name": "production",
91 "nameAlias": "",
92 "ownerKey": "",
93 "ownerTag": ""
94 }
95 }
96 }
97 ]
98error:
99 description: The error information as returned from the APIC
100 returned: failure
101 type: dict
102 sample:
103 {
104 "code": "122",
105 "text": "unknown managed object class foo"
106 }
107raw:
108 description: The raw output returned by the APIC REST API (xml or json)
109 returned: parse error
110 type: str
111 sample: '<?xml version="1.0" encoding="UTF-8"?><imdata totalCount="1"><error code="122" text="unknown managed object class foo"/></imdata>'
112sent:
113 description: The actual/minimal configuration pushed to the APIC
114 returned: info
115 type: list
116 sample:
117 {
118 "fvTenant": {
119 "attributes": {
120 "descr": "Production environment"
121 }
122 }
123 }
124previous:
125 description: The original configuration from the APIC before the module has started
126 returned: info
127 type: list
128 sample:
129 [
130 {
131 "fvTenant": {
132 "attributes": {
133 "descr": "Production",
134 "dn": "uni/tn-production",
135 "name": "production",
136 "nameAlias": "",
137 "ownerKey": "",
138 "ownerTag": ""
139 }
140 }
141 }
142 ]
143proposed:
144 description: The assembled configuration from the user-provided parameters
145 returned: info
146 type: dict
147 sample:
148 {
149 "fvTenant": {
150 "attributes": {
151 "descr": "Production environment",
152 "name": "production"
153 }
154 }
155 }
156filter_string:
157 description: The filter string used for the request
158 returned: failure or debug
159 type: str
160 sample: ?rsp-prop-include=config-only
161method:
162 description: The HTTP method used for the request to the APIC
163 returned: failure or debug
164 type: str
165 sample: POST
166response:
167 description: The HTTP response from the APIC
168 returned: failure or debug
169 type: str
170 sample: OK (30 bytes)
171status:
172 description: The HTTP status from the APIC
173 returned: failure or debug
174 type: int
175 sample: 200
176url:
177 description: The HTTP url used for the request to the APIC
178 returned: failure or debug
179 type: str
180 sample: https://10.11.12.13/api/mo/uni/tn-production.json
181'''
182
183from ansible.module_utils.basic import AnsibleModule
184from ansible.module_utils.network.aci.aci import ACIModule, aci_argument_spec
185
186
187def main():
188 argument_spec = aci_argument_spec()
189 argument_spec.update(
190 tenant=dict(type='str', aliases=['tenant_name']), # Not required for querying all objects
191 src_group=dict(type='str', aliases=['name']), # Not required for querying all objects
192 admin_state=dict(type='bool'),
193 description=dict(type='str', aliases=['descr']),
194 dst_group=dict(type='str'),
195 state=dict(type='str', default='present', choices=['absent', 'present', 'query']),
196 )
197
198 module = AnsibleModule(
199 argument_spec=argument_spec,
200 supports_check_mode=True,
201 required_if=[
202 ['state', 'absent', ['src_group', 'tenant']],
203 ['state', 'present', ['src_group', 'tenant']],
204 ],
205 )
206
207 aci = ACIModule(module)
208
209 admin_state = aci.boolean(module.params['admin_state'], 'enabled', 'disabled')
210 description = module.params['description']
211 dst_group = module.params['dst_group']
212 src_group = module.params['src_group']
213 state = module.params['state']
214 tenant = module.params['tenant']
215
216 aci.construct_url(
217 root_class=dict(
218 aci_class='fvTenant',
219 aci_rn='tn-{0}'.format(tenant),
220 module_object=tenant,
221 target_filter={'name': tenant},
222 ),
223 subclass_1=dict(
224 aci_class='spanSrcGrp',
225 aci_rn='srcgrp-{0}'.format(src_group),
226 module_object=src_group,
227 target_filter={'name': src_group},
228 ),
229 child_classes=['spanSpanLbl'],
230 )
231
232 aci.get_existing()
233
234 if state == 'present':
235 aci.payload(
236 aci_class='spanSrcGrp',
237 class_config=dict(
238 adminSt=admin_state,
239 descr=description,
240 name=src_group,
241 ),
242 child_configs=[{'spanSpanLbl': {'attributes': {'name': dst_group}}}],
243 )
244
245 aci.get_diff(aci_class='spanSrcGrp')
246
247 aci.post_config()
248
249 elif state == 'absent':
250 aci.delete_config()
251
252 aci.exit_json()
253
254
255if __name__ == "__main__":
256 main()