此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍使用Ansible自动执行Firepower管理中心(FMC)以创建Firepower威胁防御(FTD)高可用性的步骤。
Cisco 建议您了解以下主题:
在这个实验室的背景下,Ansible被部署在Ubuntu。
必须确保Ansible成功安装在Ansible支持的任何平台上,才能运行本文中引用的Ansible命令。
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
Ansible是一个功能齐全的工具,在管理网络设备方面显示了显着的功效。使用Ansible可以采用多种方法来运行自动化任务。本文所采用的方法为试验提供了参考。
在本示例中,成功运行攻略示例后会创建其FTD高可用性和备用IP地址。
因为 思科不支持示例脚本或客户编写的脚本, 我们提供了一些示例,您可以根据自己的需求进行测试。
必须确保已经正式完成初步核查。
步骤1: 通过SSH或控制台连接到Ansible服务器的CLI。
第二步:运行命令ansible-galaxy collection install cisco.fmcansible
,以便在Ansible服务器上安装FMC的Ansible集合。
cisco@inserthostname-here:~$ ansible-galaxy collection install cisco.fmcansible
第三步:运行命令mkdir /home/cisco/fmc_ansible
,以创建新的文件夹来存储相关文件。在本示例中,主目录为/home/cisco/,新文件夹名称为fmc_ansible。
cisco@inserthostname-here:~$ mkdir /home/cisco/fmc_ansible
第四步: 导航到文件夹/home/cisco/fmc_ansible,创建资产文件。在本示例中,资产文件名为inventory.ini。
cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/
ccisco@inserthostname-here:~/fmc_ansible$ ls
inventory.ini
您可以复制此内容并粘贴以备使用,并使用准确的参数更改bold部分。
[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
第五步: 导航到/home/cisco/fmc_ansible文件夹,创建用于创建FTD HA的变量文件。在本示例中,变量文件名为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
您可以复制此内容并将其粘贴以供使用,并更改 粗体 具有准确参数的部分。
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'
第六步: 导航到文件夹/home/cisco/fmc_ansible, c创建用于创建FTD HA的手册文件。在本示例中,手册文件名为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
您可以复制此内容并粘贴以备使用,并使用准确的参数更改bold部分。
---
- 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
注意:本示例手册中粗体显示的名称用作变量。这些变量的对应值保留在变量文件中。
步骤 7. 导航到文件夹/home/cisco/fmc_ansible, run命令 ansible-playbook -i
才能演出不可能的任务。
在本示例中,命令为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
步骤 8 导航到文件夹/home/cisco/fmc_ansible,创建用于更新FTD HA备用IP地址的变量文件。在本示例中,变量文件名是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
您可以复制此内容并将其粘贴以供使用,并使用准确的参数更改粗体部分。
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'
步骤 9 导航到文件夹/home/cisco/fmc_ansible,创建用于更新FTD HA备用IP地址的攻略文件。在本示例中,手册文件名为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
您可以复制此内容并粘贴以备使用,并使用准确的参数更改bold部分。
--- - 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")
注意:本示例手册中粗体显示的名称用作变量。这些变量的对应值保留在变量文件中。
步骤 10 导航到文件夹/home/cisco/fmc_ansible, run命令 ansible-playbook -i
才能演出不可能的任务。
在本示例中,命令为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
在运行可能的任务之前,登录FMC GUI。导航到Devices > Device Management,两个FTD在FMC上成功注册,并配置了访问控制策略。
运行完可能的任务后,登录FMC GUI。导航到Devices > Device Management, FTD HA已成功创建。
单击Edit of FTD HA,故障切换ip地址和接口备用ip地址配置成功。
本部分提供的信息可用于对配置进行故障排除。
为了查看ansible攻略手册的更多日志,您可以使用 — vvv运行ansible攻略。
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
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
06-Feb-2024 |
初始版本 |