1

我开始使用 ansible_runner python 库,我真的很喜欢它。

唯一的事情是我需要检索一个注册的变量。我就是找不到方法。

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()

现在,在我创建了基础设施之后,我想检索在我的 create.yml 中注册的 IP

- 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,但我没有找到它。

谢谢

4

1 回答 1

1

set_fact您可以使用withcacheable: yes选项在您的剧本中设置事实。

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

get_fact_cache然后在 python 中使用runner 实例读取它。

self.runner.get_fact_cache(host)['ip_address']
于 2019-06-12T12:47:41.413 回答