use*_*660 46 ansible ansible-playbook
我有这个 play.yml
---
- hosts: 127.0.0.1
connection: local
sudo: false
tasks:
- include: apache.yml
Run Code Online (Sandbox Code Playgroud)
我的Apache看起来像这样:
vars:
url: czxcxz
- name: Download apache
shell: wget {{url}}
Run Code Online (Sandbox Code Playgroud)
这给了我错误.
如果我删除vars然后它的工作原理.但是我希望将变量包含在任务中,以便我可以将不同的变量分别保存在不同的任务中.
dod*_*gio 67
注意:使用set_fact如下所述将事实/变量设置到运行任务的远程服务器上.然后,在整个剧本期间,此事实/变量将持续存在于后续任务中.
此外,这些事实是不可变的(在剧本的持续时间内),并且一旦设定就不能改变.
set_fact在任务之前使用设置似乎可与变量互换的事实:
- name: Set Apache URL
set_fact:
apache_url: 'http://example.com/apache'
- name: Download Apache
shell: wget {{ apache_url }}
Run Code Online (Sandbox Code Playgroud)
有关官方字词,请参见http://docs.ansible.com/set_fact_module.html.
app*_*ung 22
我知道,这是很久以前的事了,但是由于尚未发布最简单的答案,因此我将为可能会走过的其他用户这样做。
只需将var移到“名称”块中即可:
- name: Download apache
vars:
url: czxcxz
shell: wget {{url}}
Run Code Online (Sandbox Code Playgroud)
变量定义旨在用于任务.但是如果你想将它们包含在任务中,可能会使用该register指令.像这样:
- name: Define variable in task.
shell: echo "http://www.my.url.com"
register: url
- name: Download apache
shell: wget {{ item }}
with_items: url.stdout
Run Code Online (Sandbox Code Playgroud)
您还可以将角色视为根据不同角色角色分离任务的一种方式.这样,您可以为每个角色分别设置变量.例如,您可能有一个url变量for apache1和一个单独url的角色变量apache2.
在您的示例中,apache.yml 是任务列表,但不是剧本
根据所需的架构,您可以执行以下操作之一:
1. 将apache.yml转换为角色。然后在roles/apache/tasks/mail.yml中定义任务,在roles/apache/defaults/mail.yml中定义变量(应用角色时可以覆盖defaults中的变量)
播放.yml:
---
- hosts: localhost
connection: local
sudo: false
roles:
- apache
Run Code Online (Sandbox Code Playgroud)
角色/apache/defaults/main.yml :
---
url: czxcxz
Run Code Online (Sandbox Code Playgroud)
角色/apache/tasks/main.yml :
---
- name: Download apache
shell: wget {{url}}
Run Code Online (Sandbox Code Playgroud)
2. 在 play.yml playbook 中设置变量
播放.yml:
---
- hosts: localhost
connection: local
sudo: false
vars:
url: czxcxz
tasks:
- include: apache.yml
Run Code Online (Sandbox Code Playgroud)
阿帕奇.yml:
- name: Download apache
shell: wget {{url}}
Run Code Online (Sandbox Code Playgroud)
3.制作apache.yml完整的playbook并将其作为playbook导入到play.yml中
播放.yml:
---
- name: Configure Apache
import_playbook: apache.yml
Run Code Online (Sandbox Code Playgroud)
阿帕奇.yml:
---
- name: Configure Apache
hosts: localhost
connection: local
sudo: false
vars:
url: czxcxz
tasks:
- name: Download apache
shell: wget {{url}}
Run Code Online (Sandbox Code Playgroud)
4.从单独的文件导入变量
播放.yml:
---
- hosts: localhost
tasks:
- include: apache.yml
Run Code Online (Sandbox Code Playgroud)
阿帕奇.yml:
---
- name: Import apache vars
# Static import var-file with single var look ugly
include_vars: apache-vars.yml
- name: Download apache
shell: wget {{ url }}
Run Code Online (Sandbox Code Playgroud)
阿帕奇-vars.yml:
---
url: http://example.com/apache
Run Code Online (Sandbox Code Playgroud)
5.考虑将变量放入host_var或group_var
host_vars/localhost.yml :或 host_vars/localhost/apache.yml :
---
url: http://example.com/apache
Run Code Online (Sandbox Code Playgroud)