zaki work log

作業ログやら生活ログやらなんやら

Ansibleを使ってVyOSのIPアドレスを設定する

前回セットアップしたVyOSの、まだ設定を残しておいたeth1のIPアドレスをAnsibleを使って設定してみる。

zaki-hmkc.hatenablog.com

VyOSのホストとAnsibleを実行するホストの関係は以下の通り。
172.16.1.119のホストにAnsibleがインストールされており、前回設定した172.16.1.3(eth0)のVyOSに接続してもう一つのNICであるeth1の設定を行う、というもの。

f:id:zaki-hmkc:20210412080307p:plain

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_useransible_passwordで設定している。
また、コネクションプラグインとしてnetwork_cliを、そして接続先ネットワークOS種別としてansible_network_os=vyosを指定。

playbook

現在の設定を取得

設定前の状態をAnsibleで取得してみる。

docs.ansible.com

---
- 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を使用する。

docs.ansible.com

    - 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を指定する。

docs.ansible.com

    - 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類は以下にあります。

github.com


次こそルーティング設定をやろうな…