前回セットアップしたVyOSの、まだ設定を残しておいたeth1のIPアドレスをAnsibleを使って設定してみる。
VyOSのホストとAnsibleを実行するホストの関係は以下の通り。
172.16.1.119のホストにAnsibleがインストールされており、前回設定した172.16.1.3(eth0)のVyOSに接続してもう一つのNICであるeth1の設定を行う、というもの。
AnsibleでVyOSに接続して設定サンプルとしてIPアドレスを設定する、くらいの内容。
inventory
[vyos] 172.16.1.3 ansible_user=vyos ansible_password=vyos [vyos:vars] ansible_connection=network_cli ansible_network_os=vyos
VyOS本体のアドレスと、ログイン用アカウント情報をansible_user
とansible_password
で設定している。
また、コネクションプラグインとしてnetwork_cli
を、そして接続先ネットワークOS種別としてansible_network_os=vyos
を指定。
playbook
現在の設定を取得
設定前の状態をAnsibleで取得してみる。
--- - hosts: vyos gather_facts: false tasks: - name: vyos_fact vyos.vyos.vyos_facts: gather_subset: config # register: result - name: print config debug: # msg: "{{ result.ansible_facts.ansible_net_config }}" msg: "{{ ansible_net_config }}"
出力はこんな感じ。(一部マスク済み)
ok: [172.16.1.3] => msg: - |- set interfaces ethernet eth0 address '172.16.1.3/23' set interfaces ethernet eth0 hw-id '00:0c:29:3b:48:8c' set interfaces ethernet eth1 hw-id '00:0c:29:3b:48:96' set interfaces loopback lo set service ssh set system config-management commit-revisions '100' set system console device ttyS0 speed '115200' set system host-name 'vyos' set system login user vyos authentication encrypted-password '........' set system login user vyos authentication plaintext-password '' set system ntp server 0.pool.ntp.org set system ntp server 1.pool.ntp.org set system ntp server 2.pool.ntp.org set system syslog global facility all level 'info' set system syslog global facility protocols level 'debug' - |- 0 2021-04-08 00:19:38 by vyos via cli 1 2021-04-08 00:13:38 by vyos via cli 2 2021-04-08 00:11:38 by vyos via cli 3 2021-04-08 00:10:39 by root via vyos-boot-config-loader 4 2021-04-08 00:09:09 by vyos via cli 5 2021-04-07 23:48:18 by root via vyos-boot-config-loader 6 2021-04-07 23:48:18 by root via init
show interfaces ethernet
すると以下の通り。
vyos@vyos:~$ show interfaces ethernet Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 172.16.1.3/23 u/u eth1 -
IPアドレス設定
IPアドレスの設定はvyos_l3_interfaces
を使用する。
- name: set ipv4 to eth1 vyos.vyos.vyos_l3_interfaces: config: - name: eth1 ipv4: - address: 172.29.0.3/24 state: merged
この内容のplaybookでAnsibleを実行すると、
ok: [172.16.1.3] => msg: - |- set interfaces ethernet eth0 address '172.16.1.3/23' set interfaces ethernet eth0 hw-id '00:0c:29:3b:48:8c' set interfaces ethernet eth1 address '172.29.0.3/24' set interfaces ethernet eth1 hw-id '00:0c:29:3b:48:96' set interfaces loopback lo set service ssh
show interfaces
すると以下の通り。
vyos@vyos:~$ show interfaces ethernet Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 172.16.1.3/23 u/u eth1 172.29.0.3/24 u/u
設定の保存
ただしこれだけだと、例によってrebootによって設定は消えるので、保存する処理を追加する。
保存するにはvyos_config
モジュールでsave
を指定する。
- name: save config vyos.vyos.vyos_config: save: true
これでsave
の実行が行われ、rebootしても設定が保持される。
vyos_l3_interfaces
にsaveするパラメタがあったら楽だったのに…と思ったけど、サーバー構築自動化でもサービスのrestartは最後にやるし、notifyとhandler使って「変更があったときだけ」もできるからこっちの方がいいのかも。
環境
Ansibleバージョンは以下の通り。
VyOSのモジュール/コレクションは付属のものを使用。
(a2.10) [zaki@cloud-dev vyos (master)]$ ansible --version ansible 2.10.7 config file = /home/zaki/.ansible.cfg configured module search path = ['/home/zaki/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/zaki/src/ansible-sample/venv/a2.10/lib64/python3.6/site-packages/ansible executable location = /home/zaki/src/ansible-sample/venv/a2.10/bin/ansible python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
(a2.10) [zaki@cloud-dev vyos (master)]$ ansible-galaxy collection list vyos.vyos # /home/zaki/src/ansible-sample/venv/a2.10/lib/python3.6/site-packages/ansible_collections Collection Version ---------- ------- vyos.vyos 1.1.1 # /home/zaki/src/ansible-sample/venv/a2.10/lib64/python3.6/site-packages/ansible_collections Collection Version ---------- ------- vyos.vyos 1.1.1
playbook類は以下にあります。
次こそルーティング設定をやろうな…