Ansible:将ansible任务定义的变量或输出作为变量

时间:2018-03-27 13:15:04

标签: ansible ansible-inventory ansible-facts

您好我正在尝试设置如下任务。

- name: Create a route53 record for RDS instance.
  route53:
    state: present
    aws_access_key: "{{ aws_create_route53_record.access_key }}"
    aws_secret_key: "{{ aws_create_route53_record.secret_key }}"
    zone: "{{ aws_create_route53_record.zone }}"
    hosted_zone_id: "{{ aws_create_route53_record.id }}"
    type:  "{{ aws_create_route53_record.type }}"
    value: "{{ aws_create_route53_record.value }}"
    record: "{{  aws_create_route53_record.record }}"
    private_zone: "{{  aws_create_route53_record.private_zone }}"
    ttl: 30

现在我知道来自group_vars/all.yml的传递变量我可以在aws_create_route53_record.value中定义group_vars/all.yml并使用它但是在某些情况下我有可能将此任务用作角色并且想要将aws_create_route53_record.value运行时从先前任务传递到此任务并在创建route53记录时使用它。例如使用ansible任务创建rds实例,并使用rds endpoint作为route53_record的值 任何建议都会有所帮助。感谢

注意:我已经检查了rds module page的返回值,我认为它会立即用来解决这个问题,但是没有提供端点返回。

1 个答案:

答案 0 :(得分:0)

我能够通过在我的任务中使用变量来解决我的问题,并且最初为其分配group_vars变量的值,并设置一个条件,即如果在赋值group_vars变量之后,变量仍为空,则从上一个值获取值任务。下面是可以正常工作的代码片段。您需要将先前任务中的变量注册为endpoint_host

---
-
  name: "Set facts of record value"
  set_fact:
    record_value: "{{ aws_create_route53_record.value }}"
-
  name: "If record value not present, Look for endpoint-host variable"
  set_fact:
    record_value: "{{ endpoint_host }}"
  when: "aws_create_route53_record.value == \"\""
-
  name: "Create a route53 record for RDS instance."
  route53:
    aws_access_key: "{{ aws_create_route53_record.access_key }}"
    aws_secret_key: "{{ aws_create_route53_record.secret_key }}"
    hosted_zone_id: "{{ aws_create_route53_record.hosted_zone_id }}"
    private_zone: "{{  aws_create_route53_record.private_zone }}"
    record: "{{  aws_create_route53_record.record }}"
    state: present
    ttl: 30
    type: "{{ aws_create_route53_record.type }}"
    value: "{{ record_value }}"
    zone: "{{ aws_create_route53_record.zone }}"

希望这有帮助。