我将Makefile
移植到一系列Ansible任务中。 make文件有这两行代码,当涉及到ansible时,这些代码令我感到不安:
SERVERS := shell mysql "select hostname from servers"
EASY_INSTALL := wget https://bootstrap.pypa.io/ez_setup.py -O - | python
首先,使用动态vars
作为SERVERS值的合适的Ansible方法是什么?服务器的价值取决于环境,即阶段,生产等。
其次,我不想从aptitude
安装python-setuptools包,因为我过去只有它的问题。那么如何使用Ansible运行wget
shell命令?
答案 0 :(得分:4)
看起来您想下载一个脚本,然后将其作为针对多个服务器的命令运行。
主持人的概念'在Ansible剧本中涵盖了您的服务器'概念 - 您需要填充Ansible可以为主机读取的库存,或者甚至可能在运行Playbook时将主机作为变量传递(让我们调用该变量'服务器')。
wget和运行各种命令都是标准的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
项。
你的milage可能会有所不同,具体取决于你是否需要sudo启用(sudo: yes
),并且可能有一种更好的方式来运行你的python脚本而不是使用命令(命令将每次运行而不考虑是否它已经运行 - 换句话说不是幂等的。)
希望上面给你一个很好的起点。