Как получить все vars_prompt из плагина ansible? - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу сохранить все ответы в файле таким образом, чтобы я мог использовать -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

...