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}'


本文出自鏈接:https://www.jianshu.com/p/771ed60c985c


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章