Skip to content

Instantly share code, notes, and snippets.

@kkkw
Last active September 6, 2017 02:53
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkkw/ea55caf2fdaa38a965d7de6954f1fdda to your computer and use it in GitHub Desktop.
Save kkkw/ea55caf2fdaa38a965d7de6954f1fdda to your computer and use it in GitHub Desktop.
ansibleのコーディング規約

ansibleのコーディング規約

一般

バージョン

  • [MUST] バージョン2以上でエラーが出ないように記述して下さい。

タブ/スペース

  • [MUST] ソフトタブを使用し、2スペースとして下さい。
  • [MUST] 変数名の前後に空白を入れてください。
#good
{{ var }}
#bad
{{var}}
  • [MUST] ファイルの先頭の---の次に空行をいれないで下さい
#good
---
- name: Set php_executable variable to a default if not defined.
  set_fact:
    php_executable: php
  when: php_executable is not defined

#bad
---

- name: Set php_executable variable to a default if not defined.
  set_fact:
    php_executable: php
  when: php_executable is not defined

文字列

  • [SHOULD] 必要がなければクウォートしないで下さい
#good
- name: Set php_executable variable to a default if not defined.
#bad
- name: 'Set php_executable variable to a default if not defined.'

真偽値

  • [MUST] yaml記法の部分はTrue,Falseを使用して下さい。
  • [MUST] moduleの引数はtrue,falseを使用して下さい。

変数

  • [MUST] jinjaの形式の変数を使ってください。
#good
{{ var }}
#bad
$var
  • [MUST] 変数名は、先頭にロール名を付けてください。
  • [MUST] 変数名は全て小文字としてください。

ファイル

  • [MUST] .yamlではなく.ymlにして下さい。

Playbook

  • [SHOULD] ロールのリストをincludeする以上のことはしないでください。

ロール

  • [SHOULD] galaxy形式に則って下さい。

  • [SHOULD] ロールは他のロールからタスクをincludeしないでください。

  • [SHOULD] ロール名は簡潔で、可能な限り一単語にしてください。必要であれば_を使ってください。

  • [SHOULD] タスク名は簡潔で、説明的にしてください。空白はOKです。

  • [SHOULD] 依存するロールがある場合はmeta/main.ymlに書いて下さい。

  • [SHOULD] ロール独自の変数はvars/main.ymlではなくdefaults/main.ymlに書いて下さい。varsは上書きしにくいため。逆に上書きされたくない場合はvars配下に書いて下さい。

  • [SHOULD] [WIP] meta/main.ymlに記載するgalaxy_tags(categories)は下記から追加して下さい。

    • centos
    • ubuntu
    • vagrant
    • development
    • production
    • etc...

タスク

モジュール

  • [SHOULD] commandではなくshellモジュールを使用して下さい。
  • [SHOULD] commandshellを使用した時は、-Cを指定しても問題が起きないようにしてください。
  • [SHOULD] ignore_errors: Trueは使わないでください。
  • [SHOULD] wgetではなくget_urlを使って下さい。

制御構造

  • [MUST] nameは必ず書いて下さい。
  • [SHOULD] block構文の使用を検討して下さい。(version 2 or later)
#good
- name: Check if Composer is installed.
  stat: "path={{ composer_path }}"
  register: composer_bin

- block:
  - name: Download Composer installer.
    get_url:
      url: https://getcomposer.org/installer
      dest: /tmp/composer-installer.php
      mode: 0755

  - name: Run Composer installer.
    command: >
      {{ php_executable }} composer-installer.php {% if composer_version != '' %} --version={{ composer_version }}{% endif %}
      chdir=/tmp
  when: not composer_bin.stat.exists

#bad
- name: Check if Composer is installed.
  stat: "path={{ composer_path }}"
  register: composer_bin

- name: Download Composer installer.
  get_url:
    url: https://getcomposer.org/installer
    dest: /tmp/composer-installer.php
    mode: 0755
  when: not composer_bin.stat.exists

- name: Run Composer installer.
  command: >
    {{ php_executable }} composer-installer.php {% if composer_version != '' %} --version={{ composer_version }}{% endif %}
    chdir=/tmp
  when: not composer_bin.stat.exists
  • [SHOULD] 変数が設定されているかどうかを調べる場合はdefinedを使用して下さい。
#good
when:{{ my_var }} is defined
#bad
when:{{ my_var }}
  • [SHOULD] 1つのタスクで複数のOSの対応をしない(ansible_os_familyを使わない)で下さい。OSが違う場合はplaybook(role)を別に定義して下さい。

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment