【问题标题】:How to get facts at each command in Ansible如何在 Ansible 中获取每个命令的事实
【发布时间】:2016-05-12 12:11:42
【问题描述】:

Ansible 仅在开始时获取事实。但我需要检查每个命令的事实。 例如:

我需要创建一个目录,然后我需要把文件放到这个目录中。但是 ansible 在开始时获取事实 'dir 不存在',创建 dir 并且在下一步中事实仍然是 FALSE 并且 ansible 跳过此步骤 =( 并且仅在第二次运行后执行此步骤。

我会尝试setup 重新收集事实的所有步骤,但它不起作用。

我是这样做的:

 - stat: path=/etc/zabbix/scripts/rabbitmq
   register: rmqscriptdir

 - name: Create scripts dir if not exist
   when: rmqscriptdir.stat.exists == False
   shell: mkdir /etc/zabbix/scripts/rabbitmq

 - name: Gathering facts again
   setup:

 - name: Set owner and permissions to rabbitmq directory
   when: rmqscriptdir.stat.exists == True
   file: path=/etc/zabbix/scripts/rabbitmq owner=zabbix group=root mode=0750


 - stat: path=/etc/zabbix/scripts/rabbitmq/api.py
   register: rmqscript_api

 - name: Create api.py if not exist 
   when: rmqscript_api.stat.exists == False and rmqscriptdir.stat.exists == True
   shell: cd /etc/zabbix/scripts/rabbitmq; wget https://raw.githubusercontent.com/jasonmcintosh/rabbitmq-zabbix/master/scripts/rabbitmq/api.py

 - name: Gathering facts again
   setup:

 - name: Set owner and permissions to api.py
   when: rmqscript_api.stat.exists == True
   file: path=/etc/zabbix/scripts/rabbitmq/api.py owner=zabbix group=root mode=0755

【问题讨论】:

    标签: ansible ansible-playbook ansible-facts


    【解决方案1】:

    我认为您误解了 setup 模块的作用。通过注册一个值,setup 模块在再次运行时不会重新加载它。您的注册价值保持不变。如果要再次检查路径是否存在,则无需重新运行setup 模块,而是重新运行stats 模块并再次注册其输出。

    但无论如何,Ansible 的想法实际上是不手动检查是否应该执行每个任务。这是 Ansible 照顾你的事情,Ansible 总的来说是无能的,这意味着无论你运行多少次它都会得到相同的结果。

    这是一个清理版本,它创建一个文件夹并下载文件。如果文件夹已经存在,第一个任务将不执行任何操作。如果文件api.py 已经存在,则第二个任务将不执行任何操作。

    - name: Create scripts dir if not exist
      file:
        path: /etc/zabbix/scripts/rabbitmq
        state: directory
        owner: zabbix
        group: root
        mode: 0750
    
    - name: Create api.py if not exist
      get_url:
        url: https://raw.githubusercontent.com/jasonmcintosh/rabbitmq-zabbix/master/scripts/rabbitmq/api.py
        dest: /etc/zabbix/scripts/rabbitmq/api.py
        owner: zabbix
        group: root
        mode: 0755
    

    PS:如果您想查看setup 模块重新加载了哪些值,您可以注册其输出并在调试任务中显示,如下所示:

    - setup:
      register: all_server_facts
    
    - debug:
        var: all_server_facts
    

    这仅包含服务器事实、有关 cpu、硬盘驱动器、网络等的信息。有关示例输出,请参阅 this answer

    【讨论】:

    • 感谢您的回答。在 ansible 我使用 puppet 之前,它随机运行一个任务并希望检查每个命令的所有依赖关系。我可以将统计信息注册到以前注册的变量吗?
    • 您可以覆盖以前注册的变量。是这个意思吗?
    • 最后一个问题。我可以在“文件”或“get_url”部分下使用关键字“名称”吗?
    • 你的意思是给你的任务命名?好的。我将它添加到上面的示例中。
    • 没有。我需要知道目录是否存在,然后我可以在目录中创建文件,否则我需要创建目录,然后创建文件。但是,如果我理解正确,ansible 会相应地运行,并且如果我在任务开始时创建目录,我可以确定 -- dir 存在于任务的后续步骤中?
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2014-09-11
    • 2022-01-20
    • 2022-06-10
    相关资源
    最近更新 更多