Posted at

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の表示などが綺麗にみえることを期待してのことです。