尝试使用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的服务器。

这次是在以下地方创建的。

スペック備考OSCentOS 8.2 2004ソフトウェアの選択最小限のインストールAnsibleバージョン2.9

关于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官网等相关资料以了解有关文件和目录的详细规范、含义等。

パス説明host_vars/ホストごとの変数設定ディレクトリ┗ bigip01.ymlbigip01用の変数ファイルgroup_vars/ホストグループごとの変数設定ディレクトリ┗ bigip.ymlbigipグループ用の変数ファイルbigip.ymlグループごとの実行するロールを指定しているファイルsite.ymlメインのPlaybookhosts-allインベントリファイルroles/ロール格納ディレクトリ┗ xxxx/各種ロール用ディレクトリ

创建 Ansible Playbook

我在之前的文章中通过GUI激活了许可证。在“F5自动化工作以及Ansiblex BIG-IP Playbook用例介绍”中也提到了使用Ansible激活许可证的方法,所以我打算趁机尝试一下使用Playbook创建。

以下是创建的角色名单。

ロール名説明setup_bigip-licenseライセンスアクティベートを行うロール

创建卷

我們將在roles目錄下創建各種角色。

如果要创建符合最佳实践的角色组成,您可以单独创建每个角色,但是使用ansible-galaxy命令可以为您创建符合最佳实践的角色目录结构和所需文件,因此我想使用ansible-galaxy命令创建角色的框架,并逐步创建Playbook。

cd roles/
ansible-galaxy init setup_bigip-license

顺便说一句,如果使用ansible-galaxy init命令创建角色,则角色将以以下结构在roles/[角色名]目录下进行创建。

パス説明README.mdReadmeファイルdefaults/デフォルトの変数を指定┗ main.yml
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,因此下一次我们将继续进行剩余的初始设置。

广告
将在 10 秒后关闭
bannerAds