尝试使用BIG-IP虚拟版。(第三部分:使用Ansible激活许可证)
首先
我們希望利用Ansible來進行基本設定,因為F5公司的BIG-IP對自動化非常支持,且基本設定大部分已經模塊化,在這次中我們希望能使用Ansible來進行基本設定操作。
-
- 【前】BIG-IP Virtual Editionを使ってみる。(その2:BIG-IP VEの起動とライセンス登録)
【次】BIG-IP Virtual Editionを使ってみる。(その4:Ansibleによる初期設定)
Ansible的参考资料
Ansible Automates Tokyo 2020的资料在以下公开,并附有示例,可供参考。
- F5自動化の取り組みとAnsiblex BIG-IP Playbookユースケースのご紹介
安装Ansible
准备用于使用Ansible的服务器。
这次是在以下地方创建的。
关于Ansible
基本设置将以“介绍F5自动化和Ansiblex BIG-IP Playbook用例”的内容为基础,但所介绍的Playbook并没有按照Ansible最佳实践的结构进行设置。
虽然最佳实践的构成从官方公布的内容到自我创造的各种形式都有,但我们会尽量向官方公布的构成靠拢来制定。
【注意】根据最新消息,从Ansible 2.10版本开始,将有一些重大更改,因此如果您使用2.10及更高版本的话,最佳实践的配置可能会发生变化,请您注意。
安装Ansible
我們將在準備好的 Ansible 執行伺服器上進行 Ansible 的安裝。
dnf -y install epel-release
dnf -y install ansible
当使用Ansible执行时,如果SSH指纹未在Ansible执行服务器上注册,则会出现错误,因此建议使用root用户先访问BIG-IP进行一次访问。
ssh -l root [BIG-IPのIPアドレス]
(略)
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Ansible的文件目录结构
这次将按照以下的构成进行。
请注意,如果介绍Ansible自身的规范等,将偏离本次讨论的主题,因此请各位自行查阅Ansible官网等相关资料以了解有关文件和目录的详细规范、含义等。
创建 Ansible Playbook
我在之前的文章中通过GUI激活了许可证。在“F5自动化工作以及Ansiblex BIG-IP Playbook用例介绍”中也提到了使用Ansible激活许可证的方法,所以我打算趁机尝试一下使用Playbook创建。
以下是创建的角色名单。
创建卷
我們將在roles目錄下創建各種角色。
如果要创建符合最佳实践的角色组成,您可以单独创建每个角色,但是使用ansible-galaxy命令可以为您创建符合最佳实践的角色目录结构和所需文件,因此我想使用ansible-galaxy命令创建角色的框架,并逐步创建Playbook。
cd roles/
ansible-galaxy init setup_bigip-license
顺便说一句,如果使用ansible-galaxy init命令创建角色,则角色将以以下结构在roles/[角色名]目录下进行创建。
files/ファイルを展開する際などに使用する実ファイルを格納handlers/設定後に実行する処理(サービス再起動等)を指定┗ main.yml
meta/メタデータを指定┗ main.yml
tasks/実行するタスクを指定┗ main.yml
templates/ファイルを展開する際などに使用する雛形ファイルを格納tests/テスト用実行用┣ inventory
┗ test.yml
vars/ロール用の変数を指定┗ main.yml
创建任务。
我们将在tasks目录中的main.yml文件中编写要执行的任务。
为了后续的复用,我们将所有根据设备而异的值都变为变量,并从单独的变量文件中读取。
---
# tasks file for setup_bigip-license
- name: BIG-IPライセンスアクティベート
bigip_device_license:
license_key: "{{ bigip_license }}"
accept_eula: "yes"
provider: "{{ bigip_provider }}"
delegate_to: "{{ bigip_delegate_to }}"
- name: BIG-IP LTMのnominalレベルプロビジョン
bigip_provision:
module: ltm
level: nominal
provider: "{{ bigip_provider }}"
delegate_to: "{{ bigip_delegate_to }}"
在“F5自动化措施和Ansiblex BIG-IP Playbook的使用案例介绍”中,提到了使用set_fact在Playbook内设置变量来指定provider的配置方法。但是,由于本次方案不采用单个文件的Playbook方式,并且变量集中在后续提到的组变量文件和主机变量文件中,这样更容易管理,所以没有进行set_fact的处理。
创建组变量
我们将在group_vars中创建一个共享的变量列表,以便在BIG-IP之间共享使用。
我打算通过一个名为bigip的名称来组织这个团队,所以我会创建一个名为bigip.yml的文件。
基本上,Ansible的BIG-IP模块是为通过API进行配置而设计的,所以当在BIG-IP上执行Ansible时,可以通过从Ansible执行服务器通过HTTPS访问API来进行配置。
因此,只要设置了用于GUI访问的用户ID和密码,就可以对BIG-IP进行设置。但如果没有进行SSH访问的设置,那么在执行Ansible时,默认情况下会失败的Gathering Facts,而且在使用除BIG-IP模块以外的模块时也会失败,因此还需要进行SSH访问的设置。
---
# BIG-IP SSHログイン設定
ansible_ssh_user: root
ansible_ssh_pass: [CLIパスワード]
# BIG-IP GUIログイン設定
bigip_user: admin
bigip_password: [GUIパスワード]
bigip_delegate_to: localhost
# Provider設定
bigip_provider:
server: "{{ bigip_server }}"
user: "{{ bigip_user }}"
password: "{{ bigip_password }}"
server_port: 443
validate_certs: no
顺便提一下,因为bigip_delegate_to的设置是通过API从Ansible执行服务器访问BIG-IP,所以要指定为localhost以表示Ansible执行服务器本身。
另外,在bigip_provider中指定的用于API访问的配置中,若validate_certs不是no,就会失败,因此设置为no。
创建主机变量
将每个主机的特定变量创建并添加到host_vars中。
在 bigip_license 中填写上一次取得的许可证号码。
---
bigip_license: XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX
bigip_server: [BIG-IPのIPアドレス]
创建库存文件
使用Ansible来注册构建BIG-IP。
这一次设置了两个设备,将群组名称设置为bigip,主机名设置为bigip01。
[bigip]
bigip01
创建每个组的角色执行文件
指定要执行的角色,针对bigip集群的主机。
另外,如前所述,由于BIG-IP用模块是通过API访问的,每次执行Gathering Facts都会变得很慢,因此最好不要执行。
---
- hosts: bigip
gather_facts: no
roles:
- setup_bigip-license
创建一个执行所有角色功能的文件
这次的情况下,虽然不是必要的,但我会按照最佳实践来制作。
在Ansible的最佳实践中,我们可以将各种处理过程记录在角色(roles)中,而不论设备如何,然后在每个角色执行文件中指定要执行的角色,这些角色存储在角色目录中。最后,在site.yml文件中导入每个组的角色执行文件,以构建整个环境的配置。
因为本次只创建了BIG-IP分支,所以只需设置导入bigip.yml定义。
---
- import_playbook: bigip.yml
执行Ansible
我们将执行实际创建的Playbook。
如果之前已激活了许可证,则正常情况下应显示“ok=2”,如果没有问题的话。
ansible-playbook -i hosts-all site.yml
PLAY [bigip] *******************************************************************
TASK [setup_bigip-license : BIG-IPライセンスアクティベート] ********************************
ok: [bigip01]
TASK [setup_bigip-license : BIG-IP LTMのnominalレベルプロビジョン] ***********************
ok: [bigip01]
PLAY RECAP *********************************************************************
bigip01 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最后
存在与否取决于模块,但是当看到像BIG-IP这样的网络设备在Ansible中可以轻松构建,虽然一开始需要学习成本,但我觉得网络基础设施人员也应该积极学习。
由于本次讲解的是创建License激活的Playbook,因此下一次我们将继续进行剩余的初始设置。