一、playbook剧本介绍

1)playbook介绍

Playbooks是Ansible的配置,部署和编排语言。它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤。
如果说ansible 模块 是你车间里的工具,那么playbooks 是你的说明书/使用手册,并且资源清单上的主机是你的原材料。
在基本层面上,剧本可以用于管理远程主机的配置与部署,在更高的一层来说,它们可以对涉及滚动更新的多层发布任务进行排序,并且可以将操作委派给其他主机,同时与监视服务器和负载平衡器进行交互。
在ansible 上使用Playbooks是一种完全不同于adhoc的任务执行模式,并且特别强大。简单地说,playbooks是一个非常简单的配置管理和多机器部署系统的基础,以及非常适合部署复杂应用程序的系统。
Playbooks可以对任务进行编排,就像我们要安装一个程序,写个安装shell脚本一样,在哪一步复制配置文件,最后一步启动服务。
虽然/usr/bin/ansible 可以运行一些临时任务,但是针对复杂的配置,并且可以将配置标准化,这个时候就需要Playbooks了。

2)写简单的playbook剧本,tree_install.yml

[root@web01 ~]# cat ansible_test/tree_install.yml 
---
- hosts: web01
  tasks:
    - name: Installs tree
      yum: name=tree state=installed update_cache=true

剧本写好了,需要先测试一下语法

 ansible-playbook -C xx.yml  测试的时候先验证语法 

分析剧本内容

---
- hosts: web01        
  tasks:
    - name: Installs tree
      yum: name=tree state=installed update_cache=true

=======分析=========
hosts  执行的主机。在 /etc/ansible/hosts
tasks  任务
    name  任务名字
    yum   执行的命令操作
        yum install tree -y
    name=tree ==>指要安装的名字,update_cache=true ==> 相当于 y

执行记录

第一次执行
[root@web01 ~]# ansible-playbook ansible_test/tree_install.yml 
PLAY [web01] ************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [192.168.10.25]
ok: [myweb]

TASK [Installs lrzsz] ***************************************************************************************************************************************************************
changed: [myweb]
changed: [192.168.10.25]

PLAY RECAP **************************************************************************************************************************************************************************
192.168.10.25              : ok=2    changed=1    unreachable=0    failed=0   
myweb                      : ok=2    changed=1    unreachable=0    failed=0   
返回状态:ok=2(执行成功)    changed=1(命令执行成功)

第二次再执行
[root@web01 ~]# ansible-playbook ansible_test/tree_install.yml 
PLAY [web01] ************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [192.168.10.25]
ok: [myweb]

TASK [Installs lrzsz] ***************************************************************************************************************************************************************
ok: [192.168.10.25]
ok: [myweb]

PLAY RECAP **************************************************************************************************************************************************************************
192.168.10.25              : ok=2    changed=0    unreachable=0    failed=0   
myweb                      : ok=2    changed=0    unreachable=0    failed=0 
返回状态:ok=2(执行成功)    changed=0(已经安装了)
执行结果

 等同于 ansible web01 -m yum -a "name=tree state=present update-cache=true"

 等同于ansible web01 -a "yum install tree -y" 

 3)playbook剧本安装nginx并启动他

[root@web01 ~]# cat ansible_test/nginx_install.yml 
---
- hosts: nginx01
  tasks:
    - name: Installs nginx web server
      yum: name=nginx state=installed update_cache=true
      notify:
        - start nginx

  handlers:
    - name: start nginx
      service: name=nginx state=started

执行结果分析

[root@web01 ~]# ansible-playbook ansible_test/nginx_install.yml 
PLAY [nginx01] **********************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [k8s1_192_168_10_41]

TASK [Installs nginx web server] ****************************************************************************************************************************************************
changed: [k8s1_192_168_10_41]

RUNNING HANDLER [start nginx] *******************************************************************************************************************************************************
changed: [k8s1_192_168_10_41]

PLAY RECAP **************************************************************************************************************************************************************************
k8s1_192_168_10_41         : ok=3    changed=2    unreachable=0    failed=0  
结果分析ok=3,连接OK,安装OK,启动ok    changed=2,安装变化,启动变化
View Code

4)以指定主机iP的形式提交任务,需要加上 -l

ansible-playbook -l 192.168.10.176 nginx_install.yml

  测试未通过

5) 安装nginx并拷贝文件

---
- hosts: all
  tasks:
    - name: Installs nginx web server
      yum: name=nginx state=installed update_cache=true
      notify:
        - start nginx
    - name: Upload default index.html for host
      copy: src=static_files/index.html dest=/usr/share/nginx/html/ mode=0644

  handlers:
    - name: start nginx
      service: name=nginx state=started

6)调用shell命令

[root@k8s6 ansible_yml]# cat shell.yml 
---
- hosts: web
  tasks:
    - name: shell_test
      shell: ss -tnl|grep :22

二、playbook剧本的深入操作

1)任务执行结果判断,register

---
- hosts: all
  tasks:
    - name: Installs nginx web server
      yum: name=nginx state=installed update_cache=true
      notify:
        - start nginx

    - name: Upload default index.html for host
      copy: src=static_files/index.php dest=/usr/share/nginx/html/ mode=0644
      register: php
      ignore_errors: True

# 如果任务php执行成功,执行该任务
- name: Remove index.html for host command: rm /usr/share/nginx/html/index.html when: php|success
# 如果任务php执行失败,执行该任务
- name: Upload default index.html for host copy: src=static_files/index.html dest=/usr/share/nginx/html/ mode=0644 when: php|failed handlers: - name: start nginx service: name=nginx state=started

分析关键字

执行该任务,并注册任务名字
register: php

php任务执行成功后执行
when: php|success

php任务执行失败后执行
when: php|failed

 2)生产环境服务安装

---
- name: 安装neodb
  hosts: eos-neodb
  vars_files:
    - vars/iot.yml
  tasks: 
    - name: "build java 1.8.0"
      shell: "sudo sed -i s/jdk1.7.0_79/jdk1.8.0_60/g {{ profile_path }}"

    - name: "check java version"
      shell: "source {{ profile_path }} && java -version"
      register: java_version
      failed_when: java_version is defined and "1.8.0" not in java_version.stderr

    - name: "check neodb"
      shell: "sudo ls /home/envuser/ongdb-enterprise-3.4.9"
      register: check_neodb
      failed_when: check_neodb is defined and "No such file or directory" not in check_neodb.stderr

    - name: Upload {{ neodb }}
      become: yes
      become_user: root
      become_method: sudo
      copy: src={{ srcfile }} dest={{ descfile }}
  
    - name: tar -xf  {{ neodb }}
      become: yes
      become_user: root
      become_method: sudo
      shell: cd {{ descfile }} && tar -xf {{ neodb }} && chown envuser:envuser -R {{ ongdb }}
    
    - name: Upload neo4j.conf
      become: yes
      become_user: root
      become_method: sudo
      copy: src=/home/supper-user/tools/neo4j.conf dest=/home/envuser/ongdb-enterprise-3.4.9/conf/

    - name: ln -s ongdb-enterprise-3.4.9
      become: yes
      become_user: envuser
      become_method: sudo
      shell: cd /home/envuser && ln -s ongdb-enterprise-3.4.9  ongdb

    - name: sed neo4j
      become: yes
      become_user: envuser
      become_method: sudo
      shell: cd /home/envuser/ongdb-enterprise-3.4.9/conf/ && sed -i "s#hostname#`hostname`#g" neo4j.conf && chown envuser:envuser neo4j.conf

    - name: "set admin password"
      become: yes
      become_user: envuser
      become_method: sudo
      shell:  source {{ profile_path }} && cd /home/envuser/ongdb-enterprise-3.4.9/bin/ && ./neo4j-admin set-initial-password admin

 三、参数验证

---
- hosts: all
  gather_facts: no
  tasks:
    - name : touch file
      shell: "touch /tmp/{{touch_file}}"

执行服务

ansible-playbook ./f1.yml --extra-vars "touch_file=123"

 

posted on 2018-11-06 15:37  可口_可乐  阅读(309)  评论(0编辑  收藏  举报