プレイブックを実行するたびに、次の警告が表示されます。
[警告]:/ etc/ansible/roles/foo/tasks/main.ymlの17行3列からマッピングを作成しているときに、重複するdictキー(ファイル)が見つかりました。最後に定義された値のみを使用します。
タスクフォルダー内のmain.ymlの関連部分は次のようになります。
(17行目はファイルをクリーンアップするタスクですが、少しずれているように見えるので、問題は前の「スクリプト」行にあると思います)
- name: Run script to format output
script: foo.py {{ taskname }} /tmp/fcpout.log
- name: Clean temp files
file: path=/tmp/fcpout.log state=absent
そして私のvarsファイル:
---
my_dict: {SLM: "114", Regular: "255", Production: "1"}
taskid: "{{my_dict[taskname]}}"
プレイブックを実行するには、次のようにします。
ansible-playbook playbooks/foo.yml --extra-vars "server=bar taskname=SLM"
私がやろうとしているのは、コマンドライン引数を取り、ホストを設定することです。「server」パラメーターを使用して、タスク名を取得し、そこからIDが参照しているものを見つけます。このIDは、リモートで実行されるmy pythonスクリプトへの最初の入力として使用されます。
プレイブックは正常に機能しますが、なぜ警告が表示されるのかわかりません。誰かがここで何が悪いのか説明できますか?
17行目あたりにこれ以上ないのですか?この警告は、タスクに2つの同一のキーがある場合(または一般にdictのどこかにある場合)にトリガーされます。
警告は、2つのfile
キーがあることを示しており、タスクが次のようになっていることを示しています。
- name: Clean temp files
file: ...
file: ...
よくある間違いは、人々が次のタスクのために新しいリストアイテムを開始するのを忘れることです。以下は有効ですが、上記は無効です。
- name: Clean temp files
file: ...
- file: ...
Ansibleがエラーメッセージで行やファイルを間違えることがあることに気づきました。問題が実際にはtasks/main.yml
にあったのに、handlers/main.yml
について不平を言っているのを見ました。重複するfile
キーを持つそのようなタスクがその行の近くに見つからない場合は、ファイル全体または他のファイルでさえ検索してください。このようなものがどこにも見つからない場合は、Ansibleにバグが見つかったように見えます。その場合は githubに再配置 する必要があります。
モジュールで重複したオプションを使用しているため、この警告に直面しました。たとえば、誤って次のようなモジュール定義で「ホスト」オプションを2回使用しました。
name: Create NEW DB User
mysql_user:
name: NEW USER NAME
login_user: root
login_password: Root Passwd
password: NEW USER'S PASSWD
Host: localhost
priv: 'DB NAME.*:ALL,GRANT'
state: present
Host: localhost
ホストオプションの1つを省略することにより、警告は消えました。