我开始使用ansible,我正在寻找一种在服务器和本地环境中使用ansible playbooks创建样板项目的方法。
我想在本地使用ansible模板来创建一些通用文件。 但是我如何采取ansible在本地执行某些事情呢?
我用local_action读了一些东西,但我想我没弄错。
这是针对webbserver的......但我如何在本地创建一些文件?
- hosts: webservers
remote_user: someuser
- name: create some file
template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini
答案 0 :(得分:27)
您可以使用参数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 Delegation。
如果您的剧本通常应该在本地运行,但不涉及外部主机,您只需创建一个包含localhost
的组,然后针对该组运行剧本。在您的广告资源中:
[local]
localhost
然后在你的剧本中:
hosts: local
答案 1 :(得分:13)
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
看起来更干净。
答案 2 :(得分:1)
如果您无法执行/允许localhost SSH,则可以将Playbook拆分为本地操作和远程操作。
connection: local
表示不使用SSH作为剧本,如下所示:http://docs.ansible.com/ansible/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"