Ansible


collection: playbook, role, module, pluginを含む

moduleとの違い

よく使うcollection

記事:


warningを表示する


async, poll: 非同期実行、ポーリング


Mitogen for Ansible: 最大25倍高速化


slurp: remoteにあるファイルを読む


デバッグ方法


実行結果をログに残す


synchronize: rsyncでファイルコピー


copy moduleのcontentで改行が消える。


コマンドの存在チェック


ネットワーク機器の管理


terraform.tfstateの値を参照


default値を定義する


トレーニング/サンプル


デフォルトの検索パス


vars_prompt, vars_files, --extra-vars で配列等を渡す


構文チェック


patch: パッチを適用する


WSL環境


parse_cli/parse_cli_textfsm: コマンドの結果を解析して変数に取り込む

JSONで出力できないコマンドの結果を解析して、変数に変換してくれる。
解析用テンプレートを用意するが、メジャーな機器用のテンプレートは既にある。


package: OS毎のパッケージ管理を一元化


run_once: ホストが複数台あっても1回しか実行しない


ini_file: iniファイルの書き換え


Terraformとの連携

Memo/TerraformでAWS EC2を起動して、ansible-playbookを実行したい時など。


apt: Debian/Ubuntu等のパッケージ管理

  apt:
    name: "{{ apt_packages  }}"
    state: "{{ item.state }}"
    update_cache: yes
    cache_valid_time: 3600

vars_promptでカンマ区切り文字列を配列に展開する


includeの代わりにimport_tasks, include_tasksを使う

[DEPRECATION WARNING]: The use of 'include' for tasks has been deprecated. Use 'import_tasks' for static inclusions or 'include_tasks' for 
dynamic inclusions. This feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False 
in ansible.cfg.

Including and Importing — Ansible Documentation


pause: 指定した秒/分だけ待つ、中断や続行を選択


yum_repository: yumリポジトリの追加/削除

- name: Remove repository from a specific repo file
  yum_repository:
    name: epel
    file: external_repos
    state: absent

include_role: role内の別taskをloadする

tasks/main.yml とは別のyamlをloadできる。 tasksを分割して、普段は実行されない処理を分けられる。


テキストの置換


ansible-container: docker imageの作成


dockerの操作


playbook中に再起動

サンプルコードはいくつもあるが、うまく動作しない

hosts: all
  become: True
  gather_facts: True
  tasks:
    - name: debug
      debug:
        msg: "ansible_host={{ ansible_host }}"
    - name: test connection (before reboot)
      ping:
    - name: reboot
      shell: sleep 2 && shutdown -r now "Ansible reboot"
      async: 1
      poll: 0
      ignore_errors: "{{ ansible_check_mode }}"
    - name: wait for SSH port down
      wait_for:
        host: "{{ ansible_host }}"
        port: 22
        state: stopped
        delay: 1
        timeout: 60
      delegate_to: 127.0.0.1
      become: no
    - name: wait for SSH port up
      wait_for:
        host: "{{ ansible_host }}"
        port: 22
        state: started
        delay: 30
        timeout: 300
      delegate_to: 127.0.0.1
      become: no
    - name: test connection (after reboot)
      ping:

block: 複数のタスクのブロック化


factの再取得

「setup」の再実行で良い 動的にNICを追加した後に、factにも反映させたい場合など。


group_by: 動的にgroupを変更する

例えば「connection: local」だが、複数の「group_vars/env.yml」を環境毎に切り替えたい時に使える。
指定したgroup_vars内の変数が参照できるようになる。

  vars_prompt:
    - name: "inventory_group"
      prompt: "Please enter inventory_group"
      private: no

  tasks:
    - group_by: key="{{ inventory_group }}"
      changed_when: False

assemble: 複数の設定ファイルから一つの設定を作る

assemble - Assembles a configuration file from fragments ― Ansible Documentation


uri: HTTPリクエストの送信


jenkinsからansibleの実行


no_log: ログを出力しない

「-v」オプションを付けたときにもパスワード等はコンソールに表示したくない場合等。

  vars:
    - show_log: false
  tasks:
    - debug: msg="{{ item }}"
      with_items: "{{ huge_var }}"
      no_log: "{{ not show_log|bool }}"

fetch: リモートファイルをローカルにコピー


expect: 対話処理の自動化


wait_for: 処理が完了するまで待機する


localにあるrpmファイルをインストールする


既存ファイルを空(サイズ0)にする


空ファイルの作成


LDAPの管理

SSHのログからアクセスIPを列挙する


インストール済みパッケージ一覧

yumモジュールではインストール済み一覧は取得できるが、一部のパッケージだけは指定できない。(nameとlistが排他指定)


ssh公開鍵の登録


現在のnameserverを取得

/etc/resolv.confのnameserverの値を参照したい。


Ansible2.0


Prompts: ユーザ入力を待つ


任意のsshオプションつけて実行

ansible.cfg内で「ssh_args = 」で任意のオプションを指定できる。
デフォルトのオプションは上書きされるため、デフォルトのオプション+追加のオプションと書いた方が良さそう。
環境変数に ANSIBLE_SSH_ARGS があると、ansible.cfgよりも優先される。


拡張子を除いたファイル名の取得


tarball をインストールする


registerの結果を使って複数回ループする


1.9からsudoが必要な時はbecomeを使う

root権限が必要な場合、1.9から「become: yes」が推奨。
「sudo: true」は非推奨になった。


長い行を改行する


パフォーマンスチューニング


validate:設定ファイル等の検証してから更新


yum groupinstall相当


Extras Modulesを使う


sshで繋がずlocalで実行


パッケージがインストール済みかのチェック


変更扱いにしない


handlers


roles


開発


依存関係


自作モジュール

Developing Modules — Ansible Documentation


環境変数の指定


shell:/command: コマンドの実行


shell:やcommand:内で複雑な処理



shell:中でreadコマンドがあっても待機しない


SELinux

target uses selinux but python bindings (libselinux-python) aren't installed!


split: 文字列の分割


--check時に挙動を変更する

以下のように、shell: の結果を元に判定するような場合、「--check」では、チェックtaskが実行されないため、エラーとなるのを回避する。


ansible-playbookオプション


ファイル/ディレクトリのコピー


実行順序


Module モジュール

file


Conditionals: 条件分岐


Error Handling エラーハンドリング


新規ファイルを作る


特定ユーザだけリモートsshからsudoできるように

デフォルトではttyなしのsshでは、sudoできないように設定されている場合が多い。


ping moduleで接続テスト


多段ssh環境で実行

接続にsshを使うようにし、ssh側で多段設定をする。
ホストの接続には名前を使う。DNSは付けなくても良い。


複数サーバのrpmバージョンの調査と更新


YAML中でコロン(:)を入れると Syntax Error

YAML中で"foo: bar"の文字列だとSyntax Errorが発生する。"foo:bar"は問題ない。


debug : デバッグメッセージの出力


tags : タグを付けて実行するタスクを指定する


特別なタグ

例えばpre_task:でチェック処理をしている場合、-t でタグ指定した場合実行されない。


Inventory ファイル


ホストを指定して実行


IPアドレスに名前を付ける

vim hosts.ini
----
[web]
web01 ansible_ssh_host=192.168.61.101
----

ansible -i hosts.ini -m ping web01

グループ毎に異なる変数を使う


ホストのグループ化


実行条件を指定する


特定行のコメントアウト


添付ファイル: fileaws.ec2.list-instance.zip 1074件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-03-14 (月) 10:55:48