В библиотеке Python ansible_runner можно ли получить зарегистрированную переменную из книг воспроизведения с бегуном? - PullRequest
0 голосов
/ 21 сентября 2018

Я начал использовать библиотеку python ansible_runner, и мне это очень нравится.

Единственное, чтоявляется то, что мне нужно получить зарегистрированную переменную.И я просто не могу найти, как.

import ansible_runner


class Infra:

    def __init__(self, extravars, envvars, private_data_dir):
        self.extravars = extravars
        self.envvars = envvars
        self.private_data_dir = private_data_dir
        self.runner = None

    def create(self):
        self.run("create.yml")

    def destroy(self):
       self.run("destroy.yml")

    def run(self, playbook):
        self.runner = ansible_runner.run(
        private_data_dir=self.private_data_dir,
        playbook=playbook,
        verbosity=5,
        extravars=self.extravars,
        envvars=self.envvars
    )

if __name__ == "__main__":
    extravars = {} 
    envvars = {}
    private_data_dir = ""
    i = infra(extravars, envvars, private_data_dir)

   i.create()

Теперь, после того, как я создал инфраструктуру, я хочу получить IP-адрес, зарегистрированный в моем create.yml

- name: "Get terraform output"
  shell: >
    cd {{ TERRAFORM_CONTEXT_PATH }} && \
    export TF_VAR_provisionning_ssh_private_key_path={{ SSH_PRIVATE_KEY }} && \
    terraform output -json
  register: terraform_output

Это так?что-то возможно?Я заглянул в runner.events, но не нашел.

Спасибо

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете установить факт в вашей игровой книге, используя set_fact с опцией cacheable: yes.

- name: Save IP address
  set_fact:
    ip_address: "{{ terraform_output['parameter_name'] }}"
    cacheable: yes

И затем прочитать его на python, используя get_fact_cache на экземпляре бегуна.

self.runner.get_fact_cache(host)['ip_address']
...