saltstack 从命令行传递参数到 state sls 文件
2019-06-05 本文已影响69人
awker
有一个需求,每次服务更新发布时,要拉取不同版本的 Docker 镜像来启动,这里就涉及到一个问题:如何传递 Docker 镜像版本号的问题。
线上环境是用 saltstack 发布的,问题就变成了:如何从命令行传递参数到 state sls 文件中的变量。
可以从命令行传递 pillar 变量解决。
示例如下:
1、startup.sh 脚本中定义 jinja 变量 {{ version }}
,用以区分不同版本的 Docker 镜像
// startup.sh 文件
#!/bin/bash
docker pull harbor.foobar.cn/prod/web-service:{{ version }} && \
docker run -d --name web-service harbor.foobar.cn/prod/web-service:{{ version }}
2、deploy.sls 文件里声明 startup.sh 使用 jinjia 模板 - template: jinja
,并且传递 version 变量到 startup.sh 文件,version 变量 version: {{ salt['pillar.get']('version') }}
获取从命令行传递的 pillar 参数变量
// deploy.sls 文件
app-script-file:
file.managed:
- name: /data/apps/startup.sh
- source: salt://releases//files/startup.sh
- mode: 755
- user: root
- group: root
- makedirs: True
- template: jinja
- defaults:
version: {{ salt['pillar.get']('version') }}
3、调用 salt state sls 文件时,通过在命令行传递参数 pillar='{version: 版本号}'
就可以实现更新发布时, 拉取不同版本的 Docker 镜像来启动
salt '*' state.apply deploy pillar='{version: 1.1.0}'
参考: