【问题标题】:Ansible when creating an RDS instance: AttributeError: 'dict' object has no attribute 'split'Ansible 在创建 RDS 实例时:AttributeError: 'dict' object has no attribute 'split'
【发布时间】:2015-02-27 06:19:59
【问题描述】:

我正在创建一个基于 Ansible 的 AWS 基础设施。 我有一个创建 RDS 实例的剧本。当我独立运行 playbook 时,它会完美执行并创建 RDS 实例。但是,当另一个 playbook 使用

调用该 playbook 时

包括:rds.yml

它给出了以下错误

任务:[创建 mysql RDS 实例] *************************************** ****** 失败:[localhost -> 127.0.0.1] => {“失败”:真,“解析”:假} Traceback(最近一次调用最后一次):

文件“/home/rahul/.ansible/tmp/ansible-tmp-1424469014.33-157847268952956/rds”,第 2419 行,在 主要()

文件“/home/rahul/.ansible/tmp/ansible-tmp-1424469014.33-157847268952956/rds”,第 468 行,主要 参数["vpc_security_groups"] = vpc_security_groups.split(',') AttributeError: 'dict' 对象没有属性 'split'

致命:所有主机都已失败 -- 正在中止

我正在使用的 RDS 的 ansible playbook 如下

---
- hosts: localhost
  gather_facts: no
  vars_files:
   - ../group_vars/dev_vpc
   - ../group_vars/dev_sg
   - ../hosts_vars/ec2_info
   - ../hosts_vars/rds_info
  vars:
    instance_type: db.m1.medium
    db_engine: MySQL
    engine_version: 5.6.19a
    subnet: dev-subnet-group
    iops: 1000
    db_name: dev_rds
  tasks:
   - name: Creating RDS subnet group
     local_action:
     module: rds_subnet_group
     state: present
     name: "{{ subnet }}"
     region: "{{ region }}"
     description: Subnet Group for RDS instance
     subnets:
       - "{{ PrivateSubnetA }}"
       - "{{ PrivateSubnetB }}"
 - name: create mysql RDS instance
   local_action:
     module: rds
     command: create
     instance_name: dev-rds
     region: "{{ region }}"
     size: 100
     instance_type: "{{ instance_type }}"
     db_engine: "{{ db_engine }}"
     engine_version: "{{ engine_version }}"
     subnet: "{{ subnet }}"
     multi_zone: yes
     db_name: "{{ db_name }}"
     username: "{{ username }}"
     password: "{{ pass }}"
     vpc_security_groups: "{{ sg_mysql  }}"
     iops: "{{ iops }}"  

我在互联网上进行了很多搜索,但无法找到正确的答案。谁能指出我的错误。谢谢

【问题讨论】:

  • 您在对 rds 模块的调用中将 vpc_security_groups 设置为“{{ sg_mysql }}”。这似乎是您发布的错误的来源,但是在您的代码中,我没有看到您将 sg_mysql 设置为什么。你确定 sg_mysql 设置了吗?你把它设置成什么?
  • @BruceP {{ sg_mysql }} 参数在 dev_sg vars_file 中设置,该文件将作为 playbook 运行的一部分包含在内。单独完成时,整个剧本也可以正常执行。但是,如果我从另一个 playbok 调用此文件,则会引发错误。
  • 你确定“另一个”剧本没有覆盖 sg_mysql 变量吗?
  • 那么 sg_mysql 的设置是什么?如有必要,通过添加任务“debug: var=sg_mysql”来验证它的设置。
  • ok: [localhost] => { "var": { "sg_mysql": { "changed": false, "group_id": "sg-d73012b2", "invocation": { "module_args" : "", "module_name": "ec2_group" } } } }

标签: python amazon-web-services ansible ansible-playbook rds


【解决方案1】:

问题通过替换解决了

vpc_security_groups:“{{ sg_mysql }}”

vpc_security_groups:“{{ sg_mysql.group_id }}”

问题是由于传递给模块的数据有误。

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多