zoukankan      html  css  js  c++  java
  • ansible的playbook剧本

    一、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
  • 相关阅读:
    最大子序列和问题的几种算法
    给Repeater控件里添加序号的5种方法
    关于上传(上传所用到的upload和upload的应用)
    .net中的动态时钟 (年月日 时分秒)
    网页总结
    PHP算法将数字金额转换成大写金额
    Linux下编译安装redis,详细教程
    如何让PHP支持Redis
    网络互连技术——第一章随记
    网络互连技术——第二章考试需知
  • 原文地址:https://www.cnblogs.com/linu/p/9901161.html
Copyright © 2011-2022 走看看