ansible playbook按此顺序执行:任务,角色,任务,角色,任务

sim*_*mon 34 ansible

原谅我的新手问题,但是我想执行三个任务并在剧本中使用两个角色,顺序如下:

  1. 任务
  2. 角色
  3. 任务
  4. 角色
  5. 任务

这是我到目前为止(任务,角色,任务):

---
- name: Task Role Task
  hosts: 127.0.0.1
  connection: local
  gather_facts: false

  pre_tasks:
   - name: Do this task first
     foo:

  roles:
  - role: this role second
    foo:

  post_tasks: 
   - name: Do this task third
     foo:
Run Code Online (Sandbox Code Playgroud)

这是可能的,还是应该将我的任务转变为角色?

Mic*_*raz 23

每个"主机:" - 块将逐个执行.因此,您可以使用多个块来强制执行所需的执行顺序:

---
- hosts: 127.0.0.1
  tasks:
   - name: Do this task first

- hosts: 127.0.0.1
  roles:
  - role: this role second

- hosts: 127.0.0.1
  tasks:
   - name: Do this task third
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的问题在于,如果您决定尝试使用滚动更新并打算按顺序执行播放集.而不是连续完成所有内容,每个播放将完成整个主机集! (7认同)

sia*_*olt 21

我建议您为post ans和pre任务创建角色.

你的site.yml必须是这样的:

---
- hosts: localhost
  remote_user: "{{remote_user}}"
  sudo: yes
  gather_facts: false
  roles:
    - pre
    - main_role
    - post
Run Code Online (Sandbox Code Playgroud)

在roles文件夹中,您必须具有三个角色:pre,post和main_role.

  • 这是正确的方法,因为它可以正常用于滚动更新,这与使用单独的主机部分不同. (3认同)

小智 14

---
- name: Task Role Task
  hosts: 127.0.0.1
  connection: local
  gather_facts: false

  tasks:
    - name: task1
      foo: 

    - name: include role1
      include_role: 
        name: myrole1

    - name: task2
      foo:

    - name: include role2
      include_role: 
        name: myrole2
Run Code Online (Sandbox Code Playgroud)

看官方文档

  • 在我看来,_this_是此问题的真正答案。但是,当最初提出该问题时,也许那时还不可用。 (2认同)
  • 还有可能相关的“import_role”。https://docs.ansible.com/ansible/latest/modules/import_role_module.html (2认同)