Tec*_*ain 5 ansible devops ansible-2.x
我写了一个master.yaml如下定义的剧本
- hosts: master
remote_user: "{{ ansible_user }}"
tasks:
- name: Get env
command: id -g -n {{ lookup('env', '$USER') }}
register: group_user
vars:
is_done: "false"
- include: slave.yaml
vars:
sethostname: "{{ group_user }}"
worker: worker
when: is_done == "true"
where: inventory_hostname in groups['worker']
Run Code Online (Sandbox Code Playgroud)
slave.yaml在满足某些条件后,我正在尝试运行另一本名为以下定义的剧本。
- hosts: worker
remote_user: "{{ ansible_user }}"
tasks:
- name: Write to a file for deamon setup
copy:
content: "{{ sethostname }}"
dest: "/home/ubuntu/test.text"
Run Code Online (Sandbox Code Playgroud)
现在我有两个问题:
isDone。slave.yaml仅在isDone为true 时才起作用。我不知道这是否是实现目标的正确方法。但是,我试图通过尽可能多地保持逻辑来使本手册发挥作用。希望能帮助到你。
关键是您不能import_playbook在剧本内部使用。查看模块文档以获取更多信息。因此,我建议使用角色而不是剧本来共享代码。您将能够slave在master剧本和另一个剧本(slave例如,一个剧本)之间共享角色。
ansible文件夹结构如下。
??? hosts
??? master.yml
??? roles
??? slave
??? tasks
??? main.yml
Run Code Online (Sandbox Code Playgroud)
---
- name: 'Master Playbook'
# Using the serial keyword to run the playbook for each host one by one
hosts: master
serial: 1
remote_user: "{{ ansible_user }}"
tasks:
- name: 'Get env'
command: id -g -n {{ lookup('env', '$USER') }}
register: group_user
- name: 'Calling the slave role'
import_role:
name: 'slave'
# The return value of the command is stored in stdout
vars:
sethostname: "{{ group_user.stdout }}"
# Only run when the task get env has been done (state changed)
when: group_user.changed
# Delegate the call to the worker host(s) -> don't know if it's the expected behavior
delegate_to: 'worker'
Run Code Online (Sandbox Code Playgroud)
---
- name: 'Write to a file for deamon setup'
copy:
content: "{{ sethostname }}"
dest: "/tmp/test.text"
Run Code Online (Sandbox Code Playgroud)
最后/tmp/test.text包含有效的用户组名称。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |