Update work/tbx/meraki/meraki_api.md

This commit is contained in:
2024-06-01 05:10:39 +00:00
parent fd1c8c9bfe
commit 5b3a00b860

View File

@@ -1296,4 +1296,194 @@ graph TD;
```
By adding this Mermaid chart to your GitHub site, you'll have a clear visual representation of the hierarchical structure within Meraki's organization, network, and device model. If you need further customization or have additional questions, feel free to ask!
By adding this Mermaid chart to your GitHub site, you'll have a clear visual representation of the hierarchical structure within Meraki's organization, network, and device model. If you need further customization or have additional questions, feel free to ask!
---
### Guide: Converting Python Scripts to Ansible Playbooks and Vice Versa
This guide provides a step-by-step approach for converting Python scripts to Ansible playbooks and Ansible playbooks to Python scripts. It also outlines when to choose Bash/Python scripts versus Ansible playbooks based on your use case.
---
### Converting Python to Ansible
**1. Identify each API call in the Python script.**
**2. Use the Ansible `uri` module for HTTP requests.**
**3. Use the `set_fact` module to store variables.**
**4. Use the `copy` module to save content to files.**
**5. Use `ansible.builtin.debug` for debugging output.**
---
**Example Python Script: Fetching Organizations and Networks**
```python
import requests
import json
API_KEY = 'your_api_key'
BASE_URL = 'https://api.meraki.com/api/v1'
# Fetch organizations
response = requests.get(f'{BASE_URL}/organizations', headers={'Authorization': f'Bearer {API_KEY}'})
organizations = response.json()
with open('organizations.json', 'w') as f:
json.dump(organizations, f, indent=4)
print("Organizations data saved to organizations.json")
# Extract organization ID
org_id = organizations[0]['id']
# Fetch networks
response = requests.get(f'{BASE_URL}/organizations/{org_id}/networks', headers={'Authorization': f'Bearer {API_KEY}'})
networks = response.json()
with open('networks.json', 'w') as f:
json.dump(networks, f, indent=4)
print("Networks data saved to networks.json")
```
**Converted Ansible Playbook (myplaybook.yml):**
```yaml
---
- hosts: localhost
gather_facts: false
tasks:
- name: Get all Organizations
uri:
url: "https://api.meraki.com/api/v1/organizations"
method: GET
headers:
Authorization: "Bearer {{ lookup('env', 'MERAKI_DASHBOARD_API_KEY') }}"
return_content: yes
register: organizations
- name: Save organizations to file
copy:
content: "{{ organizations.json | to_nice_json }}"
dest: ./organizations.json
- name: Extract organization ID
set_fact:
organization_id: "{{ organizations.json[0].id }}"
- name: Get all Networks for the first Organization
uri:
url: "https://api.meraki.com/api/v1/organizations/{{ organization_id }}/networks"
method: GET
headers:
Authorization: "Bearer {{ lookup('env', 'MERAKI_DASHBOARD_API_KEY') }}"
return_content: yes
register: networks
- name: Save networks to file
copy:
content: "{{ networks.json | to_nice_json }}"
dest: ./networks.json
```
**Hosts File (hosts):**
```ini
[local]
localhost
```
**Run the Playbook:**
```sh
ansible-playbook -i hosts myplaybook.yml
```
---
### Converting Ansible to Python
**1. Identify each task in the Ansible playbook.**
**2. Use the `requests` library for HTTP requests.**
**3. Use Python variables to store and manipulate data.**
**4. Use `print` or `json.dumps` for output.**
---
**Example Ansible Playbook:**
```yaml
---
- hosts: localhost
gather_facts: false
tasks:
- name: Get all Organizations
cisco.meraki.organizations_info:
meraki_api_key: "{{ lookup('env', 'MERAKI_DASHBOARD_API_KEY') }}"
register: result
- name: Show Organizations List
ansible.builtin.debug:
msg: "{{ result.meraki_response | json_query('[*].{id: id, name: name}') }}"
- name: Get all Networks for the first Organization
cisco.meraki.networks_info:
meraki_api_key: "{{ lookup('env', 'MERAKI_DASHBOARD_API_KEY') }}"
organization_id: "{{ result.meraki_response[0].id }}"
register: networks
- name: Show Networks List
ansible.builtin.debug:
msg: "{{ networks.meraki_response | json_query('[*].{id: id, name: name}') }}"
```
**Converted Python Script:**
```python
import requests
import json
import os
API_KEY = os.getenv('MERAKI_DASHBOARD_API_KEY')
BASE_URL = 'https://api.meraki.com/api/v1'
# Get all Organizations
response = requests.get(f'{BASE_URL}/organizations', headers={'Authorization': f'Bearer {API_KEY}'})
organizations = response.json()
print("Organizations List:")
print(json.dumps([{ 'id': org['id'], 'name': org['name'] } for org in organizations], indent=4))
# Extract organization ID
organization_id = organizations[0]['id']
# Get all Networks for the first Organization
response = requests.get(f'{BASE_URL}/organizations/{organization_id}/networks', headers={'Authorization': f'Bearer {API_KEY}'})
networks = response.json()
print("Networks List:")
print(json.dumps([{ 'id': net['id'], 'name': net['name'] } for net in networks], indent=4))
```
---
### Choosing Between Bash/Python and Ansible
**Bash/Python:**
- **Use for quick scripts**: Ideal for simple, one-off tasks.
- **Fine-grained control**: Offers detailed control over each step and can handle dynamic programming logic easily.
- **Flexibility**: Easily switch between different tasks and workflows.
**Ansible:**
- **Use for automation**: Best for automating routine tasks and ensuring consistency across environments.
- **Scalability**: Designed to scale across many devices and networks.
- **Readability and simplicity**: Playbooks are written in YAML, which is easy to read and understand.
- **Error handling and idempotence**: Handles errors gracefully and ensures tasks run once with the same effect.
---
By following this guide, you can convert Python scripts to Ansible playbooks and vice versa, allowing you to choose the best tool for your specific needs. Whether you need fine-grained control with Bash/Python or scalable automation with Ansible, this guide provides the necessary steps for effective conversions.
If you have any further questions or need additional examples, feel free to ask!