当前位置: 首页 > 知识库问答 >
问题:

如何使用Ansible Playbook在MongoDB数据库中使用动态清单访问主机的变量?

韩梓
2023-03-14

我试图使用存储在MongoDB中的信息生成初始配置。我正在使用Ansible的动态库存功能。后端是一个简单的mongodb数据库。当手动运行ansible_fetch_mongoDB.py--list时,它会根据Ansible的要求返回JSON中的组及其变量/子组。使用--host 参数也返回主机及其变量,不会出现任何问题。但是,当试图访问变量时,比如Ansible playbook中的item.hostnameitem.var2,它会出错,并告诉我item.hostname没有定义。我使用ansible-playbook build_configs.yml-v-i ansible_fetch_mongoDB.py命令来运行它。我已经在这个问题上工作了几个小时,非常感谢任何关于从动态源访问变量的正确语法的帮助。

- hosts: localhost 
  tasks:
  - name: configuration generator 
    template: 
      src=roles/core_router/templates/3850.j2
      dest=/etc/ansible/generated_templates/{{ item }}.txt
    with_inventory_hostnames: all
  - debug: msg="{{ item.data1_svi_ip }}"
    with_inventory_hostnames: all
{
    "_id": "ROUTER123",
    "hostname": "ROUTER123",
    "vars": {
        "data1_svi_ip": "10.19.83.254 255.255.254.0",
        "device_num": "01",
        "device_type": "Router",
        "floor": "04",
        "grp_ip": "10.19.93.14 255.255.255.240",
        "mgmt_net": "10.19.103.254 255.255.254.0",
        "model": "3850",
    }
}

以下是MongoDB中所代表的组:

{
    "_id": "Router",
    "children": [],
    "hosts": [
        "Router123",
    ],
    "name": "Router",
    "vars": {}
}

以下是错误:

任务[调试]

致命:[localhost]:失败!=>{“failed”:true,“msg”:“字段'args'的值无效,似乎包含未定义的变量。错误是:'ansible.vars.unsafe_proxy.ansibleunsafetext object'没有属性'data1_svi_ip'\n\n该错误似乎出现在'/etc/ansible/build_configs.yml':第8行,第5列,但可能\n在文件的其他地方,这取决于确切的语法问题。\n\n出错的行似乎是:\n\n with_inventory_hostnames:all\n-debug:msg=\“{{item.data1_svi_ip}}\”\n^这里\n我们可能错了,但这可能是\n缺少引号的问题在模板表达式方括号\n开始一个值时,总是引用它们。例如:\n\n with_items:\n-{{foo}}\n\n应写成:\n\n with_items:\n-\“{{foo}}\”\n“}

共有1个答案

陆子石
2023-03-14

with_inventory_hostnames查找插件返回主机名。它们是字符串,而不是对象,因此Ansible报告:没有属性'data1_svi_ip'

要访问宿主变量,需要使用:

- debug:
    var: hostvars[item].data1_svi_ip
  with_inventory_hostnames: all
 类似资料:
  • 问题内容: Mongodb是一个无模式文档数据库,但是在春季数据中,有必要定义实体类和存储库类,如下所示: 实体类: 存储库类: 无论如何,在春季数据mongodb中是否有使用map not class的功能,以便服务器可以接受任何动态JSON数据,然后将其存储在BSON中而无需任何预定义类? 问题答案: 您可能想知道,Spring或Java是否是解决您问题的正确解决方案-为什么不使用更动态的工具

  • Spring-Data-MongoDB。我如何使用spring-data-mongodb库在mongo中动态创建数据库? 我试图使用Spring-Mongodb-Data模块对Mongo数据库进行CRUD操作,通过示例和文章,我的假设是在定义MongoTemplate bean时应该在spring上下文xml中预定义databasename。 请帮帮我. 谢谢-RK

  • 我有一个docker compose文件,看起来像: 运行之后,我看到所有的服务都启动了,并且看起来工作良好。我的服务使用以下sqlalchemy连接字符串连接到postgres: 编辑:这是在接受的解决方案中的一个评论中回答的,但我认为值得在这里指出:我已经在本地运行postgres,这引起了各种混乱。 删除我的本地postgres实例并更新我的hosts文件,就像接受的答案中提到的那样,一切都

  • 正如主题所说。我在主机清单文件中定义了一些主机变量。我如何在我的剧本中访问它们? 这里有一个例子。根据我所有的研究,我希望和是的一部分。我可以将主机特定的变量放在单独的var文件中,但我希望将它们保存在“附加”到主机的清单文件中。我不想在模板中使用它。ansible版本:1.3.2,Ansible_distribution_version:6.4

  • 问题内容: 我正在尝试从JavaScript中的JSON过滤数据。 我定义一个变量。我想要等于(不等于)的属性。到目前为止,我还没有找到一种方法。 其他所有内容均正常运行,因为当我将其更改为特定条目(例如,item.date)时,它可以正常工作。我找不到正确的语法。 问题答案: 试试看,也可以通过这种方式访问​​javascript对象。

  • 本文向大家介绍docker中使用mongodb数据库详解(在局域网访问),包括了docker中使用mongodb数据库详解(在局域网访问)的使用技巧和注意事项,需要的朋友参考一下 前言 有了docker,基本上就告别了各种软件、数据库的安装,直接从镜像库pull下来,爽,想想以前那真是一个遭罪啊。 这文章就来看一下如何跑mongo的docker镜像,并且可以在局域网访问,内容相对简单,也是记录我的