【问题标题】:Ansible "set_fact" repository url from json file using filters like "from_json"使用“from_json”等过滤器来自json文件的Ansible“set_fact”存储库url
【发布时间】:2018-02-06 15:22:52
【问题描述】:

使用 Ansible“set_fact”模块,我需要使用“from_json”等过滤器从 json 文件中获取存储库 url。我尝试了几种方法,但仍然不明白应该如何工作。

- name: initial validation
  tags: bundle
  hosts: localhost
  connection: local

  tasks:
  - name: register bundle version_file
    include_vars:
      file: '/ansible/playbook/workbench-bundle/bundle.json'
    register: bundle

  - name: debug registered bundle file
    debug:
      msg: '{{ bundle }}'

我得到了我想要的 json:

TASK [debug registered bundle file] ************************************************
ok: [127.0.0.1] => {
    "msg": {
        "ansible_facts": {
            "engine-config": "git@bitbucket.org/engine-config.git",
            "engine-monitor": "git@bitbucket.org/engine-monitor.git",
            "engine-server": "git@bitbucket.org/engine-server.git",
            "engine-worker": "git@bitbucket.org/engine-worker.git"        
    },
        "changed": false
    }
}

然后我尝试通过键名选择每个值,以将此值用作 URL 以在单独的实例中“npm install”每个包。

  - name: set_fact some paramater
    set_fact:
      engine_url: "{{ bundle.('engine-server') | from_json }}"

然后我得到错误:

致命:[127.0.0.1]:失败! => {“失败”:真,“味精”:“模板错误 while 模板化字符串:预期的名称或数字。细绳: {{ bundle.('engine-server') }}"}

我有很多其他方式像这样loopkup,但它仍然因其他错误而失败。有人可以帮助理解,我如何找到每个参数并将他存储为“set_fact”?谢谢

【问题讨论】:

  • 你想达到什么目的?
  • @techraf 我尝试“set_fact”每个 url 值作为来自 json 的参数。像“engine_url”。然后 npm 在单独的实例上安装每一个。

标签: json ansible


【解决方案1】:

这是一个示例工作代码,用于设置问题中的变量(尽管我认为其中没有多大意义):

- name: initial validation
  tags: bundle
  hosts: localhost
  connection: local

  tasks:
  - name: register bundle version_file
    include_vars:
      file: '/ansible/playbook/workbench-bundle/bundle.json'
      name: bundle

  - debug:
      var: bundle

  - debug:
      var: bundle['engine-server']

  - name: set_fact some paramater
    set_fact:
      engine_url: "{{ bundle['engine-server'] }}"

以上假设您的输入数据(您未包括在内)是:

{
  "engine-config": "git@bitbucket.org/engine-config.git",
  "engine-monitor": "git@bitbucket.org/engine-monitor.git",
  "engine-server": "git@bitbucket.org/engine-server.git",
  "engine-worker": "git@bitbucket.org/engine-worker.git"
}

【讨论】:

  • 如果我用“var: bundle.engine-server”尝试你的建议,我得到错误:“bundle.engine-server”:“变量未定义!”。
  • 我错过了你在变量名中有破折号的事实。固定。
猜你喜欢
  • 2019-05-15
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多