是否可以在Ansible主机上运行命令?
我的场景是,我想从内部托管的git服务器(在公司防火墙之外无法访问)进行签出。然后,我想将签出(压缩)上传到生产服务器(外部托管)。
目前,我正在考虑运行一个执行签出的脚本,tarball它,然后运行部署脚本-但如果我可以将其集成到Ansible,那将是更可取的。
是否可以在Ansible主机上运行命令?
我的场景是,我想从内部托管的git服务器(在公司防火墙之外无法访问)进行签出。然后,我想将签出(压缩)上传到生产服务器(外部托管)。
目前,我正在考虑运行一个执行签出的脚本,tarball它,然后运行部署脚本-但如果我可以将其集成到Ansible,那将是更可取的。
当前回答
使用ansible-playbook -i "localhost," -c local your_file_name.yml
注意,“localhost”后面必须有逗号。
例子:
我们正在使用shell模块在localhost中运行' echo hello world '。现在让我们写一个剧本helloworld.yml
---
- hosts: all
tasks:
- shell: echo "hello world"
运行剧本:
ansible-playbook -i "localhost," -c local helloworld.yml
输出:
PLAY [all] *********
GATHERING FACTS *********
ok: [localhost]
TASK: [shell echo "hello world"] *********
changed: [localhost]
PLAY RECAP *********
localhost : ok=2 changed=1 unreachable=0 failed=0
引用:
在本地主机运行ansible playbook: https://web.archive.org/web/20180513205612/http://ansible.pickle.io/post/86598332429/running-ansible-playbook-in-localhost
其他回答
是的,您可以在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文档中的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文档中的“控制任务运行的位置:委托和本地操作”。
你可以通过添加这个到你的库存来避免在你的游戏中输入connection: local:
localhost ansible_connection=local
(这里你会使用“localhost”而不是“127.0.0.1”来指代游戏)。
在Ansible的新版本中,你不再需要将上面的行添加到你的库存中,Ansible假设它已经在那里。
使用ansible-playbook -i "localhost," -c local your_file_name.yml
注意,“localhost”后面必须有逗号。
例子:
我们正在使用shell模块在localhost中运行' echo hello world '。现在让我们写一个剧本helloworld.yml
---
- hosts: all
tasks:
- shell: echo "hello world"
运行剧本:
ansible-playbook -i "localhost," -c local helloworld.yml
输出:
PLAY [all] *********
GATHERING FACTS *********
ok: [localhost]
TASK: [shell echo "hello world"] *********
changed: [localhost]
PLAY RECAP *********
localhost : ok=2 changed=1 unreachable=0 failed=0
引用:
在本地主机运行ansible playbook: https://web.archive.org/web/20180513205612/http://ansible.pickle.io/post/86598332429/running-ansible-playbook-in-localhost
恕我直言,我发现了一些其他的方法来写这些东西,它们更容易读。
- name: check out a git repository
local_action:
module: git
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
OR
- 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的一些实践学习有帮助。
代码示例摘自这篇好文章:
在本地主机运行ansible playbook
ansible your_server_name -i custom_inventory_file_name -m -a "uptime"
默认模块为命令模块,因此不需要命令关键字。
如果您需要发出任何具有更高权限的命令,请在同一命令的末尾使用-b。
ansible your_server_name -i custom_inventory_file_name -m -a "uptime" -b