尝试通过Ansible来控制BIG-IP①
首先 –
由于想要使用Ansible来控制BIG-IP,所以我尝试了一下。
首先是搭建验证环境。
验证环境
VMWare ESXi 5.5、CentOS Linux 7.4.1708(核心版本)、Ansible 2.4.0.0和BIG-IP VE试用版12.1.2构建0.0.249。
ansible 2.4 在 Python 環境中的安裝路徑是:/opt/ansible2.4。
playbook 的存放位置是:/opt/playbook。
ansible 的執行使用者是 ansibleuser。
环境建设
CentOS 7.4
以最小化的方式安装CnetOS7.4。
Ansible 2.4版本
截至2017/10/17,CentOS标准仓库只提供了Ansible 2.3.2.0的版本。
由于2.4版本增加了很多与BIG-IP相关的模块,为了使用2.4版本,需要通过pip进行安装。
为了不影响操作系统的标准Python包,需要使用virtualenv进行环境分离。
-
- 対応するBIG-IPのバージョンについて
-
- Ansibleの各モジュール毎のドキュメントに、動作要件としてBIG-IPのバージョンが書かれていることがあるので、使う前にチェックしておいた方が良いでしょう。
-
- ansible2.4から管理対象(接続先)の動作要件のPythonのバージョンが2.6以上に変わっている。
-
- BIG-IPの11系はPython2.4、12系はPython2.6なので、11系でrawモジュール等、F5以外のモジュールを使うときは、動かないものがあるかもしれません。
-
- 必要なライブラリなどのインストール
-
- pipでインストールするときに必要とされるパッケージ等をインストールする。
- ansibleの実行時に必要とされるOSのパッケージ(sshpass)や、ベースになるコンフィグ(/etc/ansible/ansible.cfg)を流用するため、標準パッケージのansibleもインストールする。
# yum install ansible libffi-devel gcc python-devel libyaml-devel openssl-devel python-virtualenv -y
- ansible用のpython環境を作成
# mkdir /opt/ansible24
# cd /opt
# virtualenv --no-site-packages ansible24
# source /opt/ansible24/bin/activate
# pip install --upgrade pip
# pip install --upgrade setuptools
# pip install ansible
# pip install f5-sdk bigsuds netaddr
-
- ansible実行ユーザの作成
-
- 通常はpythonの仮想環境を切替えて使用するが、面倒なので、ログイン時に2.4に切り替えてくれるユーザを作成する。
- playbookを作成するディレクトリも用意しておく。
# useradd ansibleuser
# passwd ansibleuser
# echo "source /opt/ansible24/bin/activate" >> /home/ansibleuser/.bash_profile
# mkdir /opt/playbook
# chown ansibleuser:ansibleuser /opt/playbook
BIG-IP VE试用版
在浏览 BIG-IP VE 设置文档的同时进行设置。
https://support.f5.com/kb/en-us/products/big-ip_ltm/manuals/product/bigip-ve-setup-vmware-esxi-12-1-0.html
发布BIG-IP VE试用版。
-
- 評価版の申し込み
-
- 以下のサイトから評価版の申し込みを行うと、ライセンスキーが送られてくる。
-
- https://www.f5.com/trial/big-ip-trial.php
-
- ESXi用の仮想イメージのダウンロード
-
- ライセンスキーと一緒に、ダウンロード先のURLも記載されているので、そこからVMWareESXi用のBIG-IP VE imageをダウンロードする。
-
- https://devcentral.f5.com/articles/getting-started-with-big-ip-ve-trial-22469
-
- イメージ(OVF)の展開
-
- NICがとして、Management,Internal,External,HAの4つがあるので、ESXiにポートグループを4つ用意する。一番目が管理ポートになる。ポート作成後、ダウンロードしたイメージ(OVF)をデプロイする。
-
- 起動
- BIG-IP VE trialの仮想マシンの電源をいれる。
BIG-IP VE试用版的初始设置
-
- ManagementポートのIPアドレス設定
- 仮想マシンコンソール上で、root/defaultでログインし、以下のようにIPアドレスを設定する。
# tmsh
(tmos)# modify sys global-settings mgmt-dhcp disabled
(tmos)# create sys management-ip xxx.xxx.xxx.xxx/255.255.255.0
(tmos)# create sys management-route default gateway yyy.yyy.yyy.yyy
(tmos)# save sys config
(tmos)# quit
# exit
以Ansible进行控制
Ansible的操作是由ansible用户进行的。
创建清单文件(与BIG-IP的连接设置)
$ cd /opt/playbook/
$ vi hosts
localhost ansible_connection=local ansible_python_interpreter=python
bigip ansible_host=XXX.XXX.XXX.XX
[all:vars]
bigip_ip=XXX.XXX.XXX.XX
bigip_user=ansibleuser
bigip_passwd=password
BIG-IP任务(Ansible模块)通常在本地主机上执行,并调用远程的BIG-IP API。
除了在清单中列出的主机之外,还需要设置变量来连接到BIG-IP(地址/帐户/密码)。
在实际运行时,请妥善操作账户和密码,比如使用ansible vault进行加密。
第二行的主机是为了使用F5模块以外的原始模块等,像在Linux上一样通过SSH连接进行操作而编写的。
连接测试
使用bigip_command指令在F5设备上运行任意命令,通过Playbook连接并执行tmsh命令获取版本信息来进行连接测试。
- playbookの作成
$ vi connection_test.yml
- hosts: localhost
become: no
gather_facts: no
vars_prompt:
- name: "bigip_ip"
prompt: "Enter BIG-IP ip address "
private: no
- name: "bigip_user"
prompt: "Enter BIG-IP user "
private: no
- name: "bigip_passwd"
prompt: "Enter BIG-IP password "
private: yes
tasks:
- name: run show version on remote devices
bigip_command:
commands: show sys version
server: "{{ bigip_ip }}"
user: "{{ bigip_user }}"
password: "{{ bigip_passwd }}"
validate_certs: "no"
register: result
- debug: var=result.stdout_lines
- playbookの実行
$ ansible-playbook -i hosts connection_test.yml
Enter BIG-IP ip address : XXX.XXX.XXX.XXX <--- BIG-IPのIPアドレスを入力
Enter BIG-IP user : root <--- BIG-IPのユーザを入力
Enter BIG-IP password : <--- BIG-IPのパスワードを入力。表示はされない。
PLAY [localhost] *****************************************************
TASK [run show version on remote devices] ****************************
changed: [localhost]
TASK [debug] *********************************************************
ok: [localhost] => {
"result.stdout_lines": [
[
"",
"Sys::Version",
"Main Package",
" Product BIG-IP",
" Version 12.1.2",
" Build 0.0.249",
" Edition Final",
" Date Wed Nov 30 16:04:00 PST 2016",
"",
""
]
]
}
PLAY RECAP ***********************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
创建用户
使用bigip_user可以在BIG-IP上管理用户帐户和用户属性,创建一个与root用户不同的ansible用户。
* 虽然不是必需的,但为了验证目的,本次将创建一个用户。
- playbookの作成
$ vi useradd.yml
- hosts: localhost
become: no
gather_facts: no
tasks:
- name: Add the user 'ansibleuser' as an admin
bigip_user:
server: "{{ bigip_ip }}"
user: "root"
password: "default"
username_credential: "{{ bigip_user }}"
password_credential: "{{ bigip_passwd }}"
shell: "bash"
full_name: "{{ bigip_user }}"
partition_access: "all:admin"
update_password: "on_create"
state: "present"
- playbookの実行
$ ansible-playbook -i hosts useradd.yml
- 接続テストで使用したPlaybookで、作成したユーザの接続テスト
$ ansible-playbook -i hosts connection_test.yml
保存设置
如果不将内存中的设置保存到文件中,它们会在重新启动等情况下消失,所以请保存。
不仅限于bigip_user模块,其他模块也可能是同样的情况,所以如果更改设置没有问题的话,请保存。
- playbookの作成
$ vi sava.yml
- hosts: localhost
become: no
gather_facts: no
tasks:
- name: Save the running configuration of the BIG-IP
bigip_config:
save: yes
server: "{{ bigip_ip }}"
user: "{{ bigip_user }}"
password: "{{ bigip_passwd }}"
validate_certs: "no"
state: "present"
- playbookの実行
$ ansible-playbook -i hosts save.yml
许可证激活
ansible没有BIG-IP的激活模块。
根据这里(https://support.f5.com/csp/article/K2595)的步骤,没有tmsh命令。
由于bigip_command模块使用了tmsh命令,所以无法使用此模块。
可以像连接Linux服务器一样使用SSH连接,并使用raw模块执行命令。
- playbookの作成
$ vi regkey.yml
- hosts: bigip
become: no
gather_facts: no
vars:
ansible_user: "{{ bigip_user }}"
ansible_password: "{{ bigip_passwd }}"
vars_prompt:
- name: "regkey"
prompt: "Enter BIG-IP Registration key(XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX) "
private: no
tasks:
- name: When activating a new license, specify only the base registration key in the get_dossier command
raw: "get_dossier -b {{ regkey }}"
register: result
- debug: var=result.stdout_lines
- playbookの実行
$ ansible-playbook -i hosts regkey.yml
Enter BIG-IP Registration key(XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX) : XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX <-- メールで送られてきたライセンスキーと一緒に、BIG-IP Registration keyとして記載されていた情報を入力。
PLAY [bigip] *********************************************************
TASK [When activating a new license, specify only the base registration key in the get_dossier command] *************************
changed: [bigip]
TASK [debug] *********************************************************
ok: [bigip] => {
"result.stdout_lines": [
"XXX・・・XXX" <-- この結果(Dossier)を使用する。
]
}
PLAY RECAP ***********************************************************
bigip : ok=2 changed=1 unreachable=0 failed=0
-
- Registration keyのアクティベート
-
- https://secure.f5.com/Infopage/index.jsp にアクセス
-
- -> “Activate F5 product registration key”
-
- -> “Enter Your Dossier”に、先ほど作成したDossierを入力して、次の画面に遷移
-
- -> ライセンス許諾にチェックして、次の画面に遷移
-
- -> ライセンスが作成されるので保存
-
- ライセンスファイルの作成
-
- 作成したライセンスを、ansibleのインストールされているマシンの、/opt/playbook/files/bigip.license に作成する。
- playbookの作成
$ vi license.yml
- hosts: bigip
become: no
gather_facts: no
vars:
ansible_user: "{{ bigip_user }}"
ansible_password: "{{ bigip_passwd }}"
tasks:
- name: Copy license file
copy:
src: /opt/playbook/files/bigip.license
dest: /config/bigip.license
- name: reload the license
raw: "reloadlic"
- playbookの実行
ansible-playbook -i hosts license.yml
保存设置
- playbookの実行
$ ansible-playbook -i hosts save.yml
最后
由于激活不需要进行多次操作,我认为没有必要特地使用Ansible。但考虑到这次是为了验证Ansible,所以我试着使用了它。下一步,我想要进行虚拟服务器的创建。
关于这篇文章
关于此文章提供的信息,不提供任何合法性、准确性、安全性等方面的保证。对于使用此文章所引起的任何损害,不承担任何责任。