尝试通过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,所以我试着使用了它。下一步,我想要进行虚拟服务器的创建。

关于这篇文章

关于此文章提供的信息,不提供任何合法性、准确性、安全性等方面的保证。对于使用此文章所引起的任何损害,不承担任何责任。

广告
将在 10 秒后关闭
bannerAds