在Ansible主机上运行命令

Ros*_*oss 233 deployment ansible

是否可以在Ansible主机上运行命令?

我的方案是我想从内部托管的git服务器进行结账(并且在公司防火墙外部无法访问).然后我想将结帐(tarballed)上传到生产服务器(外部托管).

目前,我正在考虑运行一个执行结帐的脚本,对其进行压缩,然后运行部署脚本 - 但是如果我可以将其集成到Ansible中,那将更为可取.

Lor*_*ein 332

是的,您可以在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
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Ansible文档中的本地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
Run Code Online (Sandbox Code Playgroud)

代表团的Ansible文档了解更多信息英寸

编辑:您可以connection: local通过将此添加到您的广告资源来避免输入您的游戏:

localhost ansible_connection=local
Run Code Online (Sandbox Code Playgroud)

(这里你使用"localhost"而不是"127.0.0.1"来指代播放).

编辑:在较新版本的ansible中,您不再需要将上述行添加到您的广告资源中,并且认为它已经存在.

  • 在委托方案中我也需要`sudo:no` (8认同)
  • @BilalUsean `ansible-playbook -K playbook.yml` 其中 -K 代表 root (2认同)

小智 68

我发现了其他几种可以写这些的方法,这些方法更具有可读性.

- name: check out a git repository
  local_action: 
    module: git
    repo: git://foosball.example.org/path/to/repo.git
    dest: /local/path
Run Code Online (Sandbox Code Playgroud)

要么

- name: check out a git repository
  local_action: git
  args:
    repo: git://foosball.example.org/path/to/repo.git
    dest: /local/path
Run Code Online (Sandbox Code Playgroud)

  • 用于命令/ shell,你想要的是"_raw_params" (5认同)
  • 有趣的是,如何使用[command](http://docs.ansible.com/ansible/command_module.html)?因为据我所知,我们不能使用param**free_form**来定义将要执行的命令 (3认同)

mxf*_*mxf 35

我想分享一下Ansible可以通过shell在localhost上运行:

ansible all -i "localhost," -c local -m shell -a 'echo hello world'

这可能对简单的任务或Ansible的一些实际学习很有帮助.

代码的例子取自这篇好文章:

在localhost中运行ansible playbook

  • 本地主机后逗号(,)的含义是什么。我注意到指挥部的工作至关重要 (2认同)
  • 尾随逗号用于定义指向文件的简单库存.这是一种无证件的黑客攻击,可能会消失(iirc). (2认同)

小智 17

您可以使用delegate_to在Ansible主机(管理主机)上运行命令,从那里运行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
Run Code Online (Sandbox Code Playgroud)

在Ansible主机上创建一个新文件:

 - name: Create log file
   file:
    path: /tmp/logfile.log
    state: touch
    mode: "u+rw,g-wx,o-rwx"
   delegate_to: 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

  • 同意。最少的新语法,最灵活(也可以在其他地方委托)。需要注意的一点 - 如果任务的“become”为 True,它将抱怨 sudo 等。这可以直接发生在任务上,也可以继承到其他地方。 (2认同)

mvr*_*mvr 5

扩展@gordon 的答案,这是一个可读的语法和参数传递的例子,shell/command 模块(这些与 git 模块不同,因为有必需但自由格式的参数,如@ander所述)

- 名称:“生成发布 tarball”
  本地操作:
    模块:外壳
    _raw_params: git archive --format zip --output release.zip HEAD
    chdir: "文件/克隆/网络钩子"