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

时间:2015-06-22 19:06:57

标签: 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 }}" }

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

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

剧本是否可以同时包含任务和角色?

4 个答案:

答案 0 :(得分:9)

你也可以做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'

>

  

给出输出:PLAY [localhost]

           

收集事实   ************************************************** ************* ok:[localhost]

     

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

     

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

     

任务:[shell echo' in tasks']   *************************************************已改变:[localhost]

     

任务:[贝壳回声'再见后期']   ******************************************已更改:[localhost]

     

PLAY RECAP   ************************************************** ****************** localhost:ok = 5 changed = 4 unreachable = 0
  失败= 0

这是与ansible 1.9.1

答案 1 :(得分:8)

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

  

如果游戏仍有“任务”部分,则执行这些任务   在角色应用之后。

如果您希望在执行角色之前或之后运行任务,则需要在pre_taskspost_tasks下列出这些任务。因此,没有办法运行"松散"两个角色之间的任务。您可能希望为这些任务创建专用角色。

答案 2 :(得分:5)

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

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

无论你的任务没有执行的原因是什么,你总是可以将你的剧本分成几个剧本,如下:

---
# 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 }}" }

答案 3 :(得分:2)

通过引用最新的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"`

代码段也来自Ansible文档。

请注意静态(导入*)和动态(包含*)用法之间的区别。