100%

meraki_organization_admins

module
Manage Meraki organization administrators
Added in version 0.1.0

Synopsis

  • Manage Meraki organization administrators.
  • Supports merged, replaced, overridden, deleted, and gathered states.

Author

Cisco Meraki

Parameters

config (list/dict)

List of admin configurations.

account_status (str)

Status of the admin's account.

admin_id (str)

Server-assigned ID, resolved automatically by matching on email.

Provide only to disambiguate when duplicate emails exist.

authentication_method (str)
EmailCisco SecureX Sign-On

Admin's authentication method.

email (str)

Admin email.

has_api_key (bool)

Indicates whether the admin has an API key.

last_active (str)

Time when the admin was last active.

name (str)

Admin name.

networks (list/dict)

List of network-based access controls.

access (str)
id (str)
org_access (str)
fullread-onlyenterprisenone

Admin's level of access to the organization.

tags (list/dict)

List of tag-based access controls.

access (str)
tag (str)
two_factor_auth_enabled (bool)

Indicates whether two-factor authentication is enabled.

organization_id (str) required

The organization ID.

state (str)
mergedreplacedoverriddendeletedgathered

The state of the resource.

Sample Task

A template task showing all available parameters with their defaults or example values.

- name: Meraki Organization Admins task
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "organization_id_value"
    config:
      - account_status: "account_status_value"
        admin_id: "admin_id_value"
        authentication_method: Email
        email: "email_value"
        has_api_key: true
        last_active: "last_active_value"
        name: "example_name"
        networks:
          - access: "access_value"
            id: "id_value"
        org_access: full
        tags:
          - access: "access_value"
            tag: "tag_value"
        two_factor_auth_enabled: true
    state: merged
- name: Meraki Organization Admins task
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "organization_id_value"
    config:  # optional
      - account_status: "account_status_value"  # optional
        admin_id: "admin_id_value"  # optional
        authentication_method: Email  # optional
        email: "email_value"  # optional
        has_api_key: true  # optional
        last_active: "last_active_value"  # optional
        name: "example_name"  # optional
        networks:  # optional
          - access: "access_value"  # optional
            id: "id_value"  # optional
        org_access: full  # optional
        tags:  # optional
          - access: "access_value"  # optional
            tag: "tag_value"  # optional
        two_factor_auth_enabled: true  # optional
    state: merged  # optional
- name: Meraki Organization Admins task
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "organization_id_value"  # (str, required) The organization ID.
    config:  # (list, optional) List of admin configurations.
      - account_status: "account_status_value"  # (str, optional) Status of the admin's account.
        admin_id: "admin_id_value"  # (str, optional) Server-assigned ID, resolved automatically by matching on...
        authentication_method: Email  # (str, optional) Admin's authentication method.
        email: "email_value"  # (str, optional) Admin email.
        has_api_key: true  # (bool, optional) Indicates whether the admin has an API key.
        last_active: "last_active_value"  # (str, optional) Time when the admin was last active.
        name: "example_name"  # (str, optional) Admin name.
        networks:  # (list, optional) List of network-based access controls.
          - access: "access_value"  # (str, optional) 
            id: "id_value"  # (str, optional) 
        org_access: full  # (str, optional) Admin's level of access to the organization.
        tags:  # (list, optional) List of tag-based access controls.
          - access: "access_value"  # (str, optional) 
            tag: "tag_value"  # (str, optional) 
        two_factor_auth_enabled: true  # (bool, optional) Indicates whether two-factor authentication is enabled.
    state: merged  # (str, optional) The state of the resource.

Notes

  • Canonical key: email — identifies the admin in playbooks.
  • System key: admin_id — server-assigned, resolved automatically from gathered state.
  • Users do not need to provide admin_id unless disambiguating duplicate emails.

Examples

Define Expected Configuration
- name: Define expected configuration
  ansible.builtin.set_fact:
    expected_config:
      name: Test-Config
      email: "admin@example.com"
      org_access: full
      tags:
        - ansible
        - test
      authentication_method: Email
Create Organization_admins With Merged State
- name: Create organization_admins with merged state
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: merged
    config:
      - "{{ expected_config }}"
  register: merge_result
Assert Resource Was Created
- name: Assert resource was created
  ansible.builtin.assert:
    that:
      - merge_result is changed
      - merge_result.config | length == 1
Compare Expected Paths To Result (subset Check)
- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ merge_result.config[0] | ansible.utils.to_paths }}"
Assert All Expected Fields Are Present And Match
- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"
Task Output:
# Manage Meraki organization administrators — full resource replacement
Define Replacement Configuration
- name: Define replacement configuration
  ansible.builtin.set_fact:
    expected_config:
      name: Replaced-Config
      email: "admin@example.com"
      org_access: read-only
      tags:
        - ansible
        - replaced
      authentication_method: Cisco SecureX Sign-On
Replace Organization_admins Configuration
- name: Replace organization_admins configuration
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: replaced
    config:
      - "{{ expected_config }}"
  register: replace_result
Assert Resource Was Replaced
- name: Assert resource was replaced
  ansible.builtin.assert:
    that:
      - replace_result is changed
      - replace_result.config | length == 1
Compare Expected Paths To Result (subset Check)
- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ replace_result.config[0] | ansible.utils.to_paths }}"
Assert All Expected Fields Are Present And Match
- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"
Task Output:
# Manage Meraki organization administrators — override all instances # Ensures ONLY these resources exist; any not listed are deleted.
Define Desired-state Configuration
- name: Define desired-state configuration
  ansible.builtin.set_fact:
    expected_config:
      name: Replaced-Config
      email: "admin@example.com"
      org_access: read-only
      tags:
        - ansible
        - replaced
      authentication_method: Cisco SecureX Sign-On
Override All Organization_admins — Desired State Only
- name: Override all organization_admins — desired state only
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: overridden
    config:
      - "{{ expected_config }}"
  register: override_result
Assert Resources Were Overridden
- name: Assert resources were overridden
  ansible.builtin.assert:
    that:
      - override_result is changed
      - override_result.config | length == 1
Compare Expected Paths To Result (subset Check)
- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ override_result.config[0] | ansible.utils.to_paths }}"
Assert All Expected Fields Are Present And Match
- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"
Task Output:
# Manage Meraki organization administrators — gather current configuration
Gather Current Organization_admins Configuration
- name: Gather current organization_admins configuration
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: gathered
  register: gathered
Assert Gathered Config Is Not Empty
- name: Assert gathered config is not empty
  ansible.builtin.assert:
    that:
      - gathered.config is defined
      - gathered.config | length > 0
    fail_msg: "Gathered config is empty — expected at least one resource"
Display Gathered Configuration
- name: Display gathered configuration
  ansible.builtin.debug:
    var: gathered.config
Task Output:
# Manage Meraki organization administrators — remove configuration
Define Resource To Delete
- name: Define resource to delete
  ansible.builtin.set_fact:
    expected_config:
      email: "admin@example.com"
Delete Organization_admins Configuration
- name: Delete organization_admins configuration
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: deleted
    config:
      - "{{ expected_config }}"
  register: delete_result
Assert Resource Was Deleted
- name: Assert resource was deleted
  ansible.builtin.assert:
    that:
      - delete_result is changed
      - delete_result is not failed
---
# Manage Meraki organization administrators — create or update

- name: Define expected configuration
  ansible.builtin.set_fact:
    expected_config:
      name: Test-Config
      email: "admin@example.com"
      org_access: full
      tags:
        - ansible
        - test
      authentication_method: Email

- name: Create organization_admins with merged state
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: merged
    config:
      - "{{ expected_config }}"
  register: merge_result

- name: Assert resource was created
  ansible.builtin.assert:
    that:
      - merge_result is changed
      - merge_result.config | length == 1

- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ merge_result.config[0] | ansible.utils.to_paths }}"

- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"

# Manage Meraki organization administrators — full resource replacement

- name: Define replacement configuration
  ansible.builtin.set_fact:
    expected_config:
      name: Replaced-Config
      email: "admin@example.com"
      org_access: read-only
      tags:
        - ansible
        - replaced
      authentication_method: Cisco SecureX Sign-On

- name: Replace organization_admins configuration
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: replaced
    config:
      - "{{ expected_config }}"
  register: replace_result

- name: Assert resource was replaced
  ansible.builtin.assert:
    that:
      - replace_result is changed
      - replace_result.config | length == 1

- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ replace_result.config[0] | ansible.utils.to_paths }}"

- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"

# Manage Meraki organization administrators — override all instances
# Ensures ONLY these resources exist; any not listed are deleted.

- name: Define desired-state configuration
  ansible.builtin.set_fact:
    expected_config:
      name: Replaced-Config
      email: "admin@example.com"
      org_access: read-only
      tags:
        - ansible
        - replaced
      authentication_method: Cisco SecureX Sign-On

- name: Override all organization_admins — desired state only
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: overridden
    config:
      - "{{ expected_config }}"
  register: override_result

- name: Assert resources were overridden
  ansible.builtin.assert:
    that:
      - override_result is changed
      - override_result.config | length == 1

- name: Compare expected paths to result (subset check)
  ansible.builtin.set_fact:
    path_check: "{{ expected_paths | cisco.meraki_rm.path_contained_in(result_paths) }}"
  vars:
    expected_paths: "{{ expected_config | ansible.utils.to_paths }}"
    result_paths: "{{ override_result.config[0] | ansible.utils.to_paths }}"

- name: Assert all expected fields are present and match
  ansible.builtin.assert:
    that: path_check.contained | bool
    success_msg: "{{ success_msg }}"
    fail_msg: "{{ fail_msg }}"
  vars:
    success_msg: "All expected fields match. Extras: {{ path_check.extras }}"
    fail_msg: "Missing or mismatch: {{ path_check.missing }}. Extras: {{ path_check.extras }}"

# Manage Meraki organization administrators — gather current configuration

- name: Gather current organization_admins configuration
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: gathered
  register: gathered

- name: Assert gathered config is not empty
  ansible.builtin.assert:
    that:
      - gathered.config is defined
      - gathered.config | length > 0
    fail_msg: "Gathered config is empty — expected at least one resource"

- name: Display gathered configuration
  ansible.builtin.debug:
    var: gathered.config

# Manage Meraki organization administrators — remove configuration

- name: Define resource to delete
  ansible.builtin.set_fact:
    expected_config:
      email: "admin@example.com"

- name: Delete organization_admins configuration
  cisco.meraki_rm.meraki_organization_admins:
    organization_id: "123456"
    state: deleted
    config:
      - "{{ expected_config }}"
  register: delete_result

- name: Assert resource was deleted
  ansible.builtin.assert:
    that:
      - delete_result is changed
      - delete_result is not failed

Return Values

config
list — returned: always
The resulting resource configuration.