BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】Varsセクションで使う3つのディレクティブの違い

 こんにちは!
 BFT名古屋支店の、佐野です。

 今回は以前の記事にて触れた、Varsセクションで使用するディレクティブについて詳しくお送りいたします。


はじめに

 まずVarsセクションについては、以前の記事を参照して頂けたらと思いますので、ここでは詳しい解説は割愛させて頂きます。
 簡単に言えば変数を定義するセクションであり、定義をする際に以下の3つのディレクティブを使用します。

  • vars
  • vars_files
  • vars_prompt

 今回はこれらのディレクティブについて、それぞれ解説をしていきます。


vars ディレクティブ

 基本的な変数を定義するためのディレクティブです。
 varsディレクティブ内で定義した変数は、Playおよびタスク上で使用できるようになります。
 ディレクティブ内でキーとして変数名を記述し、値として変数値を入れることで変数を定義できます。
 このディレクティブで定義する変数は、主に何回も出てくる値を使い回したりする場合に使用するケースが多く見られます。

 以下、vars ディレクティブの利用例となります。

vars:
  http_port: 80
  postgresql_port: 5432
  message_text: 'hello world'

vars_files ディレクティブ

 変数を定義した外部のyamlファイルを読み込ませることができるディレクティブです。
 複数個のyamlファイルを読み込むことが可能であり、変数として定義したパスワードなどの重要な情報をPlaybookとは別の場所で管理することができます。
 ただし当然ではありますが、Playbookの実行時にvars_filesディレクティブで指定したyamlファイルが読み込まれますので、その時点でそのyamlファイルが読める場所に存在している必要があります。
 重要な情報をPlaybookで管理しない利点として、Playbook自体を第三者と共有するといった場合に重要な情報の漏洩を防ぐことができる他、複数のPlaybookに使い回すことが可能な点があります。

 以下、vars_filesディレクティブの利用例となります。

vars_files:
  - /vars/append_vars.yml
  - /vars/other_vars.yml
  • /vars/append_vars.yml
login_user: administrator
password: bfttech0203
  • /vars/other_vars.yml
admin_router: 192.168.1.1

vars_prompt ディレクティブ

 定義した変数の値を、対話的にユーザーへ求めるようにするディレクティブです。
 記録として残したくない情報(パスワードなど)や、実行環境によって異なる値を入れたい場合など、Playbookの実行時に直接ユーザーから値を指定してもらいたい時に利用します。
 これにより、Playbookの実行者が異なっていたとしても、パスワードなどの入力を都度変更して活用できます。

 またvars_promptディレクティブに利用できるサブディレクティブは以下の通りです。

サブディレクティブ 概要
name 文字列 変数名を入力します
prompt 文字列 値を入力する時にプロンプトに表示される文字列を指定します
default 変数値 デフォルトの変数値を設定します
private trueまたはfalse trueとした場合、入力中の値が画面に表示されないようになります
encrypt "des_crypt"、"md5_crypt"、"sha256_crypt"、“sha512_crypt”など 入力値をハッシュ化するアルゴリズムを指定します。'Passlib'で利用される暗号化が利用できます
confirm trueまたはfalse trueにすると、入力値の再入力が求められるようになります
salt_size 数値 指定した文字数分のsaltをランダムに生成します

 以下、vars_promptディレクティブの利用例となります。

vars_prompt:
  - name: login_username
    prompt: username?
    private: false
    
  - name: login_password
    prompt: password?
    privatte: true
    confirm: true

さいごに

 以上がPlaybookのVarsセクションに定義できるディレクティブと、各ディレクティブで定義される変数の特徴になります。
 特にvars_filesディレクティブに関しては活用する機会が多いと感じます。
 またPlaybookではvarsセクションに限らず様々なところで変数を定義できますが、基本的な変数として使う場合はVarsセクションにて定義を行なうとPlaybookをスマートにすることができると思います。