【问题标题】:Ansible RDS module only works once?Ansible RDS 模块只能工作一次?
【发布时间】:2021-02-09 02:20:47
【问题描述】:

我在玩游戏期间两次使用 Ansible 中的 RDS 模块。第一次,它记录 CNAME。第二次,它一直等到数据库状态为“可用”。

我遇到的问题是它第一次按预期工作,但第二次失败了。

---
- name: Wait for RDS to be out of creating state and get its CNAME
  rds:
    command: facts
    instance_name: '{{ wp_db_instance}}'
    region: "{{ region }}"
  register: rds_facts
  until: rds_facts.instance.status != "creating"
  retries: 15
  delay: 30
  become: no

- name: Set Endpoint variable
  set_fact: rds_db_endpoint="{{ (rds_facts.stdout|from_json).DBInstances[0].Endpoint.Address }}"

上面的代码按预期工作。它等待实例离开“正在创建”状态并记录名称。

稍后在该剧中,它运行以下内容。

---
- name: Wait for RDS instance to be in available state
  rds:
    command: facts
    instance_name: '{{ wp_db_instance}}'
    region: "{{ region }}"
  register: rds_facts_available
  until: rds_facts_available.instance.status == "available"
  retries: 55
  delay: 30
  become: no

这个失败是因为“'dict object'没有属性'instance'”告诉我模块没有返回任何事实。为什么不呢?两次调用模块有问题吗?

任何帮助将不胜感激。

【问题讨论】:

  • 还有其他使用rds_facts_Available的任务吗?
  • @P....不,没有。
  • 错误"'dict object' has no attribute 'instance'"通常在变量未定义或设置它的任务被跳过时出现。

标签: amazon-web-services ansible yaml amazon-rds


【解决方案1】:

我想我找到了答案。它就在那里,我不确定这是否是修复它的原因,但这是我所做的。

第一个模块(有效的模块)是由 main.yml 调用的 YAML 的一部分。

- name: Get RDS endpoint
  include: get_rds_endpoint.yml
  delegate_to: localhost
  become: no

第二个模块是不同 YAML 的一部分,但文件名是变量:

- name: Configure DB
  include: "{{configureDBFile}}"
  delegate_to: localhost
  become: no

我将“{{configureDBFile}}”更改为实际文件的名称,问题就消失了。

我正在针对最新版本对我们的旧剧本进行回归测试,所以我想知道某个更新是否会改变环境变量/凭据的传递方式?

【讨论】:

    【解决方案2】:

    如下更改您的第二个任务

    ---
    - name: Wait for RDS instance to be in available state
      rds_instance_info:
        db_instance_identifier: '{{ wp_db_instance}}'
        region: "{{ region }}"
      register: rds_facts_available
      until: rds_facts_available.instances[0].db_instance_status == "available"
      retries: 55
      delay: 30
      become: no
    

    【讨论】:

    • 谢谢加里。我得到与该模块相同的错误。我知道代码不是问题。它第一次工作,但由于某种原因,第二次没有从 AWS 获得任何输出。
    猜你喜欢
    • 2017-01-21
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2011-02-17
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多