我开始使用ansible,我正在寻找一种方法来使用ansible playbook在服务器和本地环境上创建样板项目。
我想在本地使用ansible模板来创建一些通用文件。 但是我如何使用 ansible 在本地执行某些操作?
我读了一些关于 local_action 的内容,但我想我没有理解正确。
这是用于网络服务器的......但我如何获取它并在本地创建一些文件?
- hosts: webservers
remote_user: someuser
- name: create some file
template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini
您可以使用参数
delegate_to
将任务委托给您喜欢的任何主机,例如:
- name: create some file
template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini
delegate_to: localhost
请参阅文档中的Playbook 委托。
对于本地主机,您还需要确保库存中的本地连接:
[local]
localhost ansible_connection=local
Ansible 有一个
local_action
指令来支持这些场景,避免了 localhost
和/或 ansible_connection
解决方法,并在 Delegation 文档中进行了介绍。
修改原始示例以使用
local_action
:
- name: create some file
local_action: template src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini
看起来更干净。
如果您无法执行/允许本地主机 SSH,您可以将 playbook 拆分为本地操作和远程操作。
connection: local
表示不要对 playbook 使用 SSH,如下所示:https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#local-playbooks
示例:
# myplaybook.yml
- hosts: remote_machines
tasks:
- debug: msg="do stuff in the remote machines"
- hosts: 127.0.0.1
connection: local
tasks:
- debug: msg="ran in local ansible machine"
- hosts: remote_machines
tasks:
- debug: msg="do more stuff in remote machines"