24時間365日フルマネージドホスティングサービスのデイーネット

  • HOME
  •  
  • 技術情報ブログ
  •  
  • Ansible2.5にてinclude_roleでwith_itemsのループを使うと不具合が出てしまう

Ansible2.5にてinclude_roleでwith_itemsのループを使うと不具合が出てしまう

こんにちは。構築担当の下地です。

最近はAnsibleとServerspecのコードをいじることが多く、中々うまく動かないなーという毎日ですが、構成管理ツールや自動チェックツールはおもしろいですね。

今日は最近Ansibleでハマった事象について書いてみます。

宜しくお願いします。

include_roleでroleをwith_itemsで回したい

まず現在のディレクトリ構成は以下のようになっています。

# tree -L 2                                                                                                                                              
.
├── group_vars
│   └── target_server.yml
├── host_vars
├── inventory
│   └── inventory.ini
├── roles
│   ├── change_hosts_file
│   ├── change_password
│   ├── change_resolv_file
│   ├── common
│   ├── config_hostname
│   ├── epel_remi_install
│   ├── httpd_setup
│   ├── httpd_ssl_config
│   ├── httpd_virtualhost_config
│   ├── mysql56_setup
│   ├── mysql57_setup
│   ├── mysql_check
│   ├── phpmyadmin_setup
│   ├── php_setup
│   ├── selinux_disable
│   ├── serverreboot
│   ├── sshd_setup
│   ├── time_zone_change
│   ├── vsftpd_setup
│   ├── wordpress
│   └── yumupdate
├── site.yml
└── site.yml.org

25 directories, 4 files

このようにrolesディレクトリに多数のroleが配置されています。

この中にあるroleをいくつかピックアップしてcommonロールの中で利用したい感じです。

検証のため、まずメインのplaybookであるsite.ymlの中はシンプルにcommonのみ記載します。

# cat site.yml                                                                                                                                           
---
- hosts: target_server
  roles:
    - common

また、commonロールのmain.ymlは以下のように書きました。

期待する結果としてはwith_itemsに指定したroleをループでincludeすることです。

# cat roles/common/tasks/main.yml
---
- name: 各種初期設定を行います
  include_role:
    name: "{{item}}"
  with_items:
    - config_hostname
    - change_password
    - change_resolv_file
    - change_hosts_file
    - sshd_setup
    - time_zone_change
    - yumupdate

実行結果

この構成で実行してみます。

すると以下のようになりました。

期待する結果とは反して、一番下のitemのみが何度も実行されています。

# ansible-playbook -i inventory/inventory.ini site.yml                                                                                                   

PLAY [target_server] *******************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [common : 各種初期設定を行います] ************************************************************************************************************************************************************

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : yum updateを実行します] ****************************************************************************************************************************************************
ok: [116.118.239.183]

TASK [yumupdate : /etc/yum.confにexclude処理を追記します] ***************************************************************************************************************************************
ok: [116.118.239.183]

PLAY RECAP *****************************************************************************************************************************************************************************
116.118.239.183            : ok=15   changed=0    unreachable=0    failed=0   

どうしてうまく動かない?

色々ネットで調べてみると、どうもこの不具合は既に認識されており、githubにissuesやpull requestが上がっていました。

こちらがissuesの記事。

https://github.com/ansible/ansible/issues/37016

こちらがpull request。

https://github.com/ansible/ansible/pull/36372

となると次のバージョンでは改修されるかな?と思いAnsibleの公式を見てみると、そろそろAnsible ver2.6がリリースされる模様です。

https://docs.ansible.com/ansible/devel/roadmap/ROADMAP_2_6.html#release-schedule

本記事の執筆日は6/7ですが、Ansible 2.6は遅くても6/28にはリリースされそうですので、Ansible 2.6がリリースされ次第入れてみて検証する予定です。

まとめ

Ansibleはこの間ver 2.5が出たと思ったら、既にver 2.6がリリース予定と、開発のスピードと勢いが凄いですね!

触っていても面白いツールですので、また時間をみつけてコードをいじり倒そうと思います。

今回もお読み頂きありがとうございました。

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar