角色和任务是否存在于同一个剧本中?

guy*_*yja 16 ansible ansible-playbook

---
# file: main.yml

- hosts: fotk
  remote_user: fakesudo
  tasks:
  - name: create a developer user
    user: name={{ user }}
          password={{ password }}
          shell=/bin/bash
          generate_ssh_key=yes
          state=present
  roles:
  - { role: create_developer_environment, sudo_user: "{{ user }}" }
  - { role: vim, sudo_user: "{{ user }}" }
Run Code Online (Sandbox Code Playgroud)

由于某种原因,创建用户任务未运行.我在Google上搜索了我能想到的每个关键词,找不到答案但没有成功.

角色正在运行,这很奇怪.

一个剧本是否可以包含任务和角色?

Rus*_*ley 13

你也可以做pre_tasks:和post_tasks:如果你需要在之前或之后做事.来自文档https://docs.ansible.com/playbooks_roles.html

- hosts: localhost

  pre_tasks:
    - shell: echo 'hello in pre'

  roles:
    - { role: some_role }

  tasks:
    - shell: echo 'in tasks'

  post_tasks:
    - shell: echo 'goodbye in post'
Run Code Online (Sandbox Code Playgroud)

>

给出输出:PLAY [localhost]


收集事实****************************************************************好的:[localhost]

任务:[shell echo'enlo in pre']*******************************************更改:[localhost]

任务:[some_role | shell echo'hello from the role']**************************已更改:[localhost]

任务:[任务中的shell echo']*************************************************已更改:[localhost]

任务:[贝壳回声'在帖子中再见']**************************************改变了:[localhost]

回放*********************************************************************localhost:ok = 5已更改= 4无法访问= 0
失败= 0

这是与ansible 1.9.1


Rég*_* B. 8

https://docs.ansible.com/playbooks_roles.html#roles

如果游戏仍然有"任务"部分,则在应用角色后执行这些任务.

如果您希望在执行角色之前或之后运行任务,则需要在pre_tasks和下列出这些任务post_tasks.因此,无法在两个角色之间运行"松散"任务.您可能希望为这些任务创建专用角色.

  • 请参阅@michael-aicher 的回答以获取有关此问题的更新。Ansible 2.3 引入了 `include_role` 选项。 (3认同)

Mic*_*her 8

通过引用最新的 Ansible 文档docs.ansible.com/latest/playbooks_reuse_roles对已经提到的选项进行简短跟进:

从 Ansible 2.4 开始,您现在可以使用 import_role 或 include_role 将角色与任何其他任务内联使用:

---    
- hosts: webservers
  tasks:
    - debug:
      msg: "before we run our role"
    - import_role:
      name: example
    - include_role:
      name: example
    - debug:
      msg: "after we ran our role"`
Run Code Online (Sandbox Code Playgroud)

代码片段也来自 Ansible 文档。

请注意静态 (import*) 和动态 (include*) 用法之间的区别。


udo*_*dan 7

实际上这应该是可能的,我记得我在测试期间做了几次。可能与您的版本有关-或顺序确实很重要,因此任务将在角色之后执行。

我会将其作为评论而不是答案发布,但是我无法在评论中给出以下示例:

无论为什么不执行任务的原因,您始终可以将剧本分成多个剧本,如下所示:

---
# file: main.yml

- hosts: fotk
  remote_user: fakesudo
  tasks:
  - name: create a developer user
    user: name={{ user }}
          password={{ password }}
          shell=/bin/bash
          generate_ssh_key=yes
          state=present

- hosts: fotk
  remote_user: fakesudo
  roles:
  - { role: create_developer_environment, sudo_user: "{{ user }}" }
  - { role: vim, sudo_user: "{{ user }}" }
Run Code Online (Sandbox Code Playgroud)