Ansibleのプレイブックでよく使用される詳細な説明-非常に詳細
Ansibleのプレイブックでよく使用される詳細な説明-非常に詳細
YAMLマークアップ言語
YAMLはデータシーケンスを表現するためのフォーマットであり、他の多くの言語を参照しているため、非常に読みやすく、その特徴は次のとおりです。
- 非常に読みやすく、実装も簡単です
- 強力な表現力と優れたスケーラビリティ
- スクリプト言語との良好な相互作用
- 一貫した情報モデルを持っている
- ストリームに基づいて処理できます
基本的な文法規則
1.大文字と小文字を区別
2.インデントを使用して階層関係を示します
3.インデント時にタブキーを使用することはできません。スペースのみを使用できます。
4.同じレベルの要素が左揃えである限り、インデントされたスペースの数は重要ではありません。
YAMLでサポートされるデータ構造
1.オブジェクト:キーと値のペアのコレクション。マッピング/ハッシュ/ディクショナリ(辞書)とも呼ばれます。例:名前:開発者のキー値の例
2.配列:順番に並べられた値のセット。Forとも呼ばれます。シーケンス(シーケンス)/リスト(リスト)例:
-Apple -Orange
3.スカラー:単一の分割できない値例:数値:11.20確実:true
プレイブックの概要
プレイブックは、1つ以上のプレイで構成されるリストです。主な機能は、タスクの役割を定義し、それらをグループとして管理することです。つまり、タスクのAnsibleモジュールを呼び出して、プレイブック内の複数のパリを整理します。プレイブック自体は、次の部分で構成されています。
- タスク:タスク、つまり、モジュールを呼び出すことによって完了する操作
- 変数:変数
- テンプレート:テンプレート
- ハンドラー:ハンドラー、特定の条件が満たされると、操作がトリガーされます
- 役割:役割
ホストとユーザーの紹介
プレイブックの設計目的は、特定のホストまたは特定のホストが特定のIDで対応するタスクを実行できるようにすることです。その中で、タスクを実行するホストのホスト定義を指定するために使用されます。コロンで区切られたホストまたは複数のホストグループにすることができます。これは、によって定義される管理対象ホストでタスクを実行するユーザーを指定するために使用されます。 remote_user、例:
- hosts: webserver
remote_user: root
remote_userは、指定されたユーザーを定義して、sudoメソッドを介して管理対象ホストでコマンドを実行することもできます。また、becomeを使用してsudoによって切り替えられたユーザーを指定することもできます。
インスタンス
- hosts: mysql
remote_user: root
become: yes
become_user: lisi
tasks:
- name: copy text
copy: src=/etc/fstab dest=/home/lisi/fstab.back
タスクリストとアクション
1. Playの主要部分はタスクリストです。タスクリスト内のタスクは、ホストで指定されたホスト上で1つずつ実行されます。つまり、すべてのホストで最初のタスクが完了した後に2番目のタスクが開始されます。
プレイブック(上から下に実行)を実行しているときに、ホストがタスクの実行に失敗すると、タスク全体がロールバックされます。プレイブックのエラーを修正して、もう一度実行してください。
Taskの目的は、指定されたパラメーターを使用してモジュールを実行することであり、変数はモジュールパラメーターで使用できます。
2.各タスクには名前を付ける必要があります。これにより、プレイブックの実行時に、タスクが属するタスク実行情報と簡単に区別できます。名前が定義されていない場合、「action」の値は、出力メッセージで特定のタスクをマークするために使用されます。
3.タスクを定義します。一般的な形式は「モジュール:オプション」です。例:yum:name = httpd
プレイブックの簡単な例:
[root@master demo]# vim lll.yaml
- hosts: mysql
remote_user: root
tasks:
- name: ceshi
ping:
remote_user: root
[root@master demo]# ansible-playbook lll.yaml --syntax-check #测试语法是否正确
playbook: lll.yaml
[root@master demo]# ansible-playbook lll.yaml #运行剧本
PLAY [mysql] ******************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [20.0.0.15]
TASK [ceshi] ******************************************************************************************
ok: [20.0.0.15]
PLAY RECAP ********************************************************************************************
20.0.0.15 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ユーザーを切り替え、ファイルをユーザーディレクトリにコピーします
[root@master demo]# vim lll.yaml
- hosts: mysql
remote_user: root
become: yes
become_user: zhangsan
tasks:
- name: copy
copy: src=/etc/fstab dest=/home/zhangsan/fstab.bak
[root@master demo]# ansible-playbook lll.yaml #执行剧本
mysqlノードで表示
httpdを作成してインストールし、httpdサービスを開き、ファイアウォールをオフにして、httpdWebページを作成します。
[root@master demo]# vim ggg.yml
- hosts: mysql
remote_user: root
vars:
- user:
tasks:
- name: stop firewalld
service: name=firewalld state=stopped
- name: install httpd
yum: name=httpd
- name: start httpd
service: name=httpd state=started
- name: touch index
copy: content="this is ggg" dest=/var/www/html/index.html
- name: copy
copy: content="{
{ansible_all_ipv4_addresses}},{
{nu}}" dest=/opt/g.txt
[root @ master demo]#ansible-playbook ggg.yml #mysql
ノードでプレイブックビューを実行する
[root@node2 ~]# cd /var/www/html/
[root@node2 html]# cat index.html
this is ggg
変数
[root@master demo]# vim b.yaml
- hosts: mysql
remote_user: root
vars:
- username: lisi
tasks:
- name: create user
user: name={
{
username}}
[root@master demo]# ansible-playbook b.yaml --syntax-check #检查语法
playbook: b.yaml
[root@master demo]# ansible-playbook b.yaml#运行剧本
在mysql节点上查看
[root@node2 ~]# cd /home/
[root@node2 home]# ll
总用量 0
drwx------. 5 ggg ggg 128 12月 19 08:59 ggg
drwx------. 5 jjj caiwu 128 12月 19 08:59 jjj
drwx------. 3 lisi lisi 78 12月 20 02:24 lisi
drwx------. 6 zhangsan zhangsan 161 12月 19 21:31 zhangsan
変数が空の場合、スクリプトの実行時に変数を追加できます
[root@master demo]# vim b.yaml #其中变量为空 可以在运行剧本的时候添加变量
- hosts: mysql
remote_user: root
vars:
- username:
tasks:
- name: create user
user: name={
{
username}}
~
[root@master demo]# ansible-playbook b.yaml -e username="wangwu"
在mysql节点上查看
[root@node2 home]# ll
总用量 0
drwx------. 5 ggg ggg 128 12月 19 08:59 ggg
drwx------. 5 jjj caiwu 128 12月 19 08:59 jjj
drwx------. 3 lisi lisi 78 12月 20 02:24 lisi
drwx------. 3 wangwu wangwu 78 12月 20 03:35 wangwu
drwx------. 6 zhangsan zhangsan 161 12月 19 21:31 zhangsan
組み込み変数
[root@master demo]# vim ggg.yml #nsible_all_ipv4_addresses内置的变量 查看IP地址
- hosts: mysql
remote_user: root
vars:
- user:
tasks:
- name: stop firewalld
service: name=firewalld state=stopped
- name: install httpd
yum: name=httpd
- name: start httpd
service: name=httpd state=started
- name: touch index
copy: content="this is ggg" dest=/var/www/html/index.html
- name: copy
copy: content="{
{ansible_all_ipv4_addresses}}}}" dest=/opt/t.txt
[root@master demo]# ansible-playbook ggg.yml #执行
在mysql节点上查看
[root@node2 home]# cd /opt/
[root@node2 opt]# ll
总用量 8
-rw-r--r--. 1 root root 45 12月 19 22:16 g.txt
-rw-r--r--. 1 root root 34 12月 20 03:41 t.txt
[root@node2 opt]# cat t.txt
[u'192.168.122.1', u'20.0.0.15']}}[root@node2 opt]#
メイン構成ファイルに変数を追加します
[root@master demo]# vi /etc/ansible/hosts
[webservers]
20.0.0.14
[mysql]
20.0.0.15 nu=124335246
[root@master demo]# vim ggg.yml
- hosts: mysql
remote_user: root
vars:
- user:
tasks:
- name: stop firewalld
service: name=firewalld state=stopped
- name: install httpd
yum: name=httpd
- name: start httpd
service: name=httpd state=started
- name: touch index
copy: content="this is ggg" dest=/var/www/html/index.html
- name: copy
copy: content="{
{ansible_all_ipv4_addresses}},{
{nu}}}}" dest=/opt/t.txt
[root@master demo]# ansible-playbook ggg.yml
在mysql节点上查看
[root@node2 ~]# cd /opt/
[root@node2 opt]# cat t.txt
[u'192.168.122.1', u'20.0.0.15'],124335246}}[root@node2 opt]#
状態テスト
[root@master demo]# vim q.yaml #关闭mysql节点
- hosts: mysql
remote_user: root
tasks:
- name: "shutdown CentOS"
command: /sbin/shutdown -h now
when: ansible_distribution == "CentOS"
[root@master demo]# ansible-playbook q.yaml
エラーの理由は、mysqlの使用が終了したためです
条件付きテスト用のカスタム変数
反復
[root@master demo]# vim e.yaml
- hosts: mysql
remote_user: root
tasks:
- name: intasll hPackages
yum: name={
{
item }} state=latest
with_items:
- httpd
- php
[root@master demo]# ansible-playbook e.yaml #运行剧本
在mysql节点上查看
[root@node2 ~]# rpm -q php
php-5.4.16-42.el7.x86_64
[root@node2 ~]# rpm -q httpd
httpd-2.4.6-67.el7.centos.x86_64
スクリプトのタスクの下にコマンドラインを記述します
iignore_errors:True#エラーを無視し、正常な戻りを強制します