zoukankan      html  css  js  c++  java
  • 架构师的成长之路初片~自动化篇之Ansible

    1)装包:

    ansible_soft.ta.gz  内的包

    yum -y install ./*          //当前目录下的所有文件

    2)修改配置文件

    主配置文件/etc/ansible/ansible.cfg

    *ansible对配置文件的查找顺序

      首先检测ANSIBLE_CONFIG变量定义的配置文件

      其次检测当前目录下的ansible.cfg文件

      再次检查家目录下的ansible.cfg文件

      最后检查/etc/ansible.cfg文件

    普通模块:没有智能判断的能力

    command  shell  ping

      在执行多次以上的命令时,会执行命令而不能判断该命令是否以及执行

    专属模块:copy  file  fetch  linginfile  yum.....

      专属模块可以判断该命令是否执行,如已执行,则不会重复执行该命令。

    在~目录创建ansible

      cd  ansible

      vim  ansible.cfg

       [defaults]

       inventory=./inventory

      vim  inventory

      [test]

      n1

      n2

      [test2]

      n3

      n4

      [cluster:children]      //嵌套组(:children  为关键字)

      test

    专属模块必记:

    1)  file

    2)  copy

    3)  fetch

    4)  lineinfile

    5)  replace

    6)  user        添加密码:必记: password={{'123456'  |   password_hash('sha512')}}

    7)  yum

    8)  yum_repoistory

    9)  service

    10)  lvg

    11)  lvol

    12)  parted

    13)  firewalld

    编写playbook------剧本

      格式:

      #代表注释,一般第一行为三个横杠(---)

      键/值(key/value)对使用  ”  .   “   表示,数组使用  ”  -   “表示,”  -   “后面有空格

    文件名以  .yml 或 .yaml 结尾 ,区分大小写

      缩进由两个或两个以上空格组成

      相同层级必须缩进对其,缩进代表层级关系

      跨行数据需要使用    >   或者   |    (  |   会保留换行符)

    playbook 语法格式

    每个play中可以包含

      - hosts  tasks  vars  等元素组成

      hosts由一个或多个组或主机组成,逗号分隔

      可以使用  -f  选项自定义并发量

      /etc/ansible/ansible.cfg

      forks=5            //ssh并发量

      host_key_checking=False    //是否检验密钥

    特殊模块:

      setup模块

      ansible  tesst -am setup  //可看到test中的所有变量

    调用变量:

      debug模块:        //使用debug模块可以输出常量信息内容或变量信息。  类似于  ”echo“

        msg: "{{变量}}"    //msg参数可以定义信息内容,双大括号在这里时调用变量

    2.inventory变量

      修改主机签单文件,在node1主机后面追加变量

    node1  myvar1="abc"    //myvar1是变量名可以自定义,后面abc是变量(myvar)是变量可自定义

    [webserver:vars]        //给组webserver定义变量

    3.playbook变量

      hosts:test

      vars:              //定义变量的关键词

        myvar2:abc02

        myvar3:abc03

      tasks:

         -debug:

          msg:  "{{myvar2}}"  //调用变量

     

    4.变量文件

      在ansible目录下创建一个 variables.yml  的文件

      ---

        myvar5:abc05

        myvar6:abc06

      创建调用variables.yml  的文件

      ---

      - hosts:

        var_files:  /root/ansible/variables.yml

      tasks:

        -user:

        name: "{{myvar5}}"

        password:"{{'myvar6 | password_hash('sha512')'}}"

    变量的优先级:

      playbook>hostFasts>inventory>变量文件

    其他模块:

      firewalld

      template      //功能与copy类似,但拷贝文本时可以识别变量

    素材:abc.txt  text  {{ansible_hostname}}

       tasks:

        src:  /ansible/abc.txt

        dest  /opt/abc.txt

      ignore_errors    //跳过或忽略错误的模块任务

      -template:

        src:  /ansible/abc.txt

        dest:  /opt/abc.txt

        ignore_errors:  true        //如果template模块内发生错误,则会跳过此模块。

    ###

    template:  不能调用以  .yml  结尾的文件作为源文件。

    ###

        -hosts:

        ignore_errors:true      //如与gosts对齐,则对主机执行的所有任务生效。

    ansible的高级功能

    1)定义handlers任务

      在剧本中tasks用来定义任务(一定会执行),handlers也可以定义任务(不一定执行)handlers任务要想执行必须要被别人触发才能执行。

      

      -file:  state=touch  path=/opt/abc09

      notify:  handol            //调用handlers中的任务名称

    handlers:                  //预定义,与tasks对齐

      - name: handol              //预备任务,不一定执行

    #常用于重复的工作(磁盘格式化)

      when  条件判断,条件为真时才能执行某任务

      ==       !=    >  >=    <    <=

      多个条件可以使用and或or  分割。

    # when表达式中调用变量不要使用  {{  }}

    1)单一条件

      tasks:

        -debug

          msg:ok

        when:  ansible_hostname  !=  "node1"

    2)多个条件

      tasks:

        -debug:

          msg:ok

        when:  >

          ansible_hostname  ~=  "node2"

          and      (and  或 or)

          ansible_memfree_mb  >  100

    3)使用block、rescue、always  组合执行任务

      使用rescue语句定义在block任务执行失败时要执行的其他任务,还可以使用always语句定义,无论block任务是否成功,都要执行任务。

    - hosts:    test
      tasks:
           -block:
                - debug:
                        msg:"{{ok}}"
             rescue:                        //救援任务,仅block任务失败时执行
                - debug:
                        msg:"{{rescue~~~}}"
             always:                         //无论block是否成功,都会执行
                -  debug:
                        msg:"always~~~"

    loop循环:  //相同任务需要多次执行时避免重复写模块语句

      tasks:

        -file: state=touch  path=/opt/{{item}}

         loop:

          -: xyz01

          -: xyz02

    loop循环高级用法,定义子值

      tasks:

        -user    

          name:  "{{item.myvar1}}"

          password:  "{{‘item.var1 | password_hash('sha512')’}}"

         loop:

          - {myvar1: 'abc01',var02: 'xyz02'}

  • 相关阅读:
    Z遮罩层完全覆盖页面
    页面加载完成时
    文字超出不换行,用省略号表示
    去掉最后一个元素的边线
    电话点击即可拨打
    制作对话的三角形
    active在iphone上不起作用
    jquery选择后代以及toggle,toggleClass用法
    button点击变换颜色时出现一个蓝色边框
    表格边框的实现
  • 原文地址:https://www.cnblogs.com/ahaocloud/p/14495364.html
Copyright © 2011-2022 走看看