web-dev-qa-db-ja.com

Ansibleでマッピングを構築する際の警告

プレイブックを実行するたびに、次の警告が表示されます。

[警告]:/ 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スクリプトへの最初の入力として使用されます。

プレイブックは正常に機能しますが、なぜ警告が表示されるのかわかりません。誰かがここで何が悪いのか説明できますか?

7
Cobra Kai Dojo

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に再配置 する必要があります。

10
udondan

モジュールで重複したオプションを使用しているため、この警告に直面しました。たとえば、誤って次のようなモジュール定義で「ホスト」オプションを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つを省略することにより、警告は消えました。

0
mojdeh