Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

ステージングや本番の環境を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の表示などが綺麗にみえることを期待してのことです。

namutaka
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away