0
0

More than 3 years have passed since last update.

BIG-IP Virtual Editionを使ってみる。(その4:Ansibleによる初期設定)

Last updated at Posted at 2021-01-31

はじめに

前回はAnsibleを使ってBIG-IPのライセンスアクティベートのPlaybookを作成したため、今回はその他初期設定を行うPlaybookを作成してみたいと思います。

今回も前回と同様、「F5自動化の取り組みとAnsiblex BIG-IP Playbookユースケースのご紹介」を参考に進めていきます。

BIG-IPの初期設定

BIG-IPのGUI管理画面から初期設定を行う場合、ライセンスのアクティベート以外に少なくともマネジメントポートに関連する設定を設定する必要があります。

また、マネジメントポート以外のポートにはデフォルトでは何も設定されていないため、使用ポートに対してIPアドレスも割り振るようにしてみようと思います。

尚、今回のPlaybook作成は、前回作成したPlaybookに追加する形で作成するため、前回と異なる部分のみ説明していきます。

前回と同様の箇所は前回の記事を参照ください。

Ansible Playbookの作成

初期設定用として新しくロールを作成します。

ロール名 説明
setup_bigip-initconf BIG-IPの初期設定を行うロール

ロールの作成

前回と同様、ansible-galaxyのコマンドでPlaybook雛形を作成します。

ansible-galaxyコマンドでのロール雛形作成
cd roles/
ansible-galaxy init setup_bigip-initconf

tasksの作成

F5自動化の取り組みとAnsiblex BIG-IP Playbookユースケースのご紹介」の「BIG-IP初期セットアップ」で設定している内容をすべて設定していきます。

また、DHCPでアドレスが変わってしまうと都合が悪いので、追加で、マネジメントポートのDHCPを無効化してマネジメントポート用デフォルトルートも設定しておきます。

tasksに定義しているnotifyの処理は、この後作成しますが、tasksで何か設定が変更された場合にコンフィグをsaveするようにします。

roles/setup_bigip-initconf/tasks/main.yml
---
# tasks file for setup_bigip-initconf
- name: BIG-IP ManagementポートのDHCP無効化とGUIセットアップ無効化
  bigip_sys_global:
    gui_setup: "no"
    mgmt_dhcp: "no"
    state: "present"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config

- name: BIG-IP Managementポートのルーティング設定
  bigip_management_route:
    name: "{{ item.name }}"
    description: "{{ item.description }}"
    gateway: "{{ item.gateway }}"
    network: "{{ item.network }}"
    state: "present"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config
  loop: "{{ bigip_management_route }}"

- name: BIG-IP ホスト名の設定
  bigip_hostname:
    hostname: "{{ bigip_fqdn }}"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config

- name: BIG-IP インタフェースVLANの作成
  bigip_vlan:
    untagged_interface: "{{ item.untagged_interface }}"
    name: "{{ item.name }}"
    tag: "{{ item.tag }}"
    state: "present"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config
  loop: "{{ bigip_interface }}"

- name: BIG-IP Self IPの作成
  bigip_selfip:
    name: "{{ item.name }}"
    address: "{{ item.address }}"
    netmask: "{{ item.netmask }}"
    vlan: "{{ item.vlan }}"
    state: "present"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config
  loop: "{{ bigip_selfip }}"

- name: BIG-IP DNSの設定
  bigip_device_dns:
    name_servers: "{{ item.name_servers }}"
    state: "present"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config
  loop: "{{ bigip_dns }}"

- name: BIG-IP NTPの設定
  bigip_device_ntp:
    ntp_servers: "{{ item.ntp_servers }}"
    timezone: "{{ item.timezone }}"
    state: "present"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"
  notify: save_config
  loop: "{{ bigip_ntp }}"

コンフィグ保存用handlerの作成

上述の通り、tasksの定義で何かしら変更が加わった場合にコンフィグをsaveする処理を加えます。

tasksの定義ではすべての定義にnotifyでコンフィグをsaveする処理を加えていますが、tasksの中の処理で複数の設定が変更された場合でも、一度だけしか実行されない仕組みとなっているため、tasksの回数分コンフィグのsaveが行われるわけではありません。

roles/setup_bigip-initconf/handlers/main.yml
---
# handlers file for setup_bigip-initconf
- name: save_config
  bigip_config:
    save: "yes"
    provider: "{{ bigip_provider }}"
  delegate_to: "{{ bigip_delegate_to }}"

グループ変数の作成

前回作成したグループ変数に今回使用する変数を追記します。

各種設定は環境に合わせて修正して下さい。

group_vars/bigip.yml
---
# 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

# Managementポートのルーティング設定
bigip_management_route:
  - { name: "default", description: "Default Route", gateway: "192.168.242.1", network: "0.0.0.0/0" }

# インタフェース設定
bigip_interface:
  - { untagged_interface: "1.1", name: "external", tag: "10" }
  - { untagged_interface: "1.2", name: "internal", tag: "20" }

# DNS設定
bigip_dns:
  - { name_servers: ["8.8.8.8", "8.8.4.4"] }

# NTP設定
bigip_ntp:
  - { ntp_servers: ["ntp.nict.jp", "time.google.com"], timezone: "Asia/Tokyo" }

ホスト変数の作成

グループ変数と同様、前回のホスト変数に追記します。

尚、BIG-IPのホスト名設定はFQDNで指定する必要があるので、bigip_fqdnの変数にFQDNでホスト名を指定してください。

host_vars/bigip01.yml
---
bigip_license: XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX
bigip_server: [BIG-IPのIPアドレス]
bigip_fqdn: bigip01.example.com

bigip_selfip:
  - { name: "10.1.0.1", address: "10.1.0.1", netmask: "255.255.255.0", vlan: "external" }
  - { name: "10.2.0.1", address: "10.2.0.1", netmask: "255.255.255.0", vlan: "internal" }

グループごとのロール実行ファイルの作成

今回作成したsetup_bigip-initconfロールを追記します。

bigip.yml
---
- hosts: bigip
  gather_facts: no
  roles:
    - setup_bigip-license
    - setup_bigip-initconf

全体のロール実行ファイルの作成

前回のファイルの内容と同じになるので割愛。

Playbookの依存関係設定

「グループごとのロール実行ファイルの作成」で、setup_bigip-licensesetup_bigip-initconfのロールを指定しましたが、Playbookを実行する場合、記載した順番に実行されるわけではなく、順不同で実行されます。

そのため、別のロールの後に実行しなければいけないような処理がある場合、失敗する場合があります。

そのような場合、dependenciesで各ロールの依存関係を指定することで、想定通りの順番で実行されるため、今回はdependenciesの設定を行って、先にsetup_bigip-licenseが実行されるように設定します。

metaの作成

Ansibleベストプラクティス構成の場合、各ロールディレクトリの配下にあるmetaディレクトリの中に内容を記載します。

ansible-galaxy initコマンドでロールの雛形を作成した場合、meta配下のmain.ymlには色々とコメント等記載されておりますが、内容を削除して新たに作成しても、編集して使用しても良いです。

今回は雛形をそのまま使用し、最後のdependencies: []の箇所をコメントアウトした上で、新たに今回のdependencies設定を加えることにします。

roles/setup_bigip-initconf/meta/main.yml
(略)
#dependencies: []    ←コメントアウトする。
  # List your role dependencies here, one per line. Be sure to remove the '[]' above,
  # if you add dependencies to this list.

dependencies:
  - setup_bigip-license

Ansibleの実行

作成したロールを実行していきます。

site.ymlを実行すれば、前回から変更を加えたbigip.ymlが読み込まれるため、実行コマンドは前回と同じコマンドで問題ありません。

実行した結果、failedunreachableが出力されなければ成功です。

Playbookの実行
ansible-playbook -i hosts-all site.yml

おわりに

今回は初期セットアップで行う基本的な設定をAnsiblePlaybookにまとめました。

次回は負荷分散用の設定を行ってみようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0