'ansible_date_time'未定义

Don*_*lio 18 amazon-ec2 amazon-web-services ansible ansible-playbook

尝试使用Ansible的ec2_ami模块在AWS中注册ec2实例,并使用当前日期/时间作为版本(我们最终将在未来制作大量AMI).

这就是我所拥有的:

- name: Create new AMI
  hosts: localhost
  connection: local
  gather_facts: false
  vars:
  tasks:
    - include_vars: ami_vars.yml
    - debug: var=ansible_date_time
    - name: Register ec2 instance as AMI
      ec2_ami: aws_access_key={{ ec2_access_key }}
               aws_secret_key={{ ec2_secret_key }}
               instance_id={{ temp_instance.instance_ids[0] }}
               region={{ region }}
               wait=yes
               name={{ ami_name }}
      with_items: temp_instance
      register: new_ami
Run Code Online (Sandbox Code Playgroud)

来自ami_vars.yml:

ami_version: "{{ ansible_date_time.iso8601 }}"
ami_name: ami_test_{{ ami_version }}
Run Code Online (Sandbox Code Playgroud)

当我运行完整的剧本时,我收到以下错误消息:

fatal: [localhost]: FAILED! => {"failed": true, "msg": "ERROR! ERROR! ERROR! 'ansible_date_time' is undefined"}
Run Code Online (Sandbox Code Playgroud)

但是,当从单独的playbook单独运行debug命令时,它可以正常工作:

- name: Test date-time lookup
  hosts: localhost
  connection: local
  tasks:
    - include_vars: ami_vars.yml
    - debug: msg="ami version is {{ ami_version }}"
    - debug: msg="ami name is {{ ami_name }}"
Run Code Online (Sandbox Code Playgroud)

结果:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "ami version is 2016-02-05T19:32:24Z"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "ami name is ami_test_2016-02-05T19:32:24Z"
}
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?

hel*_*loV 31

删除这个:

  gather_facts: false
Run Code Online (Sandbox Code Playgroud)

ansible_date_time 是事实的一部分,你没有收集它.

  • @AbhilashMishra 如果您无法在被管理的主机上运行“gather_facts”(它甚至可能还没有创建,或者添加到 AD 或 DNS 等),那么您可以使用“delegate_to: localhost”运行“setup”模块(或者使用 `localaction`),并使用 `hostvars['localhost'].ansible_date_time`。 (3认同)