首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible -从字典中抓取关键字(但不是在循环中)

问Ansible -从字典中抓取关键字(但不是在循环中)
EN

Stack Overflow用户
提问于 2016-07-29 06:38:55
回答 1查看 34.2K关注 0票数 7

关于Ansible中的字典的另一个问题!

为了方便起见,我将mysql数据库的某些值保存在字典中,它可以很好地循环使用with_dict来创建DB和DB用户。

代码语言:javascript
复制
mysql_dbs:
  db1:
    user: db1user
    pass: "jdhfksjdf"
    accessible_from: localhost
  db2:
    user: db2user
    pass: "npoaivrpon"
    accessible_from: localhost

任务:

代码语言:javascript
复制
- name: Configure mysql users
  mysql_user: name={{ item.value.user }} password={{ item.value.pass }} host={{ item.value.accessible_from }} priv={{ item.key }}.*:ALL  state=present
  with_dict: "{{ mysql_dbs }}"

然而,我想在另一个任务中使用其中一个字典中的键,但我不想循环字典,我只想一次使用一个。我如何抓取描述字典的关键字(对不起,对术语不太了解)?

问题任务:

代码语言:javascript
复制
- name: Add the db1 schema
  shell: mysql {{ item }} < /path/to/db1.sql 
  with_items: '{{ mysql_dbs[db1] }}'

ansible运行中出错:

代码语言:javascript
复制
fatal: [myhost]: FAILED! => {"failed": true, "msg": "'item' is undefined"}

我愿意相信with_items不是最好的策略,但是有谁知道什么是正确的策略吗?

提前感谢,我已经坚持了一段时间了…

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 09:08:47

给定一个嵌套的字典。

代码语言:javascript
复制
mysql_dbs:
  db1:
    user: db1user
    pass: "jdhfksjdf"
    accessible_from: localhost
  db2:
    user: db2user
    pass: "npoaivrpon"
    accessible_from: localhost

您可以使用点分符号:

代码语言:javascript
复制
- debug:
    var: mysql_dbs.db1

或者,您可以使用更具Python风格的语法:

代码语言:javascript
复制
- debug:
    var: mysql_dbs['db1']

看起来你想用一个邪恶的混血:

代码语言:javascript
复制
mysql_dbs[db1]

在本例中,您试图取消引用一个名为db1的变量,该变量可能不存在,并会导致类似"variable is undefined“的错误。

更新

你的问题不清楚,因为在你的例子中你有...

代码语言:javascript
复制
with_items: '{{ mysql_dbs[db1] }}'

...which看起来像是在尝试做我在这里描述的事情。如果您真正想要做的是迭代mysql_dbs字典的键,请记住它只是一个Python字典,并且您已经提供了所有标准字典方法,因此:

代码语言:javascript
复制
- debug:
    msg: "key: {{ item }}"
  with_items: "{{ mysql_dbs.keys() }}"

它的输出将是:

代码语言:javascript
复制
TASK [debug] *******************************************************************
ok: [localhost] => (item=db1) => {
    "item": "db1", 
    "msg": "key: db1"
}
ok: [localhost] => (item=db2) => {
    "item": "db2", 
    "msg": "key: db2"
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38647864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档