3.0 AnsiblePlaybookの基本

概要概要

AnsibleのコアはPlaybooks(Playbookに翻訳可能)です。PlaybookはYAML構文で記述されており、管理対象マシンで実行する必要のある一連の操作を記述します。このスクリプトは、管理対象のマシンを指定された外観にする方法を段階的に記録する調理マニュアルに相当します。

YAMLの構文は非常に単純です。読者がYAMLについて聞いたことがなくても、それは問題ではありません。YAMLはJSON形式よりも簡単に記述できます。

次に、nginxをインストールして、ほとんどすべての友達がよく知っているプレイブックの基本的な使用法を示します。

例-nginxをインストールする

読者が直感的に理解できるように、純粋なマニュアル、シェルスクリプト、プレイブックの3つの方法を使用してnginxをデプロイします

マシンはEPELソースを開く必要があります。https://blog.csdn.net/xys2015/article/details/109378741を参照してください。

1つの純粋なマニュアル

yum install --quiet -y nginx
cat << 'EOF' > /etc/nginx/conf.d/xtest1.conf
server {
    listen       7001;
    server_name  localhost;
    location / {
        root   /opt/xtest1;
        index  index.html;
    }
}
EOF
mkdir -p /opt/xtest1
echo "xtest-7001" > /opt/xtest1/index.html
systemctl start nginx
systemctl enable nginx
curl localhost:7001

2シェルスクリプト

上記で手動で実行したコマンドは、スクリプトとして直接使用できます

3つのプレイブック

# cat nginx_playbook.yml
---
- hosts: all
  tasks: 
    - name: Install Nginx
      shell: yum install --quiet -y nginx
    - name: Copy configuration files
      shell: cp xtest1.conf /etc/nginx/conf.d/xtest1.conf
    - name: Start Nginx and configure it to run at boot
      shell: systemctl start nginx && systemctl enable nginx

誰もが今このプレイブックを実行すると、コマンド

ansible-playbook nginx_playbook.yml

エラーが報告され、プロンプトが表示されますcannot stat ‘xtest1.conf’: No such file or directory。これは予想の範囲内です。理由は、上記のプレイブックで直接使用されるシェルコマンドは、上記のコマンドの各行を個別に取り出し、ターゲットマシンにログインして実行するのと同じであるためです。したがって、対応する構成ファイルはありません。実際の作業では、nginx構成ファイルを管理ノードに配置します。以下では、Ansible独自のモジュールを使用して上記のプレイブックを書き直しています。

# cat nginx_playbook.yml
---
- hosts: 192.168.31.100
  tasks: 
    - name: Install Nginx
      yum: 
        name: nginx
        state: present 
    - name: Copy configuration files
      copy:
        src: xtest1.conf
        dest: /etc/nginx/conf.d/xtest1.conf
        owner: root
        group: root
        mode: 0644
    - name: Make sure Nginx is started now and at boot
      service: name=nginx state=started enabled=yes

現時点では、Ansibleリソースディレクトリの合理的な計画に注意を払う必要はありません。任意にディレクトリを作成し、上記のファイルをそのディレクトリに配置してから、構成ファイルをディレクトリに配置します。の内容については、上記を参照してください。以下のスクリーンショットに示すように、構成ファイル。

ここに画像の説明を挿入

上記のプレイブックを実行したい場合は、プレイブックが置かれているディレクトリに移動しansible-playbook nginx_playbook.ymlて実行しますが、急いで実行しないでください。このプレイブックについて注意深く説明しましょう。

--- 
固定写法,一个标记,类似php代码开头都有<?php一样,在k8s里如果一个yml文件里定义多个资源也是用---分割

- hosts: 192.168.31.100
表示管理的机器,同样这个IP必须已经存放到主机清单里,all表示所有机器,这块的规则跟使用ad-hoc命令一致

yum、service模块这里非常简单,即便无任何Ansible经验也能读懂,不多解释

copy模块这里,表示的是把本机(管理机器)当前目录(相对于执行的命令)下的xtest1.conf,拷贝到目标机器的 /etc/nginx/conf.d/xtest1.conf

それを実行して効果を確認してください

ここに画像の説明を挿入

繰り返し実行した後、ターゲットマシンは二度と変更されず、べき等であることがわかります。

基本的な文法規則

# cat nginx_playbook.yml
---
- hosts: 192.168.31.100
  tasks: 
    - name: Install Nginx
      yum: 
        name: nginx
        state: present 
    - name: Copy configuration files
      copy:
        src: xtest1.conf
        dest: /etc/nginx/conf.d/xtest1.conf
        owner: root
        group: root
        mode: 0644
    - name: Make sure Nginx is started now and at boot
      service: name=nginx state=started enabled=yes
  • で始める必要があります— 3つのマイナス記号、そして行の一番上に書く
  • #記号コメントを使用します(最初のコメントにプレイブック関数を記述できます)
  • インデントは均一である必要があり、スペースとタブを混在させることはできません。インデントとして2つのスペースを均一に使用することをお勧めします。
  • キー/値は、大文字と小文字を区別して1行または複数行に書き込むことができます
  • プレイブックの実行は、上から下へと順番に行われます。

本当に比較したい場合、複数行で書くことの利点は、gitが違いを追跡して比較するのに便利なことです。

共通のコアパラメータ

--inventory=PATH (-i PATH)  手动指定主机清单文件,默认是 /etc/ansible/hosts
-v    输出详细信息
-vvv  输出更详细信息
-vvvv 调试(debug)模式
--forks=NUM  指定并发执行数,默认是5
--check (-C) 不实际执行,运行检查模式
--syntax-check  语法检查
--limit ${ip}  限制执行只在单个或多个IP内(逗号分割)
--list-hosts  显示本次执行操控的IP

実際の作業シナリオの2つの例を次に示します。マシンのバッチの初期化と単一のマシンの初期化、上記のパラメーターの使用方法を見てください。準備された環境は次のとおりです。

[root@192-168-31-106 ~/install_nginx]# ls
nginx_playbook.yml  xtest1.conf
[root@192-168-31-106 ~/install_nginx]# cat nginx_playbook.yml 
---
- hosts: all
  tasks: 
    - name: Install Nginx
      yum: 
        name: nginx
        state: present 
    - name: Copy configuration files
      copy:
        src: xtest1.conf
        dest: /etc/nginx/conf.d/xtest1.conf
        owner: root
        group: root
        mode: 0644
    - name: Make sure Nginx is started now and at boot
      service: name=nginx state=started enabled=yes

[root@192-168-31-106 ~/install_nginx]# cat xtest1.conf 
server {
    listen       7001;
    server_name  localhost;
    location / {
        root   /opt/xtest1;
        index  index.html;
    }
}

シナリオ1: nginxマシンのバッチを7層のロードバランサーとして初期化します

#查看操控了哪些机器
ansible-playbook nginx_playbook.yml --list-hosts
#检查语法
ansible-playbook nginx_playbook.yml --syntax-check
#模拟执行 (这个模拟执行并不是万能模拟)
ansible-playbook nginx_playbook.yml --check
#实际执行
ansible-playbook nginx_playbook.yml

ここに画像の説明を挿入

次の図に示すように、シミュレーションの実行ではエラーは報告されませんでしたが、実際の実行ではエラーが報告されました。理由は、マシン192.168.31.106でポート80がすでに使用されているためです。次に、nginxを起動し、ポート80でリッスンします。 。競合が発生し、エラーが報告されたため、シミュレーションが実行されます。機能は全能ではありません。大まかにしかシミュレーションできません。ここから、マシンがエラーを実行し、の通常の動作に影響を与えないことがわかります。他のマシン。

ここに画像の説明を挿入

シナリオ2はボリューム大きく、以前の7層マシンはそれに耐えられません。新しい7層マシン(192.168.31.102)が追加されます。

#查看操控了哪些机器
ansible-playbook nginx_playbook.yml --list-hosts
#检查语法
ansible-playbook nginx_playbook.yml --syntax-check
#限制某台机器模拟执行
ansible-playbook nginx_playbook.yml --check --limit 192.168.31.102
#如果要限制多台,则以逗号分割
ansible-playbook nginx_playbook.yml --check --limit 192.168.31.102,192.168.31.100
#可以配合--list-hosts,再次确认
ansible-playbook nginx_playbook.yml --check --limit 192.168.31.102,192.168.31.100 --list-hosts
#实际执行
ansible-playbook nginx_playbook.yml --limit 192.168.31.102

ここに画像の説明を挿入

ちなみに、-vパラメータ出力の効果をみんなに見もらいましょう

ここに画像の説明を挿入

プレイブックとシェルスクリプトの違いの比較

  1. Ansibleが実行されると、明確な痕跡が残り、Ansibleが何をしたかがわかります。
  2. 設計が合理的である場合、Ansibleはかなりの程度のべき等サポートを提供できます(少なくとも、プレイブックがべき等であるかどうかを確認できます)
  3. --check機会の実装、シミュレーションの実行の前に同様の議論を提供しますが、実際にはターゲットマシンに変更を加えません
  4. 大規模なシェルスクリプトの意味は維持されます。問題が発生すると、デバッグが困難になり、適切に設計されたAnsiblePlaybookにはそのような問題はほとんどありません。

ansible-docヘルプを表示

#1 查看系统里全部模块
ansible-doc --list > /tmp/tmp.txt

#2 搜索某个模块的用法
ansible-doc --list > /tmp/tmp.txt; grep copy /tmp/tmp.txt
ansible-doc copy

これは、公式文書をチェックするよりも便利なことがよくあります。結局のところ、インターネットに接続する必要はなく、さらに重要なことに、バージョンは一貫している必要があります。

デバッグモジュール

このモジュールは、Ansibleの一般的に使用されるいくつかの機能をテストするのに非常に便利です

[root@192-168-31-106 ~/install_nginx]# cat debug_playbook.yml 
---
- hosts: all
  tasks:
    - name: debug test 1
      debug:
        msg: 主机名 {
   
   { ansible_hostname }}
    - name: debug test 2
      debug:
        msg: 操作系统 {
   
   { ansible_distribution }} 版本 {
   
   { ansible_distribution_major_version }}
[root@192-168-31-106 ~/install_nginx]# ansible-playbook debug_playbook.yml 

ここに画像の説明を挿入

上記で使用されている変数は、Ansibleシステムの組み込み変数であり、中括弧が2つあり、両側にスペースを残し、中央に変数名を記述します。これは固定使用法です。使用できる他の変数は、次のコマンド

ansible 192.168.31.100 -m setup

非rootユーザーとして実行する

# cat none-root-user.yml
- hosts: test
  tasks:
    - name: debug info 4
      become: yes
      become_user: www
      shell: whoami > /tmp/tmp2.txt

ラベルと指定されたオペレーティングシステム

---
cat tags_playbook.yml
- name: copy node-ps single binary to remote machine /etc/dAppCluster
  copy: src=node-ps dest=/etc/dAppCluster/node-ps mode=0744
  tags:
  - INSTALL_OR_UPDATE
  when: 
  - ansible_distribution == "CentOS"
  - ansible_distribution_major_version == "6" or ansible_distribution_major_version == "7"

- name: copy node-ps manager scripts CENTOS7
  copy: src=node-ps.service dest=/usr/lib/systemd/system/node-ps.service
  tags:
  - UPDATE
  when: 
  - ansible_distribution == "CentOS"
  - ansible_distribution_major_version == "7"


#不指定tag,则全部执行
ansible-playbook  tags_playbook.yml --limit 192.168.31.100
#指定具体的tag,则只执行该tag下面的任务
ansible-playbook  tags_playbook.yml --tags UPDATE --limit 192.168.31.100

特定のタグを使用すると、さまざまなシナリオで実行されるタスクを区別できます。たとえば、インストールはタグ、アップグレードはタグであり、テストにも使用できます。

Ansibleプロンプトの色情報の説明

  • 黄色の翔:リモートノードに対応する変更を加える
  • ハットグリーン:リモートノードを変更しないでください。または、リモートノードの情報を表示するだけです。
  • クリムゾン:操作実行コマンドが異常です
  • 薄紫:コマンドの実行に対して警告メッセージが発行されたことを示します(問題の可能性があります。いくつかの提案をしてください)

参照リンク

https://docs.ansible.com/ansible/latest/cli/ansible-doc.html

おすすめ

転載: blog.csdn.net/xys2015/article/details/113845952