---
# 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上搜索了我能想到的每个关键词,找不到答案。
角色正在运行,这很奇怪。
剧本是否可以同时包含任务和角色?
答案 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_tasks
和post_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文档。
请注意静态(导入*)和动态(包含*)用法之间的区别。