在剧本中使用角色时 Ansible 剧本不起作用
Ansible playbook not working when using roles in playbook
所以,我的剧本在使用这种语法时工作正常:
---
- hosts: all
become: true
become_user: root
gather_facts: false
connection: local
vars_files:
- roles/docker_setup/vars/docker_vars.yml
- roles/docker_setup/vars/aws_cred.yml
vars:
instance_ids:
- "i-xxxxxxxxxxx"
tasks:
- include_role:
name: docker_setup
tasks_from: docker_tasks.yml
但我读到你可以使用这种语法,一旦我想向剧本添加新角色,它看起来更容易处理:
---
- hosts: all
become: true
become_user: root
gather_facts: false
connection: local
vars_files:
- roles/docker_setup/vars/docker_vars.yml
- roles/docker_setup/vars/aws_cred.yml
vars:
instance_ids:
- "i-xxxxxxxxxxx"
roles:
- docker_setup
区别是:
roles:
- docker_setup
而不是
tasks:
- include_role:
name: docker_setup
tasks_from: docker_tasks.yml
但是当我尝试 运行 剧本时没有任何反应:
sudo ansible-playbook docker_setup.yml --ask-vault-pass -i hosts --user devops --key-file /home/devops/.ssh/id_rsa
Vault password:
PLAY [all] *************************************************************************************************************************************************
PLAY RECAP *************************************************************************************************************************************************
为什么会这样?这是我的角色树:
.
├── docker_setup
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── docker_tasks.yml
│ └── vars
│ ├── aws_cred.yml
│ └── docker_vars.yml
└── user_host_create
├── handlers
│ └── user_handlers.yml
├── tasks
│ └── user_tasks.yml
└── vars
├── user_password_vault.txt
├── user_password.yml
└── user_vars.yml
和主机文件:
[webservers]
172.31.31.223
谢谢!
下面两个选项的区别在于执行任务的文件。
tasks:
- include_role:
name: docker_setup
tasks_from: docker_tasks.yml
roles:
- docker_setup
第一种情况,显式是roles/docker_setup/tasks/docker_tasks.yml(见tasks_from).
第二种情况是roles/docker_setup/tasks/main.yml(见Role directory structure)。角色中缺少此文件。结果,什么都没有执行。您可以修复它并创建文件,例如
shell> cat roles/docker_setup/tasks/main.yml
- ansible.builtin.import_tasks: docker_tasks.yml
这将使这两个选项在执行哪些任务方面是等价的。但是,还会有其他差异,例如变量的范围,或标签的继承。有关详细信息,请参阅 Using Roles。
所以,我的剧本在使用这种语法时工作正常:
---
- hosts: all
become: true
become_user: root
gather_facts: false
connection: local
vars_files:
- roles/docker_setup/vars/docker_vars.yml
- roles/docker_setup/vars/aws_cred.yml
vars:
instance_ids:
- "i-xxxxxxxxxxx"
tasks:
- include_role:
name: docker_setup
tasks_from: docker_tasks.yml
但我读到你可以使用这种语法,一旦我想向剧本添加新角色,它看起来更容易处理:
---
- hosts: all
become: true
become_user: root
gather_facts: false
connection: local
vars_files:
- roles/docker_setup/vars/docker_vars.yml
- roles/docker_setup/vars/aws_cred.yml
vars:
instance_ids:
- "i-xxxxxxxxxxx"
roles:
- docker_setup
区别是:
roles:
- docker_setup
而不是
tasks:
- include_role:
name: docker_setup
tasks_from: docker_tasks.yml
但是当我尝试 运行 剧本时没有任何反应:
sudo ansible-playbook docker_setup.yml --ask-vault-pass -i hosts --user devops --key-file /home/devops/.ssh/id_rsa
Vault password:
PLAY [all] *************************************************************************************************************************************************
PLAY RECAP *************************************************************************************************************************************************
为什么会这样?这是我的角色树:
.
├── docker_setup
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── docker_tasks.yml
│ └── vars
│ ├── aws_cred.yml
│ └── docker_vars.yml
└── user_host_create
├── handlers
│ └── user_handlers.yml
├── tasks
│ └── user_tasks.yml
└── vars
├── user_password_vault.txt
├── user_password.yml
└── user_vars.yml
和主机文件:
[webservers]
172.31.31.223
谢谢!
下面两个选项的区别在于执行任务的文件。
tasks:
- include_role:
name: docker_setup
tasks_from: docker_tasks.yml
roles:
- docker_setup
第一种情况,显式是roles/docker_setup/tasks/docker_tasks.yml(见tasks_from).
第二种情况是roles/docker_setup/tasks/main.yml(见Role directory structure)。角色中缺少此文件。结果,什么都没有执行。您可以修复它并创建文件,例如
shell> cat roles/docker_setup/tasks/main.yml
- ansible.builtin.import_tasks: docker_tasks.yml
这将使这两个选项在执行哪些任务方面是等价的。但是,还会有其他差异,例如变量的范围,或标签的继承。有关详细信息,请参阅 Using Roles。