このファイルのマニフェストをコピーして別のファイルに移動するための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