Sam*_*amy 3 python mysql ansible ansible-playbook
我正在将 a 移植Makefile到一系列 Ansible 任务中。make 文件中有这两行代码,当涉及到 ansible 时,它们让我感到困扰:
SERVERS := shell mysql "select hostname from servers"
EASY_INSTALL := wget https://bootstrap.pypa.io/ez_setup.py -O - | python
Run Code Online (Sandbox Code Playgroud)
首先,将动态vars用于 SERVERS 的值的适当 Ansible 方法是什么?服务器的价值将取决于环境,即阶段、生产等。
其次,我不想安装 python-setuptools 包,aptitude因为我过去除了问题之外什么都没有。那么如何wget使用 Ansible运行shell 命令呢?
看起来您想要下载一个脚本,然后将其作为针对多个服务器的命令运行。
Ansible 剧本中“主机”的概念涵盖了你的“服务器”概念——你需要填充 Ansible 可以为主机读取的清单,或者甚至可能在运行剧本时将主机作为变量传递(让我们称之为变量“服务器”)。
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"
Run Code Online (Sandbox Code Playgroud)
然后你会shipit.yaml像这样调用上面的剧本(让我们称之为):
ansible-playbook /usr/shipit.yaml --extra-vars "servers=10.0.0.1"
Run Code Online (Sandbox Code Playgroud)
您还可以使用 add_hosts 模块和自定义组名称从数据库中动态读取服务器,然后填充自定义组,然后针对该自定义组作为hosts项目运行下一组命令。
您的里程可能会有所不同,具体取决于您是否需要启用 sudo ( sudo: yes),并且可能有比使用命令更好的运行 python 脚本的方法(命令每次都会运行,而不管它是否已经运行 - 不是幂等的换句话说)。
希望以上内容为您提供了一个良好的起点。
| 归档时间: |
|
| 查看次数: |
7435 次 |
| 最近记录: |