如何让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选项: