У меня проблемы с получением переменных из ansible. Я мог бы неправильно все это понимать, но;
У меня есть игра, я создаю 3 mysql экземпляров, которые я хотел бы получить, установив новый root проход от временного прохода в mysql log.
Я могу сделать это с одним экземпляром, но когда я пытаюсь провести l oop через мои 3 экземпляра, это убивает меня.
Игра:
- name: "Percona new install password retrieval"
block:
- name: Parse temporary password from mysql log
become: yes
shell: "cat /var/log/mysql-instance{{ item }}/error.log | sed -n 's/.*temporary password is generated for root@localhost: //p'"
register: temppass
with_sequence: start=1 end=3
tags: hest888
- debug: var=temppass.results
tags: hest888
это дает временные пароли и хранит в переменной temppass. temppass.results показывают:
ok: [X-sql08] => {
"temppass.results": [
{
"_ansible_ignore_errors": null,
"_ansible_item_label": "1",
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": true,
"cmd": "grep 'A temporary password is generated for root@localhost' /var/log/mysql-instance1/error.log | awk -F ' ' '{print $(NF)}'",
"delta": "0:00:00.004820",
"end": "2020-01-21 16:37:54.164040",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "grep 'A temporary password is generated for root@localhost' /var/log/mysql-instance1/error.log | awk -F ' ' '{print $(NF)}'",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "1",
"rc": 0,
"start": "2020-01-21 16:37:54.159220",
"stderr": "",
"stderr_lines": [],
"stdout": "(7FJWDd8uEfs",
"stdout_lines": [
"(7FJWDd8uEfs"
]
},
{
"_ansible_ignore_errors": null,
"_ansible_item_label": "2",
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": true,
"cmd": "grep 'A temporary password is generated for root@localhost' /var/log/mysql-instance2/error.log | awk -F ' ' '{print $(NF)}'",
"delta": "0:00:00.004983",
"end": "2020-01-21 16:37:54.621576",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "grep 'A temporary password is generated for root@localhost' /var/log/mysql-instance2/error.log | awk -F ' ' '{print $(NF)}'",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "2",
"rc": 0,
"start": "2020-01-21 16:37:54.616593",
"stderr": "",
"stderr_lines": [],
"stdout": "mwY9h1y17r+D",
"stdout_lines": [
"mwY9h1y17r+D"
]
},
{
"_ansible_ignore_errors": null,
"_ansible_item_label": "3",
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": true,
"cmd": "grep 'A temporary password is generated for root@localhost' /var/log/mysql-instance3/error.log | awk -F ' ' '{print $(NF)}'",
"delta": "0:00:00.004704",
"end": "2020-01-21 16:37:55.073540",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "grep 'A temporary password is generated for root@localhost' /var/log/mysql-instance3/error.log | awk -F ' ' '{print $(NF)}'",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "3",
"rc": 0,
"start": "2020-01-21 16:37:55.068836",
"stderr": "",
"stderr_lines": [],
"stdout": "GZ!xq=ard9mz",
"stdout_lines": [
"GZ!xq=ard9mz"
]
}
]
}
ок ... итак, в temppass.results есть вся информация, которая мне нужна, но я не могу ее найти?
что бы я хотел сделать (в идеальном мире, полностью выровненном, чтобы удовлетворить все мои прихоти) - это получить результат "item" и "stdout" из temppass.results и использовать их в качестве входных данных для раздела обновления пароля.
- name: Set root password using temp password to log in
shell: 'mysql -e --protocol=TCP -P {{ item.port }}"ALTER USER ''root''@''localhost'' \
IDENTIFIED WITH mysql_native_password AS ''{{ mysql_root_hash }}'';" \
--connect-expired-password -uroot -p"{{ temppass_{{ item.instance }}.stdout }}"'
with_items:
- { instance: 1, port: 3306 }
- { instance: 2, port: 3307 }
- { instance: 3, port: 3308 }
tags: hest888
или что-то в этом роде.
Я обнаружил, что двойной {{в двойном {{не работает, но надеюсь, вы понимаете, что я пытаюсь сделать.
Есть идеи?