6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ansibleのtemplateモジュールでテンプレート継承してみる

6
Posted at

はじめに

ansibleのtemplateモジュールのドキュメントを見ると、

Templates are processed by the Jinja2 templating language (http://jinja.pocoo.org/docs/) - documentation on the template formatting can be found in the Template Designer Documentation (http://jinja.pocoo.org/docs/templates/). 

と記載があり、Jinja2というテンプレート記法が使えることがわかります。
ansibleのtemplateモジュールはこれまでも使っていたけど、Jinja2のテンプレート記法、中でも、テンプレート継承を使ってみたら、実際いろいろ捗ったので、ここで紹介したいと思います。

Example Playbook

記法についての詳細は、Template Inheritance - Jinja2 Documentationの説明を見ていただいた上で、AnsibleのPlaybookに当てはめると下記のようになります。

やっていること

  • テンプレートからファイルを生成(ローカル)
    base.j2を継承したextended.j2を元に、ファイルを生成(extended.txt)

  • ファイルをコピー(リモート)

ファイル構成

├── inventory_example
├── roles
│   └── example
│       ├── files
│       │   └── extended.txt
│       ├── tasks
│       │   └── create_file.yml
│       │   └── copy_file.j2
│       └── templates
│           ├── base.j2
│           └── extended.j2

inventory

  • inventory_example

    - hosts: localhost
        tasks:
          - include: roles/example/tasks/create_file.yml
    
    - hosts: remote_host
        tasks:
          - include: roles/example/tasks/copy_file.yml
    

tasks

  • roles/example/tasks/create_file.yml

    - name: Create file from template
        template: src=extended.j2 dest=roles/example/files/extended.txt
    
  • roles/example/tasks/copy_file.yml

    - name: Copy file to remote host
        copy: src=extended.txt dest={{ path_to_root }}/extended.txt
    

templates

  • roles/example/templates/base.j2

    This is default contents.
    {% block additional_contents %}{% endblock %}
    
  • roles/example/templates/extended.j2

    {% extends "roles/example/templates/base.j2" %}
    
    {% block additional_contents %}
    This is additional contents.
    {% endblock %}
    

files

  • roles/example/files/extended.txt

    This is default contents.
    This is additional contents.
    

おわりに

普段からphpのTwigというテンプレートを使っていて、Jinjaを見たときに、「Twigとそっくり!」と思ったら、TwigのREADMEに、

Twig uses a syntax similar to the Django and Jinja template languages which inspired the Twig runtime environment.

ときっちり書いてありました。

Jinja inspiredなテンプレートエンジンは他にもNunjucksなど、複数の言語で実装されているようです。

6
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?