はじめに
前回はAnsible
を使ってBIG-IP
のライセンスアクティベートのPlaybook
を作成したため、今回はその他初期設定を行うPlaybook
を作成してみたいと思います。
今回も前回と同様、「F5自動化の取り組みとAnsiblex BIG-IP Playbookユースケースのご紹介」を参考に進めていきます。
- 【前】BIG-IP Virtual Editionを使ってみる。(その3:Ansibleによるライセンスアクティベート)
- 【次】BIG-IP Virtual Editionを使ってみる。(その5:Ansibleによる負荷分散設定)
BIG-IPの初期設定
BIG-IP
のGUI管理画面から初期設定を行う場合、ライセンスのアクティベート以外に少なくともマネジメントポートに関連する設定を設定する必要があります。
また、マネジメントポート以外のポートにはデフォルトでは何も設定されていないため、使用ポートに対してIPアドレスも割り振るようにしてみようと思います。
尚、今回のPlaybook
作成は、前回作成したPlaybook
に追加する形で作成するため、前回と異なる部分のみ説明していきます。
前回と同様の箇所は前回の記事を参照ください。
Ansible Playbookの作成
初期設定用として新しくロールを作成します。
ロール名 | 説明 |
---|---|
setup_bigip-initconf | BIG-IPの初期設定を行うロール |
ロールの作成
前回と同様、ansible-galaxy
のコマンドでPlaybook
雛形を作成します。
cd roles/
ansible-galaxy init setup_bigip-initconf
tasksの作成
「F5自動化の取り組みとAnsiblex BIG-IP Playbookユースケースのご紹介」の「BIG-IP初期セットアップ」で設定している内容をすべて設定していきます。
また、DHCPでアドレスが変わってしまうと都合が悪いので、追加で、マネジメントポートのDHCPを無効化してマネジメントポート用デフォルトルートも設定しておきます。
各tasks
に定義しているnotify
の処理は、この後作成しますが、tasks
で何か設定が変更された場合にコンフィグをsave
するようにします。
---
# 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
が行われるわけではありません。
---
# handlers file for setup_bigip-initconf
- name: save_config
bigip_config:
save: "yes"
provider: "{{ bigip_provider }}"
delegate_to: "{{ bigip_delegate_to }}"
グループ変数の作成
前回作成したグループ変数に今回使用する変数を追記します。
各種設定は環境に合わせて修正して下さい。
---
# 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でホスト名を指定してください。
---
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
ロールを追記します。
---
- hosts: bigip
gather_facts: no
roles:
- setup_bigip-license
- setup_bigip-initconf
全体のロール実行ファイルの作成
前回のファイルの内容と同じになるので割愛。
Playbookの依存関係設定
「グループごとのロール実行ファイルの作成」で、setup_bigip-license
とsetup_bigip-initconf
のロールを指定しましたが、Playbook
を実行する場合、記載した順番に実行されるわけではなく、順不同で実行されます。
そのため、別のロールの後に実行しなければいけないような処理がある場合、失敗する場合があります。
そのような場合、dependencies
で各ロールの依存関係を指定することで、想定通りの順番で実行されるため、今回はdependencies
の設定を行って、先にsetup_bigip-license
が実行されるように設定します。
metaの作成
Ansible
のベストプラクティス構成の場合、各ロールディレクトリの配下にあるmeta
ディレクトリの中に内容を記載します。
ansible-galaxy init
コマンドでロールの雛形を作成した場合、meta
配下のmain.yml
には色々とコメント等記載されておりますが、内容を削除して新たに作成しても、編集して使用しても良いです。
今回は雛形をそのまま使用し、最後のdependencies: []
の箇所をコメントアウトした上で、新たに今回のdependencies
設定を加えることにします。
(略)
# 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
が読み込まれるため、実行コマンドは前回と同じコマンドで問題ありません。
実行した結果、failed
やunreachable
が出力されなければ成功です。
ansible-playbook -i hosts-all site.yml
おわりに
今回は初期セットアップで行う基本的な設定をAnsible
のPlaybook
にまとめました。
次回は負荷分散用の設定を行ってみようと思います。