saltstack 从命令行传递参数到 state sls 文件中的变量

有一个需求,每次服务更新发布时,要拉取不同版本的 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}'

参考:

  1. https://stackoverflow.com/questions/17711342/salt-can-i-use-an-argument-from-the-command-line-as-a-jinja-variable

转载于:https://www.jianshu.com/p/771ed60c985c

猜你喜欢

转载自blog.csdn.net/weixin_34315665/article/details/91267512