ゆるい感じのプログラムを書きたい。

プログラムの敷居を下げて、多くの人が開発出来るように色々書いていきます!

【モジュールの使い方】Template

機能

templateモジュールを使用することで、Ansibleマシンのローカルに存在する
テンプレートファイルをhostsで指定したサーバへ転送することが出来る。

  • テンプレートファイル内では変数を使用可能
  • テンプレートファイル内ではjinja2というpython用のテンプレートエンジンライブラリを使用可能 ※jinja2を使用すると複雑になるので使わないほうがいいかも

使用例

  • 転送元(クライアントローカル側):/root/copyFile/index.tpl
  • 転送先(指定したサーバ側):/root/sample.conf
  • 所有ユーザ、所有グループ、権限:root,root,0664

/root/test.tpl

test01
test02
test03
{{ sample_add_var }}

※{{ sample_add_var }}の部分が変数

playbook.yml

- hosts: group1
  become: yes
  vars:
    - sample_add_var: test04
  tasks:
  - name: template test
    template:
      src: /root/copyFile/index.tpl
      dest: /root/sample.conf
      owner: root
      group: root
      mode: 0664

Ansible実行後の指定したサーバ側の'/home/centos/sample.conf'ファイル内容

test01
test02
test03
test04

テンプレートファイル'test.tpl'の{{ sample_add_var }}の部分がtest04に置換されたファイルになる。


主なパラメータ

パラメータ 必須 デフォルト値 選択肢 説明
src ローカル環境のファイル/ディレクトリパス(転送元パス)
ディレクトリの場合
・パスが"/"で終わる場合ディレクトリの中身のみ転送する
・パスの最後が"/"でない場合ディレクトリごと転送する。
dest hostsで指定したサーバのパス(転送先パス)
srcがディレクトリの場合、destもディレクトにする必要がある
owner 転送後のファイル/ディレクトリの所有ユーザ
group 転送後のファイル/ディレクトリの所有グループ
mode 転送後のファイル/ディレクトリの権限
例:"0664"、"u=rw,g=r,o=r"
force yes yes
no
yes:destが存在する場合、内容が異なればsrcで置換
no:destが存在しない場合のみsrcを転送


全パラメータ

パラメータ 必須 デフォルト値 選択肢 説明
attributes 結果として得られるファイルやディレクトリが持つべき属性
サポートされているフラグを取得するには、ターゲットシステムのchattrのマニュアルページを参照
この文字列には、lsattrによって表示されるものと同じ順序で属性を含める必要があります。
「=」演算子がデフォルトで、それ以外の場合は「+」または「-」演算子を文字列に含める必要がある
エイリアス:attr
backup no yes
no
タイムスタンプ情報を含むバックアップファイルを作成して、誤って上書きしてしまった場合に元のファイルを取り戻すことができるようにします。
block_end_string "%}" ブロックの終わりを示す文字列
block_start_string "%}" ブロックの開始を示す文字列
comment_end_string メントステートメントの終わりを示す文字列
comment_start_string メントステートメントの開始を示す文字列
dest hostsで指定したサーバのパス(転送先パス)
srcがディレクトリの場合、destもディレクトにする必要がある
follow no yes
no
シンボリックリンクをたどるかどうかを決定します
yesに設定すると、シンボリックリンクが存在する場合はそれから辿れる。
noに設定すると、シンボリックリンクは辿られません。
Ansible2.4より前では、これはyesとしてハードコーディングされていました。
force yse yes
no
yes:destが存在する場合、内容が異なればsrcで置換
no:destが存在しない場合のみsrcを転送
group 転送後のファイル/ディレクトリの所有グループ
lstrip_blocks no yes
no
先頭のスペースとタブを削除するタイミングを決定します。
yesに設定すると、先頭のスペースとタブが行頭からブロックまで取り除かれます。
mode 転送後のファイル/ディレクトリの権限
例:"0664"、"u=rw,g=r,o=r"
newline_sequence \n \n
\r
\r\n
テンプレートファイルに使用する改行シーケンスを指定します。
output_encoding utf-8 destで定義されたテンプレートファイルの書き込みに使用されるエンコーディングをオーバライドします。
デフォルトではutf-8ですが、Pythonでサポートされている任意のエンコーディングを使用できます。
ソーステンプレートファイルは、均質性のために常に、utf-8を使用してエンコードする必要があります。
owner 転送後のファイル/ディレクトリの所有ユーザ
selevel SELinuxファイルコンテキストのレベル部分
MLS/MCS属性であり、rangeとも呼ばれる
_defaultに設定すると、ポリシーのlevel部分が使用可能な場合はそれが使用される
serole SELinuxファイルコンテキストのレベル部分
_defaultに設定すると、ポリシーのrole部分が使用可能な場合はそれが使用される
settype SELinuxファイルコンテキストのレベル部分
_defaultに設定すると、ポリシーのtype部分が使用可能な場合はそれが使用される
seuser SELinuxファイルコンテキストのレベル部分
デフォルトでは、該当する場合はsystemポリシーを使用します
_defaultに設定すると、ポリシーのuser部分が使用可能な場合はそれが使用される
src ローカル環境のファイル/ディレクトリパス(転送元パス)
ディレクトリの場合
・パスが"/"で終わる場合ディレクトリの中身のみ転送する
・パスの最後が"/"でない場合ディレクトリごと転送する。
trim_blocks yes yes
no
ブロックからいつ改行を削除するかを決定します。
yesに設定すると、ブロックの後の最初の改行が削除されます(変数タグではなくブロックです)
unsafe_writes no yes
no
ターゲットファイルシステムオブジェクトからのデータの破損や一貫性のない読み取りを防ぐために、アトミック操作を使用するタイミングに影響を与えます。

デフォルトでは、このモジュールをアトミック操作を使用して、データの破損やターゲットファイルシステムオブジェクトからの一貫性のない読み取りを防ぎますが、これを防ぐ方法でシステムが構成されているか、単に壊れている場合があります。
1つの例は、Dockerによってマウントされたファイルシステムオブジェクトです。
これは、コンテナ内からアトミックに更新することは出来ず、安全でない方法のみで書き込むことが出来ます。

このオプションにより、Ansibleはアトミック操作が失敗した時にファイルシステムオブジェクトを更新する安全でない方法にフォールバックできます。(ただし、Ansibleに安全でない書き込みを強制することはありません)
重要!安全ではない書き込みは競合状態の影響を受けやすく、データの破損につながる可能性があります。
validate 更新されたファイルを最終的に宛先にコピーする前に実行する検証コマンド
検証には一時ファイルパスが使用され、次の例のように存在する必要がある%sを介して渡されます。
また、コマンドは安全に渡されるため、展開やパイプなどのシェル機能は機能しません。
このオプションが提供するものよりも複雑な検証を処理する方法の例については「複雑な構成の検証」を参照してください。
variable_end_string "}}" printステートメントの終わりを示す文字列
variable_start_string "{{}}" printステートメントの開始を示す文字列

シンボリックリンク シンボリックリンクの説明を記載

アトミック操作 他からの割り込みがない状態にすること


ドキュメント

【Ansible Documentation】Module Template

参考サイト

matsublog Ansible:templateモジュールについて