Einleitung
In diesem Dokument wird beschrieben, wie Sie den Cisco Integrated Management Controller (CIMC) über das Ansible REST API-Modul konfigurieren.
Voraussetzungen
Anforderungen
Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:
Verwendete Komponenten
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.
CIMC-API - Überblick
Alle physischen und logischen Komponenten des Cisco UCS werden in einem Hierarchical Management Information Model (MIM) dargestellt, das auch als MIT bezeichnet wird. Jeder Knoten in der Struktur stellt ein verwaltetes Objekt (MO) oder eine Objektgruppe dar, die den Verwaltungsstatus und den Betriebsstatus enthält.
Die hierarchische Struktur beginnt am oberen Rand (sys) und enthält übergeordnete und untergeordnete Knoten. Jeder Knoten in dieser Struktur ist ein verwaltetes Objekt, und jedes Objekt in Cisco UCS hat einen eindeutigen Distinguished Name (DN), der das Objekt und seine Position in der Struktur beschreibt. Verwaltete Objekte sind Abstraktionen von Cisco UCS-Ressourcen wie CPUs, DIMMs, Adapterkarten, Lüfter und Netzteile.
Abbildung der CIMC-MIM-Struktur:
|——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)
Objektname:
- DN: Mit dem Distinguished Name können Sie ein Zielobjekt eindeutig identifizieren.
- Weiterleitungsnummer: Der relative Name identifiziert ein Objekt im Kontext seines übergeordneten Objekts.
Beispiel für diesen Distinguished Name:
<dn = "sys/rack-unit-1/adaptor-1/host-eth-eth2"/>
Besteht aus 4 relativen Namen:
topSystem MO: rn="sys"
computeRackUnit MO: rn ="rack-unit-1"
adaptorUnit MO: rn="adaptor-<id>"
adaptorHostEthIf MO: rn="host-eth-<id>"
API für diesen Artikel:
-
Authentifizierung: aaaLogin. Anfängliche Methode zur Anmeldung. Verwenden Sie die aaaLogin-Methode, um ein gültiges Cookie abzurufen.
-
Abfrage: configResolveDn. Ruft Objekte nach DN ab.
-
Konfiguration: configConfMo. Mit der configConfMo-Methode werden eine oder mehrere Eigenschaften in einem verwalteten Objekt (MO) konfiguriert. Die zu konfigurierende MO wird eindeutig durch einen Distinguished Name (DN) identifiziert.
Anmerkung:
Viele Abfragemethoden enthalten ein inHierarchical-Argument, das einen booleschen Wert akzeptiert (true/yes oder false/no). Wenn dieses Argument auf true festgelegt ist, gibt die Methode alle untergeordneten Objekte in der Hierarchie zurück.
Konfigurationen
1. Suchen Sie die Klasse oder den DN des CIMC-verwalteten Objekts (MO).
Um die Konfiguration von CIMC über seine API zu automatisieren, müssen Sie die spezifischen Klassen- oder DN-Informationen (Distinguished Name) für die zu konfigurierenden Managed Objects (MOs) festlegen.
1a) Verwenden Sie die API, um sich beim CIMC anzumelden und die Cookie-Informationen abzurufen.
Senden Sie eine POST-Anforderung an https://{{apic_cimc_ip}}/nuova, und geben Sie die aaaLogin-Methode an. Geben Sie einen Benutzernamen und ein Kennwort ein.
Kopieren Sie das Cookie aus der API-Antwort.

Alternativ können Sie curl verwenden, um die Cookie-Informationen abzurufen.
curl -k -d "" https://apic_cimc_ip/nuova
1b) Verwenden der API-Abfragemethode configResolveDn zum Abrufen aller MO-Informationen (Managed Object)
Bei Verwendung von configResolveDn mit inHierarchical="true" und dn="sys/" werden alle MO-Informationen (Managed Object) vom CIMC abgerufen.
configResolveDn: Die configResolveDn-Methode ruft ein einzelnes verwaltetes Objekt für einen angegebenen DN ab.
inHierarchical=true: Wenn sie auf true festgelegt ist, werden alle Informationen zu untergeordneten Knoten zurückgegeben. Diese Kombination ermöglicht das Abrufen der MO-Informationen aller Knoten und Unterknoten vom CIMC.
dn="sys/": Dies ist die oberste Wurzel des MIT.
API-Antwort:

Kopieren Sie die Postman-Ausführungsantwort in einen Texteditor wie Notepad, PyCharm oder Visual Studio Code, um die Klasse und den DN basierend auf MO zu durchsuchen.
Beispiel 1: Abfragen der Klasse und des DN der Zeitzone
Die in der aktuellen CIMC-GUI konfigurierte Zeitzone lautet "Asia/Shanghai".

Suchen Sie nach 'Asia/Shanghai' aus den Ergebnissen, die von Postman in Schritt 1b zurückgegeben wurden. Die Zeitzone ist "Asia/Shanghai", die Klasse ist "topSystem" und die DN ist "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" >
Beispiel 2: Abfrage der Klasse und des DN des Hostnamens
Der in der aktuellen CIMC-GUI konfigurierte Hostname lautet "dlc-aci01-apic1".

Suchen Sie in den Ergebnissen von Postman nach "dlc-aci01-apic1". Der Hostname lautet "dlc-aci01-apic1", die Klasse "mgmtIf" und die RN "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" >
Fragen Sie dann den CIMC-Visor von https://CIMC_IP/visore.html ab, wobei der Hostname "dlc-aci01-apic1" dem DN= `sys/rack-unit-1/mgmt/if-1` entspricht.

2. Management von CIMC über REST API
-
In Schritt 1 haben Sie bereits die Klasse und den Distinguished Name (DN) identifiziert, die dem verwalteten Objekt (MO) entsprechen.
-
Sie können das Modul Ansible community.general.imc_rest verwenden, um CIMC über eine API zu verwalten. Detailinformationen beziehen sich auf: imc_rest_module Dokumentation
Verwenden der API-Methode configResolveClass zum Abrufen von Informationen
configResolveClass: Die Methode ruft ein verwaltetes Objekt in einer bestimmten Klasse ab. Wenn inHierarchical=true, enthalten die Ergebnisse untergeordnete Elemente. Verwenden Sie zum Beispiel die API-Methode configResolveClass, und geben Sie die classID der MO an.
Ansible Ausgabe von Skriptinhalten:
- 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'/>
Verwenden der API-Methode configConfMo zum Ändern der Konfiguration
Verwenden Sie die configConfMo-Methode, um die Konfiguration der MO mithilfe der CIMC-API zu ändern. Diese Methode dient zum Konfigurieren oder Ändern der Einstellungen eines bestimmten MO. Beim Aufrufen von configConfMo müssen Sie die genauen Klassen- oder DN-Informationen der MO angeben, die Sie ändern möchten.

Ansible Ausgabe von Skriptinhalten:
- 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. Beispiel für einen CIMC-Automatisierungskonfigurations-Workflow
Der Cisco APIC ist eine Cisco ACI-Controller-Software, die auf der UCS C220-Serie installiert ist. Der Workflow illustriert den automatisierten Prozess zur Wiederherstellung der APIC-Software.
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
Beispiel für ein mögliches Modul:
Anmerkung: Das Beispiel enthält nur Inhaltsinformationen, das vollständige ansible-Modul verweist auf das Modul community.general.imc_rest von der offiziellen Website von 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
Zugehörige Informationen
Cisco UCS Rackmount-Server Cisco IMC XML API - Programmierhandbuch
community.general.imc_rest-Modul - Verwaltung der Cisco IMC-Hardware über die REST-API
Referenz zum UCS Manager-Informationsmodell