Introduzione
In questo documento viene descritto come configurare Cisco Integrated Management Controller (CIMC) tramite il modulo API Ansible REST.
Prerequisiti
Requisiti
Cisco raccomanda la conoscenza dei seguenti argomenti:
Componenti usati
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Panoramica delle API CIMC
Tutti i componenti fisici e logici che compongono Cisco UCS sono rappresentati in un modello MIM (Hierarchical Management Information Model), noto anche come MIT. Ogni nodo della struttura rappresenta un oggetto gestito (MO) o un gruppo di oggetti che contiene il relativo stato amministrativo e lo stato operativo.
La struttura gerarchica inizia nella parte superiore (sys) e contiene i nodi padre e figlio. Ogni nodo di questa struttura è un oggetto gestito e ogni oggetto in Cisco UCS ha un nome distinto (DN) univoco che descrive l'oggetto e la relativa posizione nella struttura. Gli oggetti gestiti sono astrazioni delle risorse Cisco UCS, ad esempio CPU, DIMM, schede di rete, ventole e alimentatori.
Illustrazione della struttura CIMC MIM:
|——sys———————————––– (sys)
|——rack-unit-1————————(sys/rack-unit-1)
|——adaptor-1————————(sys/rack-unit-1/adaptor-1)
|——psu-1————————(sys/rack-unit-1/psu-1)
|——psu-2————————(sys/rack-unit-1/psu-2)
Denominazione degli oggetti:
- DN: Il nome distinto consente di identificare in modo univoco un oggetto di destinazione.
- RN: Il nome relativo identifica un oggetto nel contesto del relativo oggetto padre.
Ad esempio, questo nome distinto:
<dn = "sys/rack-unit-1/adaptor-1/host-eth-eth2"/>
È composto da 4 nomi relativi:
topSystem MO: rn="sys"
computeRackUnit MO: rn ="rack-unit-1"
adaptorUnit MO: rn="adaptor-<id>"
adaptorHostEthIf MO: rn="host-eth-<id>"
API utilizzata in questo articolo:
-
Autenticazione: aaaLogin. Metodo iniziale di accesso. Utilizzare il metodo aaaLogin per ottenere un cookie valido.
-
Query: configResolveDn. Recupera gli oggetti in base al DN.
-
Configurazione: configConfMo. Il metodo configConfMo viene utilizzato per configurare una o più proprietà in un oggetto gestito (MO). L'oggetto MO da configurare è identificato in modo univoco da un nome distinto (DN).
Nota:
Molti metodi di query includono un argomento inHierarchical che accetta un valore booleano (true/yes o false/no). Se impostato su true, questo argomento fa in modo che il metodo restituisca tutti gli oggetti figlio all'interno della gerarchia.
Configurazioni
1. Trovare la classe o il DN dell'oggetto gestito CIMC (MO)
Per automatizzare la configurazione di CIMC tramite la relativa API, è essenziale determinare le informazioni specifiche sulla classe o sul nome distinto (DN) associate agli oggetti gestiti (MO) che si desidera configurare.
1 bis. Utilizzare l'API per accedere al CIMC e recuperare le informazioni sui cookie
Inviare una richiesta POST a https://{{apic_cimc_ip}}/nuova e specificare il metodo aaaLogin. Immettere un nome utente e una password.
Copiare il cookie dalla risposta API.

In alternativa, è possibile utilizzare l'arricciatura per recuperare le informazioni sui cookie.
curl -k -d "" https://apic_cimc_ip/nuova
1 ter. Utilizzo del metodo di query API configResolveDn per recuperare tutte le informazioni MO (Managed Object)
Quando si utilizza configResolveDn con inHierarchical="true" e dn="sys/", recupera tutte le informazioni sull'oggetto gestito (MO) da CIMC.
DnRisoluzioneConfigurazione: Il metodo configResolveDn recupera un singolo oggetto gestito per un DN specificato.
inHierarchical=true: Se impostato su true, restituisce tutte le informazioni sui nodi figlio. Questa combinazione consente di recuperare da CIMC tutte le informazioni MO relative ai nodi e ai sottonodi.
dn="sys/": Questa è la radice principale del MIT.
Risposta API:

Copiare la risposta di esecuzione di Postman in un editor di testo, ad esempio Blocco note, PyCharm o Codice di Visual Studio per eseguire ricerche successive nella classe e nel DN in base a MO.
Esempio 1: Eseguire una query sulla classe e sul DN del fuso orario
Il fuso orario configurato nell'attuale GUI CIMC è "Asia/Shanghai".

Cercare 'Asia/Shanghai' dai risultati restituiti da Postman nel passaggio 1b. Il fuso orario è "Asia/Shanghai", la classe è "topSystem" e il DN è "sys/".
<configResolveDn cookie="85da25da6c/c6f2adca-5d27-ba55-a780-9e33548f595c" response="yes" dn="sys/">
<outConfig>
<topSystem dn="sys" address="a.b.c.d" currentTime="Wed Apr 10 01:05:12 2024
" localTime="Wed Apr 10 09:05:12 2024 CST +0800" timeZone="Asia/Shanghai"mode="stand-alone" name="dlc-aci01-apic1" fipsEnable="disabled" ccEnable="disabled" >
Esempio 2: Eseguire una query sulla classe e sul DN del nome host
Il nome host configurato nella GUI CIMC corrente è "dlc-aci01-apic1".

Cercare "dlc-aci01-apic1" nei risultati restituiti da Postman. Il nome host è "dlc-aci01-apic1", la classe è "mgmtIf" e il numero di sequenza è "if-1".
<mgmtIf rn="if-1" description="Management Interface Network Settings" id="1" extEnabled="yes" extIp="a.b.c.d" extMask="255.255.255.0" extGw="a.b.c.z"
ifType="physical" mac="00:A3:8E:E3:7A:DC" hostname="dlc-aci01-apic1"dhcpEnable="no" dnsUsingDhcp="no" ddnsEnable="yes" ddnsDomain=""
dnsPreferred="a.b.c.z" dnsAlternate="0.0.0.0" ddnsRefreshInterval="0" nicMode="dedicated" vicSlot="0" nicRedundancy="none"
vlanEnable="no" vlanId="1" vlanPriority="0" portProfile="" v6extEnabled="no" v6extIp="::" v6extGw="::" v6prefix="64" v6linkLocal="::"
v6SlaacIp="::" v6dhcpEnable="no" v6dnsUsingDhcp="no" v6dnsPreferred="::" v6dnsAlternate="::" subject="blade" autoNeg="enabled"
adminNetSpeed="auto" adminDuplex="auto" operNetSpeed="1Gbps" operDuplex="full" >
Quindi, interrogare CIMC visore su https://CIMC_IP/visore.html, il nome host "dlc-aci01-apic1" corrisponde a DN= `sys/rack-unit-1/mgmt/if-1`.

2. Gestione di CIMC tramite l'API REST
-
Nel passaggio 1 sono già stati identificati la classe e il nome distinto (DN) corrispondenti all'oggetto gestito (MO).
-
È possibile utilizzare il modulo Ansible community.general.imc_rest per gestire CIMC tramite API. Informazioni dettagliate si riferiscono a: imc_rest_module Documentazione
Utilizzare il metodo API configResolveClass per recuperare le informazioni
ConfigResolveClass: Il metodo recupera un oggetto gestito in una determinata classe. Se inHierarchical=true, i risultati contengono elementi figlio. Prendendo come esempio l'esecuzione di query sulla versione del firmware, utilizzare il metodo API configResolveClass e specificare l'ID classe dell'unità MO.
Output contenuto script andibile:
- name: IMC login and check
community.general.imc_rest:
hostname: '{{ imc_hostname }}'
username: '{{ imc_username }}'
password: '{{ imc_password }}'
validate_certs: false # only do this when you trust the network!
content: |
<configResolveClassinHierarchical='false'classId='firmwareRunning'/>
Utilizzare il metodo API configConfMo per modificare la configurazione
Per modificare la configurazione di MO utilizzando l'API CIMC, utilizzare il metodo configConfMo. Questo metodo è progettato per configurare o modificare le impostazioni di un disco magneto-ottico specifico. Quando si richiama configConfMo, è importante fornire le informazioni esatte sulla classe o sul DN del modello MO che si desidera modificare.

Output contenuto script andibile:
- name: change CIMC description
community.general.imc_rest:
hostname: '{{ imc_hostname }}'
username: '{{ imc_username }}'
password: '{{ imc_password }}'
validate_certs: false
content: |
<computeRackUnit dn="sys/rack-unit-1" usrLbl="new_lab_CIMC_description"/>
examples:
3. Esempio di flusso di lavoro di configurazione dell'automazione CIMC
Cisco APIC è un software per controller Cisco ACI installato su UCS serie C220. Il flusso di lavoro illustra il processo automatizzato di re-imaging del software APIC.
1. Login to CIMC with pre-check
- Retrieve firmware version
- Retrieve faults
- Retrieve TPM status
2. Update CIMC configurations
- Update management hostname
- Update Description
- Update Timezone
- Update ntp
- Enable SOL
- Update CIMC mapping vmedia
- Update CIMC boot order to CIMC-map
- Reboot CIMC
3. Ansible run shell expect to monitor installation status and enter iso link for APIC installation speed up
4. Retrieve CIMC post installation status
- Update CIMC boot order back to HDD
- Power-on host
Esempio di modulo ansibile:
Nota: L'esempio include solo informazioni sul contenuto, il modulo andibile completo fa riferimento al modulo community.general.imc_rest dal sito ufficiale Ansible
- name: Login to CIMC with pre-check
content: |
<configResolveClass inHierarchical='false' classId='firmwareRunning'/>
<configResolveClass inHierarchical='false' classId='faultInst'/>
<configResolveClass inHierarchical='false' classId='equipmentTpm'/>
- name: IMC update CIMC infra info
content: |
<mgmtIf dn="sys/rack-unit-1/mgmt/if-1" hostname="dlc-aci01-apic1"/>
<computeRackUnit dn="sys/rack-unit-1" usrLbl="ACI Lab - POD01 - dlc-aci01-apic1"/>
<topSystem dn="sys" timeZone="Asia/Shanghai"/>
<commNtpProvider dn="sys/svc-ext/ntp-svc" ntpServer1="ntp.esl.cisco.com"/>
- name: Update CIMC configurations
content: |
<lsbootVMedia dn="sys/rack-unit-1/boot-precision/vm-CIMC-map" name="CIMC-map" type="VMEDIA" subtype="cimc-mapped-dvd" order="1" state="Enabled" />
<commVMediaMap volumeName="ACI-automation" map="www" remoteShare="http://a.b.c.d/Images/ACI/4/4.2/" remoteFile="aci-apic-dk9.4.2.6l.iso" dn="sys/svc-ext/vmedia-svc/vmmap-ACI-automation" >
<computeRackUnit dn="sys/rack-unit-1" adminPower="hard-reset-immediate" />
# Ansible run shell expect to monitor installation status and enter iso link for APIC installation speed up
- name: copy apic init script to
template:
src: "init.sh"
dest: /tmp/init.sh
delegate_to: localhost
- name: Make script executable
file:
path: /tmp/init.sh
mode: "+x"
delegate_to: localhost
tags:
- render
- init
- name: Run the generated script
command: /tmp/init.sh
delegate_to: localhost
changed_when: no
tags:
- script
- name: Retrieve CIMC post installation status
content: |
<lsbootVMedia dn="sys/rack-unit-1/boot-precision/vm-CIMC-map" name="CIMC-map" status='removed'/>
<commVMediaMap dn="sys/svc-ext/vmedia-svc/vmmap-ACI-automation" volumeName="ACI-automation" status='removed' >
<lsbootStorage dn="sys/rack-unit-1/boot-policy/storage-read-write" access="read-write" order="1" type="storage"/>
<computeRackUnit dn="sys/rack-unit-1" adminPower="up" />
delegate_to: localhost
tags:
- retrieve_CIMC_status
Informazioni correlate
Cisco UCS Rack-Mount Server Guida per programmatori di Cisco IMC XML API
community.general.imc_rest modulo - Gestisce l'hardware Cisco IMC tramite l'API REST
Guida di riferimento al modello di informazioni di UCS Manager