前提・実現したいこと
Ansible 2.7.6を利用し始めた、Ansible初心者です。
Ansible Up and Running, 2nd Editionという書籍を参考に、Ansibleを勉強しています。
繰り返し処理で躓いたところがありますので、知見のある方に教えを請いたいです。
Ansibleモジュールによっては繰り返しパラメータの受け取り方が違う、ということかと思いますが、いまいちなぜ同じようなloopの書き方でaptモジュールとdjango_manageモジュールで挙動が異なるか、わかりません。django_manageの場合、どう繰り返し処理を書くのがいいのかご助言ください。
動かないわけではなく、腑に落ちない状態です。。。
発生している問題・エラーメッセージ
Ansible 2.5からloopの記述が変わった、とマニュアルにあります。(2.7しか知らないです。。。)
aptモジュールやyumモジュールだと、以下のwith_itmesを記述をすると、warningが発生します。
yaml
1 - name: install apt packages 2 apt: pkg={{ item }} update_cache=yes cache_valid_time=3600 3 become: True 4 with_items: 5 - git 6 - libjpeg-dev
これはこう書き直しました。(warningは出なくなりました)
yaml
1 - name: install apt packages 2 apt: 3 name: "{{ packages }}" 4 update_cache: yes 5 cache_valid_time: 3600 6 become: True 7 vars: 8 packages: 9 - git 10 - libjpeg-dev
少し状況が違うのですが、django_manageというモジュールで同じように
書き直したところ、エラーとなってしまいました。繰り返し処理ではなく、
"migrate"と"collectstatic"を一緒に引数として渡してしまっているような感じになります。
以下の記述だと、with_itmesを使っているのにwarningが出ない。成功する
yaml
1 - name: apply migrations to create the database, collect static content 2 django_manage: 3 command: "{{ item }}" 4 app_path: "{{ proj_path }}" 5 virtualenv: "{{ venv_path }}" 6 with_items: 7 - migrate 8 - collectstatic 9
aptのケースと同じように書き直したのに、エラーになる
yaml
1 - name: apply migrations to create the database, collect static content 2 django_manage: 3 command: "{{ action }}" 4 app_path: "{{ proj_path }}" 5 virtualenv: "{{ venv_path }}" 6 vars: 7 action: 8 - migrate 9 - collectstatic
以下がエラーメッセージ
error
1TASK [apply migrations to create the database, collect static content] ************************************************* 2fatal: [web]: FAILED! => {"changed": false, "cmd": "./manage.py ['migrate', 'collectstatic']", "msg": "stdout: Unknown command: '[migrate,'\nType 'manage.py help' for usage.\n\n:stderr: Unknown django command: ['migrate', 'collectstatic']"}
再度以下のように直してとりあえず解決(with_itemsを使わないようにしている。varsをdictionaryにしたらうまくいった)
- name: apply migrations to create the database, collect static content django_manage: command: "{{ item.name }}" app_path: "{{ item.proj_path }}" virtualenv: "{{ item.venv_path }}" loop: - { name: "migrate", proj_path: "{{ proj_path }}", venv_path: "{{ venv_path }}" } - { name: "collectstatic", proj_path: "{{ proj_path }}", venv_path: "{{ venv_path }}" }
補足情報(FW/ツールのバージョンなど)
loopの書き方の問題なのか、django_manageモジュールに渡すパラメータが複数の時はそれに合わせてdictionaryにしないといけないのか。。。そもそもwith_itemsを使ったケースではdictionaryでなくても通ったわけで。。。
よくわからないですが、with_itmesを使わず、シンプルに書く方法があるような気がするのでご協力いただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。