是否可以在Ansible主机上运行命令?
我的场景是,我想从内部托管的git服务器上结账(在公司防火墙之外无法访问)。然后,我想将结帐(tarballed)上传到生产服务器(外部托管)。
目前,我正在考虑运行一个执行签出的脚本,将其压缩,然后运行部署脚本-但如果我能将其集成到Ansible中,那将是更可取的。
发布于 2013-09-20 09:08:28
可以,您可以在Ansible主机上运行命令。您可以指定播放中的所有任务在Ansible主机上运行,也可以将单个任务标记为在Ansible主机上运行。
如果您想在Ansible主机上运行整个play,则在play中指定hosts: 127.0.0.1
和connection:local
,例如:
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
有关更多详细信息,请参阅Ansible文档中的Local Playbooks。
如果您只想在Ansible主机上运行单个任务,则可以使用local_action
指定任务应在本地运行。例如:
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
有关更多详细信息,请参阅Ansible文档中的Controlling where tasks run: delegation and local actions。
编辑:通过将以下内容添加到您的库存中,您可以避免在您的游戏中键入connection: local
:
localhost ansible_connection=local
(在这里,您将使用"localhost“而不是"127.0.0.1”来引用该剧)。
编辑:在较新版本的ansible中,您不再需要将上述行添加到您的清单中,ansible假设它已经存在。
发布于 2016-03-08 06:17:45
我发现了一些其他的方法,你可以用它们来写这些,它们的可读性会更好一些。
- name: check out a git repository
local_action:
module: git
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
或
- name: check out a git repository
local_action: git
args:
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
发布于 2016-08-02 17:11:28
我想分享的是,Ansible可以通过shell在本地主机上运行:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
这可能对简单的任务或Ansible的一些实践学习很有帮助。
代码示例取自这篇好文章:
https://stackoverflow.com/questions/18900236
复制相似问题