这可能违反了最佳实践,但使用Ansible剧本,是否可以从一个任务中获取文件列表,然后向用户提示选择要传递到变量中的文件之一?
例如:
Choose file to select:
1. file1.txt
2. file2.txt
3. file3.txt
> 1
理论上,剧本会暂停等待用户输入,然后将结果文件选择传递到一个变量中,以便在未来的任务中使用。
非常感谢。
使用暂停。例如,给定文件
shell> tree files
files
├── file1.txt
├── file2.txt
└── file3.txt
0 directories, 3 files
下面的剧本
shell> cat playbook.yml
- hosts: localhost
tasks:
- find:
path: files
register: result
- set_fact:
my_files: "{{ result.files|map(attribute='path')|list|sort }}"
- pause:
prompt: |
Choose file to select:
{% for file in my_files %}
{{ loop.index }} {{ file }}
{% endfor %}
register: result
- debug:
msg: "selected file: {{ my_files[result.user_input|int - 1] }}"
给出(当选择第二个文件并键入"2<ENTER"时(
shell> ansible-playbook playbook.yml
PLAY [localhost] ****
TASK [find] ****
ok: [localhost]
TASK [set_fact] ****
ok: [localhost]
TASK [pause] ****
[pause]
Choose file to select:
1 files/file1.txt
2 files/file2.txt
3 files/file3.txt
:
ok: [localhost]
TASK [debug] ****
ok: [localhost] => {
"msg": "selected file: files/file2.txt"
}
PLAY RECAP ****
localhost: ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0