架构师的成长之路初片~自动化篇之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'}

原文地址:https://www.cnblogs.com/ahaocloud/p/14495364.html