Ниже моя книга игр, которая создает строку.
- name: Construct command for all paths on a particular IP
set_fact:
allcmd: "{{ allcmd | default('') + '\"ls -lrt ' + item.path + ' | tail -57 &&' }}"
loop: "{{ user1[inventory_hostname] }}"
- debug:
msg: "allcmd is:{{ allcmd }}"
Вывод:
ok: [10.9.9.11] => (item={u'path': u'/tmp/scripts', u'name': u'SCRIPT'}) => {
"ansible_facts": {
"allcmd": "ls -lrt /tmp/scripts | tail -57 &&"
},
"ansible_loop_var": "item",
"changed": false,
"item": {
"name": "SCRIPT",
"path": "/tmp/scripts"
}
}
ok: [10.9.9.11] => (item={u'path': u'/tmp/MON', u'name': u'MON'}) => {
"ansible_facts": {
"allcmd": " ls -lrt /tmp/scripts | tail -57 && ls -lrt /tmp/MON | tail -57 &&"
},
"ansible_loop_var": "item",
"changed": false,
"item": {
"name": "MON",
"path": "/tmp/MON"
}
}
После завершения l oop я получаю желаемую строку, за исключением того факта, что я ' м осталось с завершающим &&
в конце то есть "allcmd": " ls -lrt /tmp/scripts | tail -57 && ls -lrt /tmp/MON | tail -57 &&"
.
I sh, чтобы удалить последние 3 символа, т.е. &&
из переменной allcmd. Желаемый результат:
"allcmd": " ls -lrt /tmp/scripts | tail -57 && ls -lrt /tmp/MON | tail -57"
Не удалось найти фильтры или функции для удаления последних n символов в ansible.
Можете ли вы предложить?