リモートホストでa.shを実行し、すべての出力ファイルを取得します。タイムスタンプ付きの出力ファイル。以下のコードを書いたのですが、エラーで失敗します。

リモートホストでa.shを実行し、すべての出力ファイルを取得します。タイムスタンプ付きの出力ファイル。以下のコードを書いたのですが、エラーで失敗します。

リモート ホストで a.sh を実行し、すべての出力ファイルを取得します。タイムスタンプ付きの出力ファイル。以下に私の Ansible タスクを示します。

---
   - name: 'abcd'
     hosts: 'all'
     gather_facts: 'false'
     tasks:
       - name : 'Copy the script to /tmp/ and set permission'
         copy :
           src : 'a.sh'
           dest: '/tmp'
           mode: '0700'
       - name: 'Execute the script'
         shell: >
           /tmp/a.sh
         register: 'results'
       - name: 'Display output'
         debug:
           msg: '{{ results.stdout }}'
       - name: 'Remove script'
         file:
           path: '/tmp/a.sh'
           state: 'absent'
       - name: 'fetch'
         shell: "ls /tmp/test_Prereq_*"
         register: path_files
         fetch :
          src : '/tmp/"{{item}}"'
          dest : '/home/vj/testout'
         with_items: '{{ path_files.stdout }}'

ansible-playbook report_task.yml --limit

エラー! 競合するアクション ステートメント: shell、fetch

エラーは '/home/vicheruk/report_task.yml' の 24 行目、8 列目にあったようですが、正確な構文の問題によってはファイル内の他の場所にある可能性もあります。

問題となっている行は次のようです:

     state: 'absent'
 - name: 'fetch'
   ^ here

何か案は?

答え1

プレイブックの構文が間違っています。 はfetchモジュールであり、独自のタスクで呼び出す必要があります。

また、同じファイルにループして書き込むことにはあまり意味がありません。おそらく、パラメータ{{ item }}destも含める必要があるでしょう。

これでうまくいくはずです:

- name: 'register files'
  shell: "ls /tmp/test_Prereq_*"
  register: path_files
- name: fetch
  fetch:
    src: '/tmp/"{{ item }}"'
    dest: '/home/vj/testout-{{ item }}'
  with_items: '{{ path_files.stdout }}'

関連情報