La documentazione per questo prodotto è stata redatta cercando di utilizzare un linguaggio senza pregiudizi. Ai fini di questa documentazione, per linguaggio senza di pregiudizi si intende un linguaggio che non implica discriminazioni basate su età, disabilità, genere, identità razziale, identità etnica, orientamento sessuale, status socioeconomico e intersezionalità. Le eventuali eccezioni possono dipendere dal linguaggio codificato nelle interfacce utente del software del prodotto, dal linguaggio utilizzato nella documentazione RFP o dal linguaggio utilizzato in prodotti di terze parti a cui si fa riferimento. Scopri di più sul modo in cui Cisco utilizza il linguaggio inclusivo.
Cisco ha tradotto questo documento utilizzando una combinazione di tecnologie automatiche e umane per offrire ai nostri utenti in tutto il mondo contenuti di supporto nella propria lingua. Si noti che anche la migliore traduzione automatica non sarà mai accurata come quella fornita da un traduttore professionista. Cisco Systems, Inc. non si assume alcuna responsabilità per l’accuratezza di queste traduzioni e consiglia di consultare sempre il documento originale in inglese (disponibile al link fornito).
In questo documento viene descritto come automatizzare Firepower Management Center (FMC) per creare Firepower Threat Defense (FTD) High Availability con Ansible.
Cisco raccomanda la conoscenza dei seguenti argomenti:
Nel contesto di questa situazione di laboratorio, Ansible è schierato su Ubuntu.
È essenziale assicurarsi che Ansible sia installato correttamente su qualsiasi piattaforma supportata da Ansible per l'esecuzione dei comandi Ansible a cui si fa riferimento in questo articolo.
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
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.
Ansible è uno strumento estremamente versatile che dimostra una notevole efficacia nella gestione dei dispositivi di rete. Numerose metodologie possono essere impiegate per eseguire operazioni automatizzate con Ansible. Il metodo utilizzato in questo articolo serve da riferimento ai fini della prova.
In questo esempio, la disponibilità elevata FTD e l'indirizzo IP di standby dell'FTD vengono creati dopo l'esecuzione corretta dell'esempio di playbook.
Poiché Cisco non supporta gli script di esempio o quelli scritti dal cliente, sono disponibili alcuni esempi che è possibile verificare in base alle esigenze.
È essenziale garantire che la verifica preliminare sia stata debitamente completata.
Passaggio 1. Connettersi alla CLI del server Ansible tramite SSH o console.
Passaggio 2. Eseguire il comando ansible-galaxy collection install cisco.fmcansible per installare la raccolta Ansible di FMC nel server Ansible.
cisco@inserthostname-here:~$ ansible-galaxy collection install cisco.fmcansible
Passaggio 3. Eseguire il comando
mkdir /home/cisco/fmc_ansible per creare una nuova cartella in cui archiviare i file correlati. In questo esempio, la home directory è /home/cisco/, il nome della nuova cartella è fmc_ansible.
cisco@inserthostname-here:~$ mkdir /home/cisco/fmc_ansible
Passaggio 4. Passare alla cartella /home/cisco/fmc_ansible, Crea file di inventario. In questo esempio, il nome del file di inventario è inventory.ini.
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
inventory.ini
Potete duplicare questo contenuto e incollarlo per utilizzarlo, modificando le sezioni in grassetto con parametri accurati.
[fmc]
10.0.5.11
[fmc:vars]
ansible_user=cisco
ansible_password=cisco
ansible_httpapi_port=443
ansible_httpapi_use_ssl=True
ansible_httpapi_validate_certs=False
network_type=HOST
ansible_network_os=cisco.fmcansible.fmc
Passaggio 5. Passare alla cartella /home/cisco/fmc_ansible, creare un file variabile per la creazione di FTD HA. In questo esempio, il nome del file della variabile è fmc-create-ftd-ha-vars.yml.
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-create-ftd-ha-vars.yml inventory.ini
Potete duplicare questo contenuto e incollarlo per utilizzarlo, modificando le sezioni in grassetto con parametri accurati.
user: domain: 'Global' device_name: ftd1: 'FTDA' ftd2: 'FTDB' ftd_ha: name: 'FTD_HA' active_ip: '192.168.1.1' standby_ip: '192.168.1.2' key: cisco mask24: '255.255.255.0'
Passaggio 6. Passare alla cartella /home/cisco/fmc_ansible, creare il file della playbook per la creazione di FTD HA. In questo esempio, il nome del file della playbook è fmc-create-ftd-ha-playbook.yaml.
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-vars.yml inventory.ini
Potete duplicare questo contenuto e incollarlo per utilizzarlo, modificando le sezioni in grassetto con parametri accurati.
--- - name: FMC Create FTD HA hosts: fmc connection: httpapi tasks: - name: Task01 - Get User Domain cisco.fmcansible.fmc_configuration: operation: getAllDomain filters: name: "{{ user.domain }}" register_as: domain - name: Task02 - Get FTD1 cisco.fmcansible.fmc_configuration: operation: getAllDevice path_params: domainUUID: '{{ domain[0].uuid }}' filters: name: "{{ device_name.ftd1 }}" register_as: ftd1_list - name: Task03 - Get FTD2 cisco.fmcansible.fmc_configuration: operation: getAllDevice path_params: domainUUID: '{{ domain[0].uuid }}' filters: name: "{{ device_name.ftd2 }}" register_as: ftd2_list - name: Task04 - Get Physical Interfaces cisco.fmcansible.fmc_configuration: operation: getAllFTDPhysicalInterface path_params: containerUUID: '{{ ftd1_list[0].id }}' domainUUID: '{{ domain[0].uuid }}' register_as: primary_physical_interfaces - name: Task05 - Configure FTD HA cisco.fmcansible.fmc_configuration: operation: "createFTDHADeviceContainer" data: primary: {'id': '{{ ftd1_list[0].id }}'} secondary: {'id': '{{ ftd2_list[0].id }}'} name: "{{ ftd_ha.name }}" type: "DeviceHAPair" ftdHABootstrap: { 'isEncryptionEnabled': false, 'encKeyGenerationScheme': 'CUSTOM', 'sharedKey': "{{ ftd_ha.key }}", 'useSameLinkForFailovers': true, 'lanFailover': { 'useIPv6Address': false, 'subnetMask': "{{ ftd_ha.mask24 }}", 'interfaceObject': { 'id': '{{ primary_physical_interfaces[7].id }}', 'type': 'PhysicalInterface', 'name': 'GigabitEthernet0/7' }, 'standbyIP': "{{ ftd_ha.standby_ip }}", 'logicalName': 'LAN-INTERFACE', 'activeIP': "{{ ftd_ha.active_ip }}" }, 'statefulFailover': { 'useIPv6Address': false, 'subnetMask': "{{ ftd_ha.mask24 }}", 'interfaceObject': { 'id': '{{ primary_physical_interfaces[7].id }}', 'type': 'PhysicalInterface', 'name': 'GigabitEthernet0/7' }, 'standbyIP': "{{ ftd_ha.standby_ip }}", 'logicalName': 'STATEFUL-INTERFACE', 'activeIP': "{{ ftd_ha.active_ip }}" } } path_params: domainUUID: "{{ domain[0].uuid }}" - name: Task06 - Wait for FTD HA Ready ansible.builtin.wait_for: timeout: 360 delegate_to: localhost - name: Task07 - Get FTD HA object cisco.fmcansible.fmc_configuration: operation: "getAllFTDHADeviceContainer" path_params: domainUUID: "{{ domain[0].uuid }}" query_params: expanded: true register_as: ftd_ha_container delay: 15 - name: Task08 - Confirm Standby Ready Status cisco.fmcansible.fmc_configuration: operation: "getFTDHADeviceContainer" path_params: objectId: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" register_as: ha_status until: ha_status.metadata.secondaryStatus.currentStatus is match("Standby") retries: 1000 delay: 2
Nota: i nomi in grassetto in questo esempio di playbook fungono da variabili. I valori corrispondenti per queste variabili vengono mantenuti nel file delle variabili.
Passaggio 7. Passare alla cartella /home/cisco/fmc_ansible, eseguire il comando
ansible-playbook -i <inventory_name>.ini <playbook_name>.yaml -e@"<playbook_vars>.yml"per eseguire l'attività andibile.
Nell'esempio, il comando è
ansible-playbook -i inventory.ini fmc-create-ftd-ha-playbook.yaml -e@"fmc-create-ftd-ha-vars.yml" .
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-vars.yml inventory.ini cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-create-ftd-ha-playbook.yaml -e@"fmc-create-ftd-ha-vars.yml" PLAY [FMC Create FTD HA] ***************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************* ok: [10.0.5.11] TASK [Task01 - Get User Domain] ********************************************************************************************************************************** ok: [10.0.5.11] TASK [Task02 - Get FTD1] ***************************************************************************************************************************************** ok: [10.0.5.11] TASK [Task03 - Get FTD2] ***************************************************************************************************************************************** ok: [10.0.5.11] TASK [Task04 - Get Physical Interfaces] ************************************************************************************************************************** ok: [10.0.5.11] TASK [Task05 - Configure FTD HA] ********************************************************************************************************************************* changed: [10.0.5.11] TASK [Task06 - Wait for FTD HA Ready] **************************************************************************************************************************** ok: [10.0.5.11] TASK [Task07 - Get FTD HA object] ******************************************************************************************************************************** ok: [10.0.5.11] TASK [Task08 - Confirm Standby Ready Status] ********************************************************************************************************************* ok: [10.0.5.11] PLAY RECAP ******************************************************************************************************************************************************* 10.0.5.11 : ok=9 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Passaggio 8. Passare alla cartella /home/cisco/fmc_ansible, creare un file di variabili per l'aggiornamento dell'indirizzo IP di standby FTD HA. In questo esempio, il nome del file della variabile è fmc-create-ftd-ha-standby-ip-vars.yml.
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-standby-ip-vars.yml fmc-create-ftd-ha-vars.yml inventory.ini
È possibile duplicare il contenuto e incollarlo per utilizzarlo, modificando le sezioni in grassetto con i parametri accurati.
user: domain: 'Global' ftd_data: outside_name: 'Outside' inside_name: 'Inside' outside_ip: '10.1.1.1' inside_ip: '10.1.2.1' mask24: '255.255.255.0' ftd_ha: name: 'FTD_HA' outside_standby: '10.1.1.2' inside_standby: '10.1.2.2'
Passaggio 9. Passare alla cartella /home/cisco/fmc_ansible, creare il file della playbook per aggiornare l'indirizzo IP di standby FTD HA. In questo esempio, il nome del file della playbook è fmc-create-ftd-ha-standby-ip-playbook.yaml.
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-standby-ip-playbook.yaml fmc-create-ftd-ha-standby-ip-vars.yml fmc-create-ftd-ha-vars.yml inventory.ini
Potete duplicare questo contenuto e incollarlo per utilizzarlo, modificando le sezioni in grassetto con parametri accurati.
--- - name: FMC Update FTD HA Interface Standby IP hosts: fmc connection: httpapi tasks: - name: Task01 - Get User Domain cisco.fmcansible.fmc_configuration: operation: getAllDomain filters: name: "{{ user.domain }}" register_as: domain - name: Task02 - Get FTD HA Object cisco.fmcansible.fmc_configuration: operation: "getAllFTDHADeviceContainer" path_params: domainUUID: "{{ domain[0].uuid }}" query_params: expanded: true register_as: ftd_ha_container - name: Task03 - Get Outside Interface cisco.fmcansible.fmc_configuration: operation: "getAllFTDHAMonitoredInterfaces" path_params: containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" filters: name: "{{ ftd_data.outside_name }}" register_as: outside_interface - name: Task04 - Get Inside Interface cisco.fmcansible.fmc_configuration: operation: "getAllFTDHAMonitoredInterfaces" path_params: containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" filters: name: "{{ ftd_data.inside_name }}" register_as: inside_interface - name: Task05 - Configure Standby IP-Outside cisco.fmcansible.fmc_configuration: operation: "updateFTDHAMonitoredInterfaces" data: id: "{{ outside_interface[0].id }}" name: "{{ outside_interface[0].name }}" ipv4Configuration: {'standbyIPv4Address': "{{ ftd_ha.outside_standby }}"} monitorForFailures: true path_params: objectId: "{{ outside_interface[0].id }}" containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" - name: Task06 - Config Standby IP-Inside cisco.fmcansible.fmc_configuration: operation: "updateFTDHAMonitoredInterfaces" data: id: "{{ inside_interface[0].id }}" name: "{{ inside_interface[0].name }}" ipv4Configuration: {'standbyIPv4Address': "{{ ftd_ha.inside_standby }}"} monitorForFailures: true path_params: objectId: "{{ inside_interface[0].id }}" containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" - name: Task07 - Get Deployable Devices cisco.fmcansible.fmc_configuration: operation: getDeployableDevice path_params: domainUUID: '{{ domain[0].uuid }}' query_params: expanded: true register_as: deploy_devices - name: Task08 - Start Deployment cisco.fmcansible.fmc_configuration: operation: createDeploymentRequest data: version: '{{ deploy_devices[0].version }}' deviceList: - '{{ deploy_devices[0].device.id }}' forceDeploy: True path_params: domainUUID: '{{ domain[0].uuid }}' register_as: deployment_job - name: Task09 - Wait for Deployment Complete ansible.builtin.wait_for: timeout: 240 delegate_to: localhost - name: Task10 - Poll Deployment Status Until Deployment Successful cisco.fmcansible.fmc_configuration: operation: getDeploymentDetail path_params: containerUUID: '{{ deploy_devices[0].device.id }}' domainUUID: '{{ domain[0].uuid }}' register_as: deployment_status until: deployment_status[0].status is match("SUCCEEDED") retries: 1000 delay: 3 - name: Task11 - Stop The Playbook If The Deployment Failed fail: msg: 'Deployment failed. Status: {{ deployment_status[0].status }}' when: deployment_status[0].status is not match("SUCCEEDED")
Nota: i nomi in grassetto in questo esempio di playbook fungono da variabili. I valori corrispondenti per queste variabili vengono mantenuti nel file delle variabili.
Passaggio 10. Passare alla cartella /home/cisco/fmc_ansible, eseguire il comando
ansible-playbook -i <inventory_name>.ini <playbook_name>.yaml -e@"<playbook_vars>.yml"per eseguire l'attività andibile.
Nell'esempio, il comando è
ansible-playbook -i inventory.ini fmc-create-ftd-ha-standby-ip-playbook.yaml -e@"fmc-create-ftd-ha-standby-ip-vars.yml" .
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-standby-ip-playbook.yaml fmc-create-ftd-ha-standby-ip-vars.yml fmc-create-ftd-ha-vars.yml inventory.ini
cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-create-ftd-ha-standby-ip-playbook.yaml -e@"fmc-create-ftd-ha-standby-ip-vars.yml" PLAY [FMC Update FTD HA Interface Standby IP] ******************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************* ok: [10.0.5.11] TASK [Task01 - Get User Domain] ********************************************************************************************************************************** ok: [10.0.5.11] TASK [Task02 - Get FTD HA Object] ******************************************************************************************************************************** ok: [10.0.5.11] TASK [Task03 - Get Outside Interface] **************************************************************************************************************************** ok: [10.0.5.11] TASK [Task04 - Get Inside Interface] ***************************************************************************************************************************** ok: [10.0.5.11] TASK [Task05 - Configure Standby IP-Outside] ********************************************************************************************************************* changed: [10.0.5.11] TASK [Task06 - Config Standby IP-Inside] ************************************************************************************************************************* changed: [10.0.5.11] TASK [Task07 - Get Deployable Devices] *************************************************************************************************************************** ok: [10.0.5.11] TASK [Task08 - Start Deployment] ********************************************************************************************************************************* changed: [10.0.5.11] TASK [Task09 - Wait for Deployment Complete] ********************************************************************************************************************* ok: [10.0.5.11] TASK [Task10 - Poll Deployment Status Until Deployment Successful] *********************************************************************************************** ok: [10.0.5.11] TASK [Task11 - Stop The Playbook If The Deployment Failed] ******************************************************************************************************* skipping: [10.0.5.11] PLAY RECAP ******************************************************************************************************************************************************* 10.0.5.11 : ok=11 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Verifica
Prima di eseguire l'attività ansibile, accedere all'interfaccia utente di FMC. Passare a Dispositivi > Gestione dispositivi, due FTD registrati correttamente sul FMC con criteri di controllo di accesso configurati.
Dopo aver eseguito l'attività ansibile, accedere all'interfaccia utente di FMC. Passare a Dispositivi > Gestione dispositivi. FTD HA è stato creato correttamente.
Fare clic su Edit of FTD HA (Modifica di FTD HA) per configurare correttamente l'indirizzo IP di failover e l'indirizzo IP di standby dell'interfaccia.
Risoluzione dei problemi
In questa sezione vengono fornite informazioni utili per risolvere i problemi di configurazione.
Per visualizzare più registri di un playbook andibile, è possibile eseguire un playbook ansibile con -vv.
cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-create-ftd-ha-standby-ip-playbook.yaml -e@"fmc-create-ftd-ha-standby-ip-vars.yml" -vvv
Informazioni correlate
Revisione | Data di pubblicazione | Commenti |
---|---|---|
1.0 |
06-Feb-2024 |
Versione iniziale |