To use ansible with Cisco UCS Manager, you need to install the SDK on your ansible server.
root@c86d023821ff:~# pip install ucsmsdk Collecting ucsmsdk Downloading https://files.pythonhosted.org/packages/f7/f9/280d7cea9e37ed183d694f5d2e8505b5eacfdbad709eba68fc32a5ed2bcf/ucsmsdk-0.9.10.tar.gz (4.2MB) 100% |################################| 4.2MB 306kB/s Collecting pyparsing (from ucsmsdk) Downloading https://files.pythonhosted.org/packages/8a/bb/488841f56197b13700afd5658fc279a2025a39e22449b7cf29864669b15d/pyparsing-2.4.7-py2.py3-none-any.whl (67kB) 100% |################################| 71kB 5.2MB/s Requirement already satisfied: setuptools in /usr/lib/python2.7/dist-packages (from ucsmsdk) (40.8.0) Requirement already satisfied: six in /usr/lib/python2.7/dist-packages (from ucsmsdk) (1.12.0) Building wheels for collected packages: ucsmsdk Running setup.py bdist_wheel for ucsmsdk … done Stored in directory: /root/.cache/pip/wheels/ac/a2/a9/5c39875aca61b780d8d94690f22b54237452d9fc290756781f Successfully built ucsmsdk Installing collected packages: pyparsing, ucsmsdk Successfully installed pyparsing-2.4.7 ucsmsdk-0.9.10 root@c86d023821ff:~# pip list | grep ucs ucsmsdk 0.9.10
Then you can create a simple inventory file with the UCS Manager IP.
Example:
root@c86d023821ff:~# cat inv_ucs [ucs] 10.0.100.162
Then you can create a simple playbook to add one vlan:
root@c86d023821ff:~# cat ucs_vlan.yml --- - name: ENSURE APPLICATION CONFIGURATION EXISTS hosts: ucs connection: local gather_facts: False tasks: - name: Configure VLAN ucs_vlans: hostname: 10.0.100.162 username: ucspe password: ucspe name: TheVlan11 id: '11' native: 'no'
And finally you can run it:
root@c86d023821ff:~# ansible-playbook ucs_vlan.yml -i inv_ucs PLAY [ENSURE APPLICATION CONFIGURATION EXISTS] * TASK [Configure VLAN] ** [WARNING]: Platform linux on host 10.0.100.162 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. changed: [10.0.100.162] PLAY RECAP * 10.0.100.162 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Now your vlan ID 11 is available on the UCS Fabric Interconnect.
You can use the module ansible ucs_vlan_find to get all vlans:
root@c86d023821ff:~# cat ucs_vlan.yml --- - name: ENSURE APPLICATION CONFIGURATION EXISTS hosts: ucs connection: local gather_facts: False tasks: - name: Get All Vlans ucs_vlan_find: hostname: 10.0.100.162 username: ucspe password: ucspe pattern: '.' register: vlans tags: - showvlan - name: Display vlans debug: var: vlans tags: - showvlan
Result:
root@c86d023821ff:~# ansible-playbook ucs_vlan.yml -i inv_ucs --tags showvlan PLAY [ENSURE APPLICATION CONFIGURATION EXISTS] TASK [Get All Vlans] [WARNING]: Platform linux on host 10.0.100.162 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. ok: [10.0.100.162] TASK [Display vlans] ok: [10.0.100.162] => { "vlans": { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "failed": false, "vlan_list": [ { "id": "1", "name": "default" }, { "id": "5", "name": "human-resource" }, { "id": "1", "name": "default" }, { "id": "3", "name": "finance" }, { "id": "5", "name": "human-resource" }, { "id": "1", "name": "default" }, { "id": "3", "name": "finance" }, { "id": "42", "name": "NewVlan42" }, { "id": "10", "name": "vlan10" }, { "id": "11", "name": "TheVlan11" } ], "warnings": [ "Platform linux on host 10.0.100.162 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information." ] } } PLAY RECAP ** 10.0.100.162 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0