UbuntuのFirewalldをAnsibleで

Ubuntu16.04にFirewalldをインストールしたまではよかったが、そのままではAnsibleのfirewalldモジュールをつかって構築することができない。

ここで、AnsibleのfirewalldモジュールからFirewalldを設定できるようにするために必要なことを調査する。

CentOS7でfirewalldモジュールをつかうには

まず、CentOS7でどういうファイルが使われているのかを確認する。

rpm -ql python-firewall

/usr/lib/python2.7/site-packages/firewall/**/*.{py,pyc,pyo}ファイルがずらずらリストされる。

Ubuntu16.04でこれらのファイルを提供するパッケージは

例えば、firewall/__init__.pyを指定してみる。

dpkg -S "firewall/__init__.py"
firewalld: /usr/lib/python3/dist-packages/firewall/__init__.py

firewalldパッケージではPython3のライブラリしか提供していない。
Python2.7のfirewallモジュールをインストールする必要があるが、
こちらによるとPython2.7のモジュールを利用しているのはUbuntu14.04のFirewalld(0.3.7)まで。

なので、Ubuntu16.04でPython2.7のfirewallモジュールをインストールすることはできない。

firewallモジュールの時だけPython3を使うようAnsibleを設定する

Ubuntu16.04以降はPython3でfirewallモジュールを操作する必要がある。
なので、こちらにあるように、firewallモジュールをやるときだけPython3.xを使うようタスクに書く。

- firewalld:
    service: "{{ item }}"
    permanent: true
    state: enabled
    zone: "{{ __default_zone }}"
  with_items:
    - ssh
    - dhcpv6-client
  when: __enabled
  notify: os_firewall_ubuntu16_systemd_restart_firewalld
  become: yes
  become_user: root
  vars:
    ansible_python_interpreter: /usr/bin/python3

上記タスクでfirewalldモジュールによって設定できた。
なのでUbuntu16.04については追加パッケージは不要だった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です