playbook syntax check

Ansibleにおいて表題の通り。

■ 環境

  • Ansible 2.3.0.0

■ – -syntax-check

前にどこかで書いた記憶があるのだが、Ansibleのカテゴリの記事のタイトルでは見当たらず…。と思ったら「はじめてのAnsible」の中で触れていたようだ。

playbookを書いていて、さて実行してみようと思ったところ実行できず…。しかもそれなりにTaskが実行されてからのエラーだったので気分が凹む。「はじめてのAnsible」で存在を知って使おうと思っていたのに忘れてしまっていたようなので、改めてエントリを。

$ ansible-playbook test.yml --syntax-check

何もエラーがなければ下記のような結果が出力される。

$ ansible-playbook test.yml --syntax-check

playbook: test.yml
$

エラーがあるときは下記のような表示がされる。

$ ansible-playbook test.yml --syntax-check
ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
  :
$

Ansibleの”^ here“はあまり当てにならず、その周辺をよく確認する。自身がよく間違えてしまうのは”lineinfile“を”inlinefile“と書いてしまうことだ。Vagrantの”inline provisioner“とごちゃ混ぜになっている気がする。

以上。

■ 関連

初めてのAnsible

ディレクトリの存在チェック

Ansibleにおいて表題を行う。ディレクトリが存在する場合はスキップしたい処理がある。

■ 環境

  • Ansible 2.2.2.0

■ stat

stat – retrieve file or file system status
http://docs.ansible.com/ansible/stat_module.html

下記のように書ける。

- name: directory check
  stat:
    path: /path/to/directory
  register: d

- name: skip task
  debug:
    msg: "skip skip skip"
  when:
    - d.stat.exists
    - d.stat.isdir

このように書くことが可能である。条件としては2つ入れてみた。

  • /path/to/directory“が存在する
  • /path/to/directory“がディレクトリである

これら2つの条件が共に真である場合に、”debug“モジュールで指定した”msg“が出力される。

以上。

■ 関連

初めてのAnsible

対象でコマンド実行

Ansibleにおいて、Inventoryfileで指定したホスト全台に対してコマンドを実行したい。普段はplaybookを使用したり”-m ping“とかしか使ったことがなかったのでメモ。

■ 環境

  • Ansible 2.2.1.0

■ ansible

下記のようにやると全台に対してコマンドを実行することができる。例として`apt-get update`してみた。

$ ansible all -m shell -a "sudo apt-get update"

-m apt“でも実行が可能なのかもしれない。が、手っ取り早くはこれで良いであろう。

以上。

■ 関連

初めてのAnsible

Slack Module

初めてのAnsible』を読んで知った表題のModuleを試してみた。

■ 環境

  • Ansible 2.2.1.0

■ Slack Module

Slack – Send Slack notifications – Ansible Documentation
http://docs.ansible.com/ansible/slack_module.html

よくわからなかったのが”token“のところである。

Custom Integrations
https://my.slack.com/apps/manage/custom-integrations

Incoming WebHooks“から作成もしくは既存のものの詳細に記載されている”Webhook URL“から抽出した。自身の環境ではマスクしているが下記のようなURLであった。

https://hooks.slack.com/services/X0X00XX0X/X0XX0XXXX/XXxxxXxXxxxxxxX0x0xxXxxX

https://hooks.slack.com/services/“以降の文字列を”token“に指定したところ、正しく通知された。

icon_emoji“や”username“も指定できるので、playbookが正常に終了した場合にSlackに通知するといったことができるようになった。

    - name: slack notification
      slack:
        token: "X0X00XX0X/X0XX0XXXX/XXxxxXxXxxxxxxX0x0xxXxxX"
        channel: "#test"
        username: "withsin"
        icon_emoji: ":withsin:"
        msg: "テスト。"
      become: no
      delegate_to: localhost

以上。

■ 関連

初めてのAnsible

■ 感想

現在の仕事でChefからAnsibleへ置き換えを行っている。Ansibleは前にもやったことがあり、改めて読んでみようと思いつつも積ん読状態にあった本を引っ張り出して少しずつ読んでみた。以前触った時よりも随分とモジュールも増えており、またそもそも知らなかったモジュールも多々あって勉強になった。

■ メモ

3.6 host_vars / group_vars ディレクトリ

知らなかったのでメモとして。今までは`vars_files`で読み込ませるようにしていた。

4.6 組み込み変数

`group_names`等の各種変数をメモ。ちょうど使いたいタイミングで存在を知れた。

4.7 コマンドライン上での変数の設定

$ ansible-playbook test.yml -e @vars.yml

という書き方ができる。

6.6 aptキャッシュの更新

cache_valid_time=3600

`apt`モジュールで使える。

6.10 データベースとデータベースユーザの作成

  • postgresql_user
  • postgresql_db

MySQLもあるのかな?と思ったらやっぱりあった。

  • mysql_user
  • mysqldb
  • mongodb_user

とかもあるようである。

6.11 テンプレートからのlocal_settings.pyファイルの作成

xip.io

こんなサービスがあったのか。これは使えそうである。

7.1 コントロールマシン上でのタスク実行

下記のモジュールが使えそうだな、と思いメモ。

  • local_action
  • wait_for

7.2 ホスト以外のマシン上でのタスクの実行

  • delegate_to

7.4 一度の一つのホストでの実行

  • serial
  • max_fail_percentage

7.5 1回だけの実行

  • run_once

7.9 ホスト指定のパターン

:& 積集合

7.13.1 with_lines

  • slackモジュールがある?
  • → Slack Module で試してみた

8.4 pre_tasksとpost_tasks

へーと思ったので。

9.1. SSHマルチプレキシングとControlPersist

知らんかった。

9.4 並列処理

default forks = 5

14.3 Assertモジュール

そもそも知らなかった。。
表14-1. statモジュールが返す値

14.4.1 構文チェック

--syntax-check

14.4.4” チェックモードの “-C, –check” しか使ってなかったな。

14.5.1 step

タスクごとにスキップとかを使用できる。デバッグ時に良さそうだ。

■ 関連

ncでport開放チェック

対象でコマンド実行

ディレクトリの存在チェック

playbook syntax check