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 1219 08:59 ggg
drwx------. 5 jjj      caiwu    128 1219 08:59 jjj
drwx------. 3 lisi     lisi      78 1220 02:24 lisi
drwx------. 6 zhangsan zhangsan 161 1219 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 1219 08:59 ggg
drwx------. 5 jjj      caiwu    128 1219 08:59 jjj
drwx------. 3 lisi     lisi      78 1220 02:24 lisi
drwx------. 3 wangwu   wangwu    78 1220 03:35 wangwu
drwx------. 6 zhangsan zhangsan 161 1219 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 1219 22:16 g.txt
-rw-r--r--. 1 root root 34 1220 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#エラーを無視し、正常な戻りを強制します

おすすめ

転載: blog.csdn.net/weixin_50346902/article/details/112970304