Ansible - 正規表現を取得しますか?

Ansible - 正規表現を取得しますか?

このファイルのマニフェストをコピーして別のファイルに移動するためのAnsibleプレイブックを作成しています。

私はアンサーブルに初めて接しました。最初はCopyプラグインを使用していましたが、Fetchが私にとってより良い同盟になることができることがわかりました。

これは私のスクリプトです。

- name: Find Checklist
  hosts: all
  tasks:
   - name: Find Checklist
     ansible.builtin.find:
       paths: /path/to/file/{{ ansible_hostname | upper }}/Checklist/
       patterns: '*.ckl'

- name: Copy Results
  hosts: all
  tasks:
   - name: Copy Results
     ansible.builtin.fetch:
             src: "/path/to/file/{{ ansible_hostname | upper }}/Checklist/*.ckl"
             dest: "/path/to/directory"

結果は次のとおりです。

fatal: [fqdn]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "src": "/path/to/file/HOSTNAME/Checklist/*.ckl"
        }
    },
    "msg": "file not found: /path/to/file/HOSTNAME/Checklist/*.ckl"
}

PLAY RECAP **********************************************************************************************************************************************************************************************************************************
fqdn    : ok=3    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

今、ワイルドカードがサポートされていないことを知っています。誰かがループを実行する必要があると答えましたが、どのような正規表現を実装できるのか疑問に思います。

"src": "/path/to/file/HOSTNAME/Checklist/'RHEL8_[A-Za-z0-9]+.ckl'" を実行しようとしましたが、成功しませんでした。

ベストアンサー1

尋ねる:「...どのような形式の正規表現を実装してみてください。」

答え:使用同期。内部にrsync_options:

  • 「*」に一致するすべてのファイルを除外
  • 「*.ckl」に一致するファイルを除外しないでください。
    - ansible.posix.synchronize:
        mode: pull
        src: /tmp/ansible/{{ inventory_hostname }}/checklist/
        dest: /tmp/ansible/{{ inventory_hostname }}/checklist/
        rsync_opts:
          - "--include='*.ckl'"
          - "--exclude='*'"

たとえば、所与の在庫

shell> cat hosts
test_01
test_02
test_03

とリモートファイル

shell> ssh admin@test_01 ls -1 /tmp/ansible/test_01/checklist
a.ckl
b.ckl
x

shell> ssh admin@test_02 ls -1 /tmp/ansible/test_02/checklist
c.ckl
d.ckl
y

shell> ssh admin@test_03 ls -1 /tmp/ansible/test_03/checklist
e.ckl
f.ckl
z

要約された登録結果を提供する(--check --diffで実行)

ok: [test_01] => 
    ...
    msg: |-
      .d..tp..... ./
      >f+++++++++ a.ckl
      >f+++++++++ b.ckl
    rc: 0

ok: [test_02] => 
    ...
    msg: |-
      .d..tp..... ./
      >f+++++++++ c.ckl
      >f+++++++++ d.ckl
    rc: 0

ok: [test_03] => 
    ...
    msg: |-
      .d..tp..... ./
      >f+++++++++ e.ckl
      >f+++++++++ f.ckl
    rc: 0

これにより、ファイルがコントローラに「インポートされます」。

shell> tree /tmp/ansible/
/tmp/ansible/
├── test_01
│   └── checklist
│       ├── a.ckl
│       └── b.ckl
├── test_02
│   └── checklist
│       ├── c.ckl
│       └── d.ckl
└── test_03
    └── checklist
        ├── e.ckl
        └── f.ckl

テストのための完全なプレイブックの例

- hosts: all

  tasks:

    - file:
        state: directory
        path: "/tmp/ansible/{{ item }}/checklist"
      loop: "{{ ansible_play_hosts_all }}"
      run_once: true
      delegate_to: localhost

    - ansible.posix.synchronize:
        mode: pull
        src: /tmp/ansible/{{ inventory_hostname }}/checklist/
        dest: /tmp/ansible/{{ inventory_hostname }}/checklist/
        rsync_opts:
          - "--include='*.ckl'"
          - "--exclude='*'"
      register: out
    - debug:
        var: out

おすすめ記事