在Ansible主机上运行命令

有没有可能在Ansible主机上运行命令?

我的情况是,我想从内部托pipe的git服务器(并且不能在公司防火墙之外访问)进行签出。 然后我想将结帐(tarballed)上传到生产服务器(外部托pipe)。

目前,我正在运行一个脚本执行结帐,tarballs,然后运行部署脚本 – 但是如果我可以将它集成到Ansible,这将是可取的。

是的,您可以在Ansible主机上运行命令。 您可以指定播放中的所有任务在Ansible主机上运行,​​也可以将单个任务标记为在Ansible主机上运行。

如果要在Ansible主机上运行整个播放,请在播放中指定hosts: 127.0.0.1connection: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