Various small fixes to MSC modules and tests (#48417)

pull/47027/head^2
Dag Wieers 6 years ago committed by GitHub
parent 475844d1ae
commit 24d7b4a660
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -186,9 +186,9 @@ class MSCModule(object):
except: except:
payload = json.loads(info['body']) payload = json.loads(info['body'])
if 'code' in payload: if 'code' in payload:
self.fail_json(msg='MSC Error {code}: {message} [{info}]'.format(**payload), payload=data) self.fail_json(msg='MSC Error {code}: {message}'.format(**payload), data=data, info=info, payload=payload)
else: else:
self.fail_json(msg='MSC Error:'.format(**payload), info=info, output=output) self.fail_json(msg='MSC Error:'.format(**payload), data=data, info=info, payload=payload)
return {} return {}
@ -213,18 +213,20 @@ class MSCModule(object):
self.fail_json(msg='More than one object matches unique filter: {0}'.format(kwargs)) self.fail_json(msg='More than one object matches unique filter: {0}'.format(kwargs))
return objs[0] return objs[0]
def sanitize(self, updates, collate=False): def sanitize(self, updates, collate=False, required_keys=None):
if required_keys is None:
required_keys = []
self.proposed = deepcopy(self.existing) self.proposed = deepcopy(self.existing)
self.sent = deepcopy(self.existing) self.sent = deepcopy(self.existing)
# Clean up self.sent # Clean up self.sent
for key in updates: for key in updates:
# Always retain 'id' # Always retain 'id'
if key in ('id'): if key in required_keys:
pass pass
# Remove unspecified values # Remove unspecified values
elif updates[key] is None: elif not collate and updates[key] is None:
if key in self.existing: if key in self.existing:
del(self.sent[key]) del(self.sent[key])
continue continue
@ -265,8 +267,8 @@ class MSCModule(object):
if self.module._diff: if self.module._diff:
self.result['diff'] = dict( self.result['diff'] = dict(
before=self.existing, before=self.previous,
after=self.sent, after=self.existing,
) )
self.result.update(**kwargs) self.result.update(**kwargs)

@ -29,9 +29,6 @@ options:
- The name of the label. - The name of the label.
required: yes required: yes
aliases: [ label_name, name ] aliases: [ label_name, name ]
display_name:
description:
- The name of the label displayed in the web UI.
type: type:
description: description:
- The type of the label. - The type of the label.
@ -99,7 +96,6 @@ def main():
argument_spec.update( argument_spec.update(
label=dict(type='str', required=False, aliases=['name', 'label_name']), label=dict(type='str', required=False, aliases=['name', 'label_name']),
label_id=dict(type='str', required=False), label_id=dict(type='str', required=False),
display_name=dict(type='str'),
type=dict(type='str', default='site', choices=['site']), type=dict(type='str', default='site', choices=['site']),
state=dict(type='str', default='present', choices=['absent', 'present', 'query']), state=dict(type='str', default='present', choices=['absent', 'present', 'query']),
) )
@ -116,7 +112,6 @@ def main():
label = module.params['label'] label = module.params['label']
label_id = module.params['label_id'] label_id = module.params['label_id']
label_type = module.params['type'] label_type = module.params['type']
display_name = module.params['display_name']
state = module.params['state'] state = module.params['state']
msc = MSCModule(module) msc = MSCModule(module)
@ -158,7 +153,7 @@ def main():
msc.sanitize(dict( msc.sanitize(dict(
id=label_id, id=label_id,
displayName=display_name, displayName=label,
type=label_type, type=label_type,
), collate=True) ), collate=True)

@ -23,20 +23,28 @@ options:
apic_password: apic_password:
description: description:
- The password for the APICs. - The password for the APICs.
type: str
required: yes
apic_site_id: apic_site_id:
description: description:
- The site ID of the APICs. - The site ID of the APICs.
type: str
required: yes
apic_username: apic_username:
description: description:
- The username for the APICs. - The username for the APICs.
type: str
required: yes
default: admin default: admin
site_id: site_id:
description: description:
- The ID of the site. - The ID of the site.
type: str
required: yes required: yes
site: site:
description: description:
- The name of the site. - The name of the site.
type: str
required: yes required: yes
aliases: [ name, site_name ] aliases: [ name, site_name ]
labels: labels:
@ -51,6 +59,7 @@ options:
description: description:
- Use C(present) or C(absent) for adding or removing. - Use C(present) or C(absent) for adding or removing.
- Use C(query) for listing an object or multiple objects. - Use C(query) for listing an object or multiple objects.
type: str
choices: [ absent, present, query ] choices: [ absent, present, query ]
default: present default: present
extends_documentation_fragment: msc extends_documentation_fragment: msc
@ -122,7 +131,7 @@ def main():
supports_check_mode=True, supports_check_mode=True,
required_if=[ required_if=[
['state', 'absent', ['site']], ['state', 'absent', ['site']],
['state', 'present', ['site']], ['state', 'present', ['apic_site_id', 'site']],
], ],
) )
@ -178,7 +187,7 @@ def main():
urls=urls, urls=urls,
username=apic_username, username=apic_username,
password=apic_password, password=apic_password,
)) ), collate=True)
if msc.existing: if msc.existing:
if not issubset(msc.sent, msc.existing): if not issubset(msc.sent, msc.existing):

@ -23,22 +23,28 @@ options:
tenant_id: tenant_id:
description: description:
- The ID of the tenant. - The ID of the tenant.
type: str
required: yes required: yes
tenant: tenant:
description: description:
- The name of the tenant. - The name of the tenant.
type: str
required: yes required: yes
aliases: [ name, tenant_name ] aliases: [ name, tenant_name ]
display_name: display_name:
description: description:
- The name of the tenant to be displayed in the web UI. - The name of the tenant to be displayed in the web UI.
type: str
required: yes
description: description:
description: description:
- The description for this tenant. - The description for this tenant.
type: str
state: state:
description: description:
- Use C(present) or C(absent) for adding or removing. - Use C(present) or C(absent) for adding or removing.
- Use C(query) for listing an object or multiple objects. - Use C(query) for listing an object or multiple objects.
type: str
choices: [ absent, present, query ] choices: [ absent, present, query ]
default: present default: present
extends_documentation_fragment: msc extends_documentation_fragment: msc
@ -52,7 +58,8 @@ EXAMPLES = r'''
password: SomeSecretPassword password: SomeSecretPassword
tenant: north_europe tenant: north_europe
tenant_id: 101 tenant_id: 101
description: North European Datacenter display_name: North European Datacenter
description: This tenant manages the NEDC environment.
state: present state: present
delegate_to: localhost delegate_to: localhost
@ -161,7 +168,7 @@ def main():
displayName=display_name, displayName=display_name,
siteAssociations=[], siteAssociations=[],
userAssociations=[dict(userId="0000ffff0000000000000020")], userAssociations=[dict(userId="0000ffff0000000000000020")],
)) ), collate=True)
if msc.existing: if msc.existing:
if not issubset(msc.sent, msc.existing): if not issubset(msc.sent, msc.existing):

@ -49,8 +49,8 @@
that: that:
- cm_add_label is changed - cm_add_label is changed
- cm_add_label.previous == {} - cm_add_label.previous == {}
- cm_add_label.current.id is not defined
- cm_add_label.current.displayName == 'ansible_test' - cm_add_label.current.displayName == 'ansible_test'
- cm_add_label.current.id is not defined
- cm_add_label.current.type == 'site' - cm_add_label.current.type == 'site'
- name: Add label (normal mode) - name: Add label (normal mode)
@ -62,8 +62,8 @@
that: that:
- nm_add_label is changed - nm_add_label is changed
- nm_add_label.previous == {} - nm_add_label.previous == {}
- nm_add_label.current.id is defined
- nm_add_label.current.displayName == 'ansible_test' - nm_add_label.current.displayName == 'ansible_test'
- nm_add_label.current.id is defined
- nm_add_label.current.type == 'site' - nm_add_label.current.type == 'site'
- name: Add label again (check_mode) - name: Add label again (check_mode)
@ -77,8 +77,8 @@
- cm_add_label_again is not changed - cm_add_label_again is not changed
- cm_add_label_again.previous.displayName == 'ansible_test' - cm_add_label_again.previous.displayName == 'ansible_test'
- cm_add_label_again.previous.type == 'site' - cm_add_label_again.previous.type == 'site'
- cm_add_label_again.current.id == nm_add_label.current.id
- cm_add_label_again.current.displayName == 'ansible_test' - cm_add_label_again.current.displayName == 'ansible_test'
- cm_add_label_again.current.id == nm_add_label.current.id
- cm_add_label_again.current.type == 'site' - cm_add_label_again.current.type == 'site'
- name: Add label again (normal mode) - name: Add label again (normal mode)
@ -91,8 +91,8 @@
- nm_add_label_again is not changed - nm_add_label_again is not changed
- nm_add_label_again.previous.displayName == 'ansible_test' - nm_add_label_again.previous.displayName == 'ansible_test'
- nm_add_label_again.previous.type == 'site' - nm_add_label_again.previous.type == 'site'
- nm_add_label_again.current.id == nm_add_label.current.id
- nm_add_label_again.current.displayName == 'ansible_test' - nm_add_label_again.current.displayName == 'ansible_test'
- nm_add_label_again.current.id == nm_add_label.current.id
- nm_add_label_again.current.type == 'site' - nm_add_label_again.current.type == 'site'
@ -109,8 +109,8 @@
assert: assert:
that: that:
- cm_change_label is changed - cm_change_label is changed
- cm_change_label.current.id == nm_add_label.current.id
- cm_change_label.current.displayName == 'ansible_test2' - cm_change_label.current.displayName == 'ansible_test2'
- cm_change_label.current.id == nm_add_label.current.id
- cm_change_label.current.type == 'site' - cm_change_label.current.type == 'site'
- name: Change label (normal mode) - name: Change label (normal mode)
@ -125,8 +125,8 @@
assert: assert:
that: that:
- nm_change_label is changed - nm_change_label is changed
- cm_change_label.current.displayName == 'ansible_test2'
- nm_change_label.current.id == nm_add_label.current.id - nm_change_label.current.id == nm_add_label.current.id
- nm_change_label.current.displayName == 'ansible_test2'
- nm_change_label.current.type == 'site' - nm_change_label.current.type == 'site'
- name: Change label again (check_mode) - name: Change label again (check_mode)
@ -141,8 +141,8 @@
assert: assert:
that: that:
- cm_change_label_again is not changed - cm_change_label_again is not changed
- cm_change_label_again.current.id == nm_add_label.current.id
- cm_change_label_again.current.displayName == 'ansible_test2' - cm_change_label_again.current.displayName == 'ansible_test2'
- cm_change_label_again.current.id == nm_add_label.current.id
- cm_change_label_again.current.type == 'site' - cm_change_label_again.current.type == 'site'
- name: Change label again (normal mode) - name: Change label again (normal mode)
@ -156,8 +156,8 @@
assert: assert:
that: that:
- nm_change_label_again is not changed - nm_change_label_again is not changed
- nm_change_label_again.current.id == nm_add_label.current.id
- nm_change_label_again.current.displayName == 'ansible_test2' - nm_change_label_again.current.displayName == 'ansible_test2'
- nm_change_label_again.current.id == nm_add_label.current.id
- nm_change_label_again.current.type == 'site' - nm_change_label_again.current.type == 'site'
@ -206,12 +206,12 @@
assert: assert:
that: that:
- cm_query_label is not changed - cm_query_label is not changed
- cm_query_label.current.id == nm_add_label.current.id
- cm_query_label.current.displayName == 'ansible_test2' - cm_query_label.current.displayName == 'ansible_test2'
- cm_query_label.current.id == nm_add_label.current.id
- cm_query_label.current.type == 'site' - cm_query_label.current.type == 'site'
- nm_query_label is not changed - nm_query_label is not changed
- nm_query_label.current.id == nm_add_label.current.id
- nm_query_label.current.displayName == 'ansible_test2' - nm_query_label.current.displayName == 'ansible_test2'
- nm_query_label.current.id == nm_add_label.current.id
- nm_query_label.current.type == 'site' - nm_query_label.current.type == 'site'
- cm_query_label == nm_query_label - cm_query_label == nm_query_label

@ -51,9 +51,9 @@
that: that:
- cm_add_role is changed - cm_add_role is changed
- cm_add_role.previous == {} - cm_add_role.previous == {}
- cm_add_role.current.id is not defined
- cm_add_role.current.displayName == 'ansible_test'
- cm_add_role.current.description == 'Ansible test role' - cm_add_role.current.description == 'Ansible test role'
- cm_add_role.current.displayName == 'ansible_test'
- cm_add_role.current.id is not defined
- name: Add role (normal mode) - name: Add role (normal mode)
msc_role: *role_present msc_role: *role_present
@ -64,9 +64,9 @@
that: that:
- nm_add_role is changed - nm_add_role is changed
- nm_add_role.previous == {} - nm_add_role.previous == {}
- nm_add_role.current.id is defined
- nm_add_role.current.displayName == 'ansible_test'
- nm_add_role.current.description == 'Ansible test role' - nm_add_role.current.description == 'Ansible test role'
- nm_add_role.current.displayName == 'ansible_test'
- nm_add_role.current.id is defined
- name: Add role again (check_mode) - name: Add role again (check_mode)
msc_role: *role_present msc_role: *role_present
@ -77,11 +77,11 @@
assert: assert:
that: that:
- cm_add_role_again is not changed - cm_add_role_again is not changed
- cm_add_role_again.previous.displayName == 'ansible_test'
- cm_add_role_again.previous.description == 'Ansible test role' - cm_add_role_again.previous.description == 'Ansible test role'
- cm_add_role_again.current.id == nm_add_role.current.id - cm_add_role_again.previous.displayName == 'ansible_test'
- cm_add_role_again.current.displayName == 'ansible_test'
- cm_add_role_again.current.description == 'Ansible test role' - cm_add_role_again.current.description == 'Ansible test role'
- cm_add_role_again.current.displayName == 'ansible_test'
- cm_add_role_again.current.id == nm_add_role.current.id
- name: Add role again (normal mode) - name: Add role again (normal mode)
msc_role: *role_present msc_role: *role_present
@ -91,11 +91,11 @@
assert: assert:
that: that:
- nm_add_role_again is not changed - nm_add_role_again is not changed
- nm_add_role_again.previous.displayName == 'ansible_test'
- nm_add_role_again.previous.description == 'Ansible test role' - nm_add_role_again.previous.description == 'Ansible test role'
- nm_add_role_again.current.id == nm_add_role.current.id - nm_add_role_again.previous.displayName == 'ansible_test'
- nm_add_role_again.current.displayName == 'ansible_test'
- nm_add_role_again.current.description == 'Ansible test role' - nm_add_role_again.current.description == 'Ansible test role'
- nm_add_role_again.current.displayName == 'ansible_test'
- nm_add_role_again.current.id == nm_add_role.current.id
# CHANGE ROLE # CHANGE ROLE
@ -112,9 +112,9 @@
assert: assert:
that: that:
- cm_change_role is changed - cm_change_role is changed
- cm_change_role.current.id == nm_add_role.current.id
- cm_change_role.current.displayName == 'ansible_test2'
- cm_change_role.current.description == 'Ansible test role 2' - cm_change_role.current.description == 'Ansible test role 2'
- cm_change_role.current.displayName == 'ansible_test2'
- cm_change_role.current.id == nm_add_role.current.id
- name: Change role (normal mode) - name: Change role (normal mode)
msc_role: msc_role:
@ -129,9 +129,9 @@
assert: assert:
that: that:
- nm_change_role is changed - nm_change_role is changed
- nm_change_role.current.id == nm_add_role.current.id
- nm_change_role.current.displayName == 'ansible_test2'
- nm_change_role.current.description == 'Ansible test role 2' - nm_change_role.current.description == 'Ansible test role 2'
- nm_change_role.current.displayName == 'ansible_test2'
- nm_change_role.current.id == nm_add_role.current.id
- name: Change role again (check_mode) - name: Change role again (check_mode)
msc_role: msc_role:
@ -146,9 +146,9 @@
assert: assert:
that: that:
- cm_change_role_again is not changed - cm_change_role_again is not changed
- cm_change_role_again.current.id == nm_add_role.current.id
- cm_change_role_again.current.displayName == 'ansible_test2'
- cm_change_role_again.current.description == 'Ansible test role 2' - cm_change_role_again.current.description == 'Ansible test role 2'
- cm_change_role_again.current.displayName == 'ansible_test2'
- cm_change_role_again.current.id == nm_add_role.current.id
- name: Change role again (normal mode) - name: Change role again (normal mode)
msc_role: msc_role:
@ -162,9 +162,9 @@
assert: assert:
that: that:
- nm_change_role_again is not changed - nm_change_role_again is not changed
- nm_change_role_again.current.id == nm_add_role.current.id
- nm_change_role_again.current.displayName == 'ansible_test2'
- nm_change_role_again.current.description == 'Ansible test role 2' - nm_change_role_again.current.description == 'Ansible test role 2'
- nm_change_role_again.current.displayName == 'ansible_test2'
- nm_change_role_again.current.id == nm_add_role.current.id
# QUERY ALL ROLES # QUERY ALL ROLES
@ -212,13 +212,13 @@
assert: assert:
that: that:
- cm_query_role is not changed - cm_query_role is not changed
- cm_query_role.current.id == nm_add_role.current.id
- cm_query_role.current.displayName == 'ansible_test2'
- cm_query_role.current.description == 'Ansible test role 2' - cm_query_role.current.description == 'Ansible test role 2'
- cm_query_role.current.displayName == 'ansible_test2'
- cm_query_role.current.id == nm_add_role.current.id
- nm_query_role is not changed - nm_query_role is not changed
- nm_query_role.current.id == nm_add_role.current.id
- nm_query_role.current.displayName == 'ansible_test2'
- nm_query_role.current.description == 'Ansible test role 2' - nm_query_role.current.description == 'Ansible test role 2'
- nm_query_role.current.displayName == 'ansible_test2'
- nm_query_role.current.id == nm_add_role.current.id
- cm_query_role == nm_query_role - cm_query_role == nm_query_role

@ -42,6 +42,7 @@
site: ansible_test site: ansible_test
apic_username: admin apic_username: admin
apic_password: '{{ apic_password }}' apic_password: '{{ apic_password }}'
apic_site_id: 101
urls: urls:
- https://{{ apic_hostname }}/ - https://{{ apic_hostname }}/
state: present state: present

@ -40,6 +40,7 @@
use_proxy: '{{ msc_use_proxy | default(true) }}' use_proxy: '{{ msc_use_proxy | default(true) }}'
output_level: '{{ msc_output_level | default("info") }}' output_level: '{{ msc_output_level | default("info") }}'
tenant: ansible_test tenant: ansible_test
display_name: Ansible test title
description: Ansible test tenant description: Ansible test tenant
state: present state: present
check_mode: yes check_mode: yes
@ -51,7 +52,7 @@
- cm_add_tenant is changed - cm_add_tenant is changed
- cm_add_tenant.previous == {} - cm_add_tenant.previous == {}
- cm_add_tenant.current.id is not defined - cm_add_tenant.current.id is not defined
- cm_add_tenant.current.displayName == 'ansible_test' - cm_add_tenant.current.name == 'ansible_test'
- cm_add_tenant.current.description == 'Ansible test tenant' - cm_add_tenant.current.description == 'Ansible test tenant'
- name: Add tenant (normal mode) - name: Add tenant (normal mode)
@ -64,7 +65,7 @@
- nm_add_tenant is changed - nm_add_tenant is changed
- nm_add_tenant.previous == {} - nm_add_tenant.previous == {}
- nm_add_tenant.current.id is defined - nm_add_tenant.current.id is defined
- nm_add_tenant.current.displayName == 'ansible_test' - nm_add_tenant.current.name == 'ansible_test'
- nm_add_tenant.current.description == 'Ansible test tenant' - nm_add_tenant.current.description == 'Ansible test tenant'
- name: Add tenant again (check_mode) - name: Add tenant again (check_mode)
@ -76,10 +77,10 @@
assert: assert:
that: that:
- cm_add_tenant_again is not changed - cm_add_tenant_again is not changed
- cm_add_tenant_again.previous.displayName == 'ansible_test' - cm_add_tenant_again.previous.name == 'ansible_test'
- cm_add_tenant_again.previous.description == 'Ansible test tenant' - cm_add_tenant_again.previous.description == 'Ansible test tenant'
- cm_add_tenant_again.current.id == nm_add_tenant.current.id - cm_add_tenant_again.current.id == nm_add_tenant.current.id
- cm_add_tenant_again.current.displayName == 'ansible_test' - cm_add_tenant_again.current.name == 'ansible_test'
- cm_add_tenant_again.current.description == 'Ansible test tenant' - cm_add_tenant_again.current.description == 'Ansible test tenant'
- name: Add tenant again (normal mode) - name: Add tenant again (normal mode)
@ -90,10 +91,10 @@
assert: assert:
that: that:
- nm_add_tenant_again is not changed - nm_add_tenant_again is not changed
- nm_add_tenant_again.previous.displayName == 'ansible_test' - nm_add_tenant_again.previous.name == 'ansible_test'
- nm_add_tenant_again.previous.description == 'Ansible test tenant' - nm_add_tenant_again.previous.description == 'Ansible test tenant'
- nm_add_tenant_again.current.id == nm_add_tenant.current.id - nm_add_tenant_again.current.id == nm_add_tenant.current.id
- nm_add_tenant_again.current.displayName == 'ansible_test' - nm_add_tenant_again.current.name == 'ansible_test'
- nm_add_tenant_again.current.description == 'Ansible test tenant' - nm_add_tenant_again.current.description == 'Ansible test tenant'
@ -112,7 +113,7 @@
that: that:
- cm_change_tenant is changed - cm_change_tenant is changed
- cm_change_tenant.current.id == nm_add_tenant.current.id - cm_change_tenant.current.id == nm_add_tenant.current.id
- cm_change_tenant.current.displayName == 'ansible_test2' - cm_change_tenant.current.name == 'ansible_test2'
- cm_change_tenant.current.description == 'Ansible test tenant 2' - cm_change_tenant.current.description == 'Ansible test tenant 2'
- name: Change tenant (normal mode) - name: Change tenant (normal mode)
@ -129,7 +130,7 @@
that: that:
- nm_change_tenant is changed - nm_change_tenant is changed
- nm_change_tenant.current.id == nm_add_tenant.current.id - nm_change_tenant.current.id == nm_add_tenant.current.id
- nm_change_tenant.current.displayName == 'ansible_test2' - nm_change_tenant.current.name == 'ansible_test2'
- nm_change_tenant.current.description == 'Ansible test tenant 2' - nm_change_tenant.current.description == 'Ansible test tenant 2'
- name: Change tenant again (check_mode) - name: Change tenant again (check_mode)
@ -146,7 +147,7 @@
that: that:
- cm_change_tenant_again is not changed - cm_change_tenant_again is not changed
- cm_change_tenant_again.current.id == nm_add_tenant.current.id - cm_change_tenant_again.current.id == nm_add_tenant.current.id
- cm_change_tenant_again.current.displayName == 'ansible_test2' - cm_change_tenant_again.current.name == 'ansible_test2'
- cm_change_tenant_again.current.description == 'Ansible test tenant 2' - cm_change_tenant_again.current.description == 'Ansible test tenant 2'
- name: Change tenant again (normal mode) - name: Change tenant again (normal mode)
@ -162,7 +163,7 @@
that: that:
- nm_change_tenant_again is not changed - nm_change_tenant_again is not changed
- nm_change_tenant_again.current.id == nm_add_tenant.current.id - nm_change_tenant_again.current.id == nm_add_tenant.current.id
- nm_change_tenant_again.current.displayName == 'ansible_test2' - nm_change_tenant_again.current.name == 'ansible_test2'
- nm_change_tenant_again.current.description == 'Ansible test tenant 2' - nm_change_tenant_again.current.description == 'Ansible test tenant 2'
@ -212,11 +213,11 @@
that: that:
- cm_query_tenant is not changed - cm_query_tenant is not changed
- cm_query_tenant.current.id == nm_add_tenant.current.id - cm_query_tenant.current.id == nm_add_tenant.current.id
- cm_query_tenant.current.displayName == 'ansible_test2' - cm_query_tenant.current.name == 'ansible_test2'
- cm_query_tenant.current.description == 'Ansible test tenant 2' - cm_query_tenant.current.description == 'Ansible test tenant 2'
- nm_query_tenant is not changed - nm_query_tenant is not changed
- nm_query_tenant.current.id == nm_add_tenant.current.id - nm_query_tenant.current.id == nm_add_tenant.current.id
- nm_query_tenant.current.displayName == 'ansible_test2' - nm_query_tenant.current.name == 'ansible_test2'
- nm_query_tenant.current.description == 'Ansible test tenant 2' - nm_query_tenant.current.description == 'Ansible test tenant 2'
- cm_query_tenant == nm_query_tenant - cm_query_tenant == nm_query_tenant

Loading…
Cancel
Save