Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 在同一剧本中创建事实文件时,剧本无法读取本地事实_Ansible - Fatal编程技术网

Ansible 在同一剧本中创建事实文件时,剧本无法读取本地事实

Ansible 在同一剧本中创建事实文件时,剧本无法读取本地事实,ansible,Ansible,我有一个简单的剧本,其中我试图将本地事实文件推送到远程主机,然后根据本地事实的比较执行任务。但是,facts文件按预期在远程主机上创建,但未被读取 我认为在文件创建和读取之间一定会有延迟,所以我只能等待,以确保在读取之前创建文件 问:“如果重新运行同一个剧本,第一次不被阅读,效果很好。” 答:在同一剧本中开始新的剧本 - hosts: "{{ target }}" vars: abc: "10" xyz: "11" tasks: - name: write c

我有一个简单的剧本,其中我试图将本地事实文件推送到远程主机,然后根据本地事实的比较执行任务。但是,facts文件按预期在远程主机上创建,但未被读取

我认为在文件创建和读取之间一定会有延迟,所以我只能等待,以确保在读取之前创建文件

问:“如果重新运行同一个剧本,第一次不被阅读,效果很好。”

答:在同一剧本中开始新的剧本

- hosts: "{{ target }}"
  vars:
    abc:  "10"
    xyz:  "11"
  tasks:
    - name: write custom fact
      copy:
        ...

- hosts: "{{ target }}"
  tasks:
    - debug: var=ansible_local.somefact_a.some_var1
    - debug: var=ansible_local.somefact_b.some_var2
      ...
例如下面的剧本

- hosts: test_01
  tasks:
    - copy:
        dest: /etc/ansible/facts.d/somefact_a.fact
        content: |
          {"some_var1": 10}

- hosts: test_01
  tasks:
    - debug:
        var: ansible_local.somefact_a.some_var1
给予


注释

1) 需要安装程序来读取变量

$ ansible -i hosts test_01 -m setup -a "filter=ansible_local"
test_01 | SUCCESS => {
    "ansible_facts": {
        "ansible_local": {
            "somefact_a": {
                "some_var1": 10
            }
        }
    }, 
    "changed": false
}
2) 没有设置,变量不可用

$ ansible -i hosts test_01 -m debug -a "var=ansible_local"
test_01 | SUCCESS => {
    "ansible_local": "VARIABLE IS NOT DEFINED!"
}
3) 同样的负面结果也可以通过
collect\u facts:false


{“msg”:“条件检查'ansible\u local.somefact\u a.some\u var1!=ansible\u local.somefact\u b.some\u var2'失败。错误是:计算条件时出错(ansible\u local.somefact\u a.some\u var1!=ansible\u local.somefact\u b.some\u var2):“dict object”没有属性“somefact\u a”\n\n错误似乎出现在
中,您应该在托管主机上创建新事实后调用
安装程序
模块。事实收集通常是playbook执行的第一步。上面没有运气-不确定这是否是错误,但我已经报告了这一点。我已经用示例更新了答案。您应该关闭该问题。需要“设置”来读取变量。
$ ansible -i hosts test_01 -m setup -a "filter=ansible_local"
test_01 | SUCCESS => {
    "ansible_facts": {
        "ansible_local": {
            "somefact_a": {
                "some_var1": 10
            }
        }
    }, 
    "changed": false
}
$ ansible -i hosts test_01 -m debug -a "var=ansible_local"
test_01 | SUCCESS => {
    "ansible_local": "VARIABLE IS NOT DEFINED!"
}
- hosts: test_01
  gather_facts: false
  tasks:
    - debug:
        var: ansible_local.somefact_a.some_var1