如何让Ansible只运行一个步骤

如何让Ansible只运行一个步骤,ansible,Ansible,我有一个可行的步骤如下 - name: pipenv install of bluebird workers, pg helpers, boto helpers shell: pipenv --python 3.6 install "bluebird-workers>=3.0.24" "pg_helpers>=1.0.9" "boto_helpers>=1.0.28" 上述步骤会在剧本的每次运行中保持重新运行。如何使上述步骤只运行一次。我想要它安装1x并由另一个

我有一个可行的步骤如下

- name: pipenv install of bluebird workers, pg helpers, boto helpers
       shell: pipenv --python 3.6 install "bluebird-workers>=3.0.24" "pg_helpers>=1.0.9" "boto_helpers>=1.0.28"

上述步骤会在剧本的每次运行中保持重新运行。如何使上述步骤只运行一次。我想要它安装1x并由另一个任务进行更新的语义-该任务应在每次需要创建可搜索的工件(如文件)时重新运行。检查Ansible任务中是否存在该文件,如果存在,则不要运行任务

要演示的简单剧本是:

---
- hosts: localhost
  tasks:
     - name: test if file is present
       stat:
          path: /var/pip_installed
       register: stat_result

     - name: Install something
       shell: ls -l > /var/pip_installed creates=/var/pip_installed
       become: true
       when: stat_result.stat.exists == false
您可以使用shell命令替换ls-l

以下是两次运行的输出:

运行一个

$ansible剧本测试\u ps.yml [警告]:提供的主机列表为空,只有本地主机可用。请注意,隐式localhost与“all”不匹配

播放[本地主机]****

任务[收集事实]**** 确定:[本地主机]

任务[测试文件是否存在]**** 确定:[本地主机]

任务[安装某物]**** 已更改:[localhost]

重演****

localhost:ok=3 changed=1 unreachable=0 failed=0

跑两个

播放[本地主机]****

任务[收集事实]**** 确定:[本地主机]

任务[测试文件是否存在]**** 确定:[本地主机]

任务[安装某物]**** 正在跳过:[localhost]

重演****

localhost:ok=2已更改=0无法访问=0失败=0


您还可以搜索已知安装了pip的文件,或者创建自己的文件。

您需要创建可搜索的工件,例如文件。检查Ansible任务中是否存在该文件,如果存在,则不要运行任务

要演示的简单剧本是:

---
- hosts: localhost
  tasks:
     - name: test if file is present
       stat:
          path: /var/pip_installed
       register: stat_result

     - name: Install something
       shell: ls -l > /var/pip_installed creates=/var/pip_installed
       become: true
       when: stat_result.stat.exists == false
您可以使用shell命令替换ls-l

以下是两次运行的输出:

运行一个

$ansible剧本测试\u ps.yml [警告]:提供的主机列表为空,只有本地主机可用。请注意,隐式localhost与“all”不匹配

播放[本地主机]****

任务[收集事实]**** 确定:[本地主机]

任务[测试文件是否存在]**** 确定:[本地主机]

任务[安装某物]**** 已更改:[localhost]

重演****

localhost:ok=3 changed=1 unreachable=0 failed=0

跑两个

播放[本地主机]****

任务[收集事实]**** 确定:[本地主机]

任务[测试文件是否存在]**** 确定:[本地主机]

任务[安装某物]**** 正在跳过:[localhost]

重演****

localhost:ok=2已更改=0无法访问=0失败=0

您还可以搜索已知安装了pip的文件,或创建自己的文件。

尽可能避免使用shell模块

壳模不是幂等的;它无法知道它是否在之前运行,因为您可以从shell运行任何东西

一种更为干净的方法是使用

尽可能避免使用外壳模块

壳模不是幂等的;它无法知道它是否在之前运行,因为您可以从shell运行任何东西

一种更为干净的方法是使用


您希望您的剧本是幂等的,这通常是Ansible的工作方式。问题是您使用的shell模块不支持这一点。例如,尝试使用pip模块。但是如果您坚持使用shell,请尝试添加此答案中建议的creates选项:您希望您的playbook是幂等的,这通常是Ansible的工作方式。问题是您使用的shell模块不支持这一点。例如,尝试使用pip模块。但是如果您坚持使用shell,请尝试添加此答案中建议的creates选项: