Ansibleのコマンドモジュールで複数のコマンドを実行する方法に関する参考情報です。
Ansibleを利用して、Windowsサーバなどでコマンドをリモートから実行させることができます。
情報元はこちら。
Ansibleのコマンドモジュールで複数のコマンドを実行する方法
以下は質問の抜粋です。
===
以下で試しているansibleプレイブックでいくつかのコマンドを実行したいと思います。
- name: Running multiple cmds
command:
- |
cmd2
cmd2
cmd3
cmd4
しかし、上記のコードを実行しているときに、このタスクでエラーが発生します。
更新:コマンドモジュールを使用して以下のコマンドを使用しようとしていますが、エラーが発生します:
- name: install pexpect using pip
shell: /bin/bash -c "pip install pexpect"
- name: Join system to AD
expect:
command: "{{ item }}"
loop:
- source /etc/os-release
- realm join --membership-software=adcli --user=username@EXAMPLE.COM --computer-ou="OU={{ env }},OU={{ account }},OU=XXXX,OU=XXXXXX,DC=XXXXXXX,DC=XXXXXXX" --os-name="$PRETTY_NAME" --os-version="$VERSION" <DCNAME>
responses:
Password for *: "{{ username | b64decode }}"
エラー:
TASK [adjoin : Join system to AD] ***********************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'item' is undefined\n\nThe error appears to be in '/tmp/ansiblepull/playbooks/roles/adjoin/tasks/main.yml': line 58, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Join system to AD\n ^ here\n"}
誰かがこれを解決するのを手伝ってくれますか?
構文チェック中にもエラーが発生します。
===
続いて、回答内容の抜粋です。
===
commandモジュールは、引数としてコマンドを取るので、あなたは、あなたがそこに書かれてきたようにリストを持つことができません。あなたには同じことを行うことができますloop:とcommand: {{ item }}:
- name: "Run {{ item }}"
command: "{{ item }}"
loop:
- cmd2
- cmd2
- cmd3
command:代わりに、いくつかのタスクを実行することもできます。
ただし、これはべき等性を損なう傾向があるため、一般的に悪い習慣と見なされます(たとえば、Ansible LintルールのE303 )。これらのコマンドをAnsibleモジュールを使用するものに分解することをお勧めします。
===
一つの方法として参考になるかもしれません。