Ansibleのコマンドモジュールで複数のコマンドを実行する方法

Ansibleのコマンドモジュールで複数のコマンドを実行する方法に関する参考情報です。

 

Ansibleを利用して、Windowsサーバなどでコマンドをリモートから実行させることができます。

 

情報元はこちら。

 

Ansibleのコマンドモジュールで複数のコマンドを実行する方法

https://devops.stackexchange.com/questions/11214/how-to-run-multiple-commands-with-command-module-in-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モジュールを使用するものに分解することをお勧めします。

===

 

一つの方法として参考になるかもしれません。

 

Anker Soundcore Liberty Air 2 Pro(ワイヤレスイヤホン Bluetooth 対応)【完全ワイヤレスイヤホン / Bluetooth5.0対応 / ウルトラノイズキャンセリング/外音取り込み/ワイヤレス充電対応 / IPX4防水規格 / 最大26時間音楽再生 / 専用アプリ対応/HearID機能/通話ノイズリダクション/PSE技術基準適合】ブラック