运行 bash Ansible 任务中的命令
Running bash commands in Ansible task
我正在将 Makefile
移植到一系列 Ansible 任务中。 make 文件有这两行代码,当涉及到 ansible 时,这让我很困扰:
SERVERS := shell mysql "select hostname from servers"
EASY_INSTALL := wget https://bootstrap.pypa.io/ez_setup.py -O - | python
首先,对于 SERVERS 的值使用动态 vars
的适当 Ansible 方法是什么?服务器的价值将取决于环境,即舞台、生产等。
其次,我不想安装 aptitude
中的 python-setuptools 软件包,因为过去我遇到过很多问题。那么我如何使用 Ansible 运行 wget
shell 命令?
您似乎想下载一个脚本,然后 运行 作为针对多个服务器的命令。
Ansible 剧本中 'hosts' 的概念涵盖了您的 'servers' 概念 - 您需要填充 Ansible 可以为主机读取的清单,或者甚至可能将主机作为运行 剧本时的变量(我们称该变量为 'servers')。
wget和运行ning各种命令都是标准的Ansible模块(get_url是wget的通用名称)。
因此,一个示例剧本:
- hosts: "{{ servers }}"
tasks:
- name: get a file
get_url:
url: "https://bootstrap.pypa.io/ez_setup.py"
dest: "/usr/ez_setup.py"
- name: run a command
command: "python /usr/ez_setup.py"
然后您可以像这样调用上面的剧本(我们称之为 shipit.yaml
):
ansible-playbook /usr/shipit.yaml --extra-vars "servers=10.0.0.1"
您还可以使用 add_hosts 模块和自定义组名从您的数据库动态读取服务器,然后填充自定义组,然后 运行 针对该自定义的下一组命令分组为 hosts
项。
您的里程数可能会有所不同,具体取决于您是否需要启用 sudo (sudo: yes
),并且 运行 宁您的 python 脚本可能有比使用命令更好的方法(命令每次都会 运行 而不管它是否已经 运行 - 换句话说不是幂等的)。
希望以上内容能给你一个好的起点。
我正在将 Makefile
移植到一系列 Ansible 任务中。 make 文件有这两行代码,当涉及到 ansible 时,这让我很困扰:
SERVERS := shell mysql "select hostname from servers"
EASY_INSTALL := wget https://bootstrap.pypa.io/ez_setup.py -O - | python
首先,对于 SERVERS 的值使用动态 vars
的适当 Ansible 方法是什么?服务器的价值将取决于环境,即舞台、生产等。
其次,我不想安装 aptitude
中的 python-setuptools 软件包,因为过去我遇到过很多问题。那么我如何使用 Ansible 运行 wget
shell 命令?
您似乎想下载一个脚本,然后 运行 作为针对多个服务器的命令。
Ansible 剧本中 'hosts' 的概念涵盖了您的 'servers' 概念 - 您需要填充 Ansible 可以为主机读取的清单,或者甚至可能将主机作为运行 剧本时的变量(我们称该变量为 'servers')。
wget和运行ning各种命令都是标准的Ansible模块(get_url是wget的通用名称)。
因此,一个示例剧本:
- hosts: "{{ servers }}"
tasks:
- name: get a file
get_url:
url: "https://bootstrap.pypa.io/ez_setup.py"
dest: "/usr/ez_setup.py"
- name: run a command
command: "python /usr/ez_setup.py"
然后您可以像这样调用上面的剧本(我们称之为 shipit.yaml
):
ansible-playbook /usr/shipit.yaml --extra-vars "servers=10.0.0.1"
您还可以使用 add_hosts 模块和自定义组名从您的数据库动态读取服务器,然后填充自定义组,然后 运行 针对该自定义的下一组命令分组为 hosts
项。
您的里程数可能会有所不同,具体取决于您是否需要启用 sudo (sudo: yes
),并且 运行 宁您的 python 脚本可能有比使用命令更好的方法(命令每次都会 运行 而不管它是否已经 运行 - 换句话说不是幂等的)。
希望以上内容能给你一个好的起点。