【备忘录】整理Ansible的机制

本文旨在(或: 本文的目的是)

为了配合公司内的DevOps验证,学习Ansible的基础知识,并记录备忘录作为输出。
本文将解释Ansible清单、剧本和配置的概念。

存货

1. 库存是什么

    インベントリ:ターゲットノードをリストして記載するファイル。

2. 连接信息

    • コントロールノード:インベントリとプレイブックを使用して、処理の指示を出す。

 

    • ターゲットノード:コントロールノードの指示を受けて、処理を実施する。インベントリで、IPアドレスまたはホスト名を記載する事で定義する。

グループ:同一の処理を実施するターゲットノード群。インベントリで、”[ ]”でグループ名を囲み、その下にターゲットノードを記載する事で定義する。

インベントリ例

[web_servers]
apache-01
apache-02

[db_servers]
mysql-01
mysql-02

3. 连接变量

    ターゲットノードへの接続を制御するための変数。インベントリでは、ターゲットノードの後ろに記載する事で定義できる。主な接続変数は以下の通り。
接続変数名設定内容ansible_connectionターゲットノードへの接続方法。Linuxサーバに接続する場合は主にssh、Windowsサーバに接続する場合は主にwinrmの値を設定する。ansible_hostターゲットノードのホスト名及びエイリアス名。ansible_portターゲットノードのリモート接続ポート。デフォルトは22。ansible_userターゲットノードへのリモート接続で使用するユーザー名。ansible_passwordターゲットノードへのリモート接続で使用するパスワード。
    インベントリ例
[web_servers]
apache-01 ansible_connection=ssh ansible_host=192.168.6.161 ansible_user=root ansible_password=Password
apache-02 ansible_connection=winrm ansible_host=192.168.6.162 ansible_user=administrator ansible_password=Password

玩家手册

1. “Playbook”是什么意思?

    • プレイブック:ターゲットノード側で実行したい処理の流れを記載するファイル。

 

    • セクション:プレイブック内での処理のまとまり。

 

    ディレクティブ:セクション内で定義されるキー項目。

2. 主要部分/指令(指导方针)

    Targetセクション:ターゲットノードを特定する。プレイブックでは接続ディレクティブで定義する。主な接続ディレクティブは以下の通り。
ディレクティブ名設定内容hostsターゲットノードの接続パターン。基本的にはインベントリファイルで定義したターゲットノード及びインベントリグループを指定する。gather_factsターゲットノードでの情報取得の有無。trueまたはfalseを指定する。
    Tasksセクション:処理を実行するセクション。プレイブックではtasksディレクティブで定義する。また、tasksディレクティブではモジュール(Ansibleの処理用コンポーネント)を使用する事ができる。主なモジュールは以下の通り。
モジュール名設定内容command指定したコマンドを実施する。script指定したスクリプトを実施する。yum/aptnameでパッケージ名を指定し、stateで状態を指定する事で、指定したパッケージの状態を定義する。主にパッケージの導入/削除に用いられる。servicenameでサービス名を指定し、stateで状態を指定する事で、指定したサービスの状態を定義する。主にサービスの起動/停止に用いられる。lineinfilepathで指定されたファイル内でlineで指定された文を検索し、存在しない場合は該当する文の書き換えまたは追記を実施する。
    Varsセクション:変数を設定する。プレイブックでは変数ディレクティブで定義する。主な変数ディレクティブは以下の通り。
ディレクティブ名設定内容vars基本的な変数を定義する。Jinja2(Python用のテンプレートエンジン)を利用し、”{{}}”の記号を用いて定義する場合が多い。var_files変数情報を管理しているファイルを定義する。
    プレイブック例①
hosts: web_servers
gather_facts: true
tasks: 
  - name: Execute command 'date'
    command: date
  - name: Execute script on server
    script: test_script.sh
  - name: Execute script on server
    script: test_script.sh
  - name: Install httpd service
    yum:
      name: httpd
      state: installed
  - name: Start httpd service
    service:
      name: httpd
      state: started
    プレイブック例②
hosts: web_servers
vars:
  dns_server: 8.8.8.8
tasks:
  - name: Add DNS server to resolv.conf
    lineinfile:
      path: /etc/resolv.conf
      line: 'nameserver {{ dns_server }}'

3. 特殊指令

    • whenディレクティブ:タスクに条件を指定して実行する(条件分岐)。tasksセクションのディレクティブとして指定する。複数条件を論理積で指定したい場合はand、論理和で指定したい場合はorを用いて、条件同士をつなげる。

 

    プレイブック例
hosts: db_servers
tasks:
  - name: Install Mysql on Debian
    apt: 
      name: mysql
      state: installed
    when: ansible_os_family == "Debian"
  - name: Install Mysql on RedHat
    yum: 
      name: mysql
      state: installed
    when: ansible_os_family == "RedHat"
    • loopディレクティブ:タスクを繰り返し実行する(反復処理)。tasksセクションのディレクティブとして指定し、その中に{{ item }}という変数名を用いて繰り返し実行したい値を定義する。(なお、Ansibleバージョン2.4以前はLookupプラグインwith_…の使用が推奨されていたが、バージョン2.5以降はloopディレクティブの使用が推奨されている。)

 

    プレイブック例
hosts: db_servers
tasks:
  - name: Create users
    user: 
      name: "{{ item }}"
      state: presemt
    loop:
      - jeorge
      - mary
      - tom

4. 卷

    • ロール:プレイブックを分割するためのコンポーネント。ロールを利用する場合は、Ansibleが認識できる特定のディレクトリを作成し、ディレクトリ配下にmain.ymlを配置する必要がある。また、以下のディレクトリは必ず配置する必要がある。

tasksディレクトリ:Tasksセクションの内容を定義したmain.ymlを配置するディレクトリ。

配置

1. “配置文件”是什么?

    コンフィグ:Ansibleの設定ファイル。Ansibleの処理におけるパラメーターを設定する。

2. 主要参数 (zhǔ​​ ​shù​)

パラメーター名設定内容log_pathAnsible実行コマンドログの配置場所を設定する。gatheringターゲットノードの詳細情報取得に関する設定を行う。implicitの場合、常に情報収集を行う。explicitの場合、情報収集を行わない。smartの場合、新規の接続の際に情報収集を行い、既存の接続の際には情報収集を行わない。デフォルトはimplicit。forksターゲットノードの並列処理を行うプロセス数を設定する。デフォルトは5
    コンフィグファイル例
[defaults]
log_path = /var/log/ansible.log
gatherig = implicit
forks = 5

3. 优先级

    コンフィグファイルは以下の順番で検索される。
優先順位ファイルパス①環境変数ANSIBLE_CONFIGで指定されたファイル②./ansible.cfg(カレントディレクトリに存在するファイル)③~/.ansible.cfg(ホームディレクトリに存在するファイル)④/etc/ansible/ansible.cfg

我的感受

这次只总结了Ansible的基本用法,因为可用的指令和模块非常多,总结起来很困难。
实际上,在使用Ansible时,大部分情况下会将playbook分解为角色来使用,所以希望通过使用Ansible进行验证,并加深对角色的理解,以掌握它们的使用。

参考资料

    • 公式サイト:Ansible Documentation

Kode Kloud:Ansible Certification Preparation Course

書籍:Ansible実践ガイド

广告
将在 10 秒后关闭
bannerAds