Я хочу сохранить все ответы в файле таким образом, чтобы я мог использовать -e @answer.yml
, чтобы не отвечать на те же вопросы снова.Для этого я пишу плагин, проблема в том, что я не смог найти способ получить vars_prompted из python.Я перепутал его с другими переменными, но понятия не имел, как отличить одну переменную от других
. Я мог бы поставить префикс всех моих переменных с общим префиксом, но я искал что-то вроде self._variable_manager.vars_prompt
, которого не существует, конечно.
Существует variable_manager.extra_vars
, но это относится только к переменным, передаваемым в командной строке.
Пока у меня есть это
"""
This plugin will dump all relevant variables to a file so that is
possible to run the playbook with the same variables again with
-e @answer-2019121212 switch
EXAMPLE PLAYBOOK:
---
- hosts: all
pre_tasks:
- dump_vars:
"""
from __future__ import absolute_import, division, print_function
__metaclass__ = type
from ansible.errors import AnsibleUndefinedVariable
from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_text
from ansible.plugins.action import ActionBase
from ansible.vars.manager import VariableManager
from ansible.parsing.dataloader import DataLoader
from ansible.utils.display import Display
import re
import yaml
from datetime import datetime
display = Display()
class ActionModule(ActionBase):
def run(self, tmp=None, task_vars=None):
result = super(ActionModule, self).run(tmp, task_vars)
# This includes the vars_prompt but I have no method for distinguishing
# from another variables
vars_ = {
str(k): str(v)
for k, v in task_vars.items()
if k not in ("hostvars", "vars")
and not k.startswith("ansible_")
and not re.search("password", k)
}
filename = "answers-{}.yml".format(datetime.now().strftime("%Y%m%d%H"))
with open(filename, "w") as f:
yaml.dump(vars_, f)
display.display("[INFO] {} file written".format(filename))
return {"failed": False}
Яиспользуя эту пьесу:
- hosts: localhost
pre_tasks:
- dump_vars:
И работает так ansible-playbook -i localhost foo.yml