在Ansible主机上运行命令
有没有可能在Ansible主机上运行命令?
我的情况是,我想从内部托pipe的git服务器(并且不能在公司防火墙之外访问)进行签出。 然后我想将结帐(tarballed)上传到生产服务器(外部托pipe)。
目前,我正在运行一个脚本执行结帐,tarballs,然后运行部署脚本 – 但是如果我可以将它集成到Ansible,这将是可取的。
是的,您可以在Ansible主机上运行命令。 您可以指定播放中的所有任务在Ansible主机上运行,也可以将单个任务标记为在Ansible主机上运行。
如果要在Ansible主机上运行整个播放,请在播放中指定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文档中的本地手册 。
如果您只想在您的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文档中的授权。
编辑:你可以避免在游戏中inputconnection: local
,把它添加到你的广告资源中:
localhost ansible_connection=local
(在这里你可以使用“localhost”而不是“127.0.0.1”来表示播放)。
编辑:在较新的ansible版本中,您不再需要将上面的行添加到您的广告资源中,而是可以假设它已经在那里了。
我已经find了一些其他的方式,你可以写这些更具可读性的恕我直言。
- 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
我想分享一下,Ansible可以通过shell在localhost上运行:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
这对于简单的任务或Ansible的一些动手学习可能是有帮助的。
代码示例摘自这篇好文章:
在本地主机上运行完整的操作手册
扩展@gordon的答案,这里是一个可读的语法和参数的shell /命令模块传递的例子(这些与git模块的不同之处在于,必须有自由forms的参数,正如@ander所指出的那样)
- 名称:“释放压缩包生成” local_action: 模块:shell _raw_params:git档案 - 格式zip - 输出release.zip HEAD chdir:“文件/克隆/ webhooks”
您可以使用delegate_to
在您的Ansible主机(pipe理主机)上运行您的Ansible游戏的命令。 例如:
删除一个文件,如果它已经存在于Ansible主机上:
- name: Remove file if already exists file: path: /tmp/logfile.log state: absent mode: "u+rw,g-wx,o-rwx" delegate_to: 127.0.0.1
在Ansible主机上创build一个新文件:
- name: Create log file file: path: /tmp/logfile.log state: touch mode: "u+rw,g-wx,o-rwx" delegate_to: 127.0.0.1