LoginSignup
4
4

More than 5 years have passed since last update.

Ansibleで修正内容を環境ごとに段階的に適用する方法(構想)

Posted at

ステージングや本番の環境をAnsibleで管理しているときに、新しい修正を段階的に適用したいことがあります。
なにか設定を変更するときに、まずはステージング環境に適用して動作確認をして、問題がないことが確認できてから本番環境に適用するということをしています。
もし、ステージング環境での確認に時間がかかってしまうと、他の修正を先に本番に出さなければいけない様なことが発生して面倒なことになってしまいます。

こういった変更箇所の環境ごとの出し分けを、以下のような方法で管理したらどうかと考えてみました。(まだ実践では使ってません)

  • 機能別のOn/Offをfeatureというdictionary構造で管理
  • group_vars内の各グループの設定として、featureのOn/Offを設定
  • 修正箇所をfeature['xxx']の条件にて制御する
    • tasksの適用条件(when)やテンプレートの条件
group_vars/production
feature:
  f001: false
  f002: false
group_vars/staging
feature:
  f001: true
  f002: false
templates/file.txt.j2
Sample Text

{% if feature['f002'] %}
feature/f002
{% endif %}
main.yml
- hosts: all
  connection: local
  roles:
    - file01
  tasks:
    - debug: var=feature
    - name: f001
      debug: msg="Do feature/001"
      when: feature['f001']
    - name: make file
      template: src=templates/file.txt.j2 dest=./file.txt

こうしておけば、修正内容の適用可否を環境別に細かく制御できます。
また、featureの値を見ればどの環境にどの修正を反映しているかが一目でわかります。

featureに列挙している項目を行の有無ではなくtrue/falseにしてあるのは、ファイルをgitなどで管理しているときにdiffの表示などが綺麗にみえることを期待してのことです。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4