• ansible


    目录

    ansible的特性:

    ansible命令格式

    查看模块

    ansible的常用模块

    inventory主机清单管理

    playbook剧本

    tasks任务的模块语法格式:

    template配置模板模块


    ansible 自动化运维工具,也叫机器管理工具。可以实现批量管理成百上千的多台主机,是应用级别的跨主机编排工具。

    ansible的特性:

    1)无客户端agent的存在,不需要在被控制的节点上安装任何客户端应用。
    2)通过ssh协议与被控制节点通信
    3)基于模块工作的,可以通过模块实现在被控制节点上执行相应的命令操作
    4)很多模块具有幂等性,即可实现多次模块操作的状态如果没有发生改变,则不会重复执行


    ansible命令格式

    ansible  组名  -m 模块名  -a '模块参数'

    查看模块

    ansible-doc -l               #列出当前ansible的所有模块
    ansible-doc -s 模块名        #查看指定模块的信息


    ansible的常用模块

    command     在远程主机执行linux命令,但不支持管道、重定向等特殊符号,是ansible的默认模块     chdir  creates  removes
    shell       在远程主机执行linux命令,支持管道、重定向等特殊符号     chdir  creates  removes
    cron        在远程主机设置crontab计划任务    minute  hour  day  month  weekday  job  name  state=present|absent
    user        在远程主机设管理用户账户     name  uid  group  groups  shell  create_home  remove  state=present|absent
    group       在远程主机设管理组账户    name  gid  state=present|absent
    copy        将ansible主机的文件/目录/内容复制到远程主机    src  dest  content  mode  owner  group
    file        在远程主机管理文件/目录  path  mode  owner  group  state=absent|touch|directory|link  src(指定软链接的源路径,path指定软链接文件理解)
    hostname    在远程主机设置主机名    name
    ping        检测与远程主机的连通性
    yum|apt     在远程主机使用yum|apt-get管理软件包    name  state=present|absent|latest
    service|systemd    在远程主机使用systemctl管理服务状态     name   state=started|stopped|restarted|reloaded  enabled=yes|no|true|false
    script      在远程主机执行ansible主机上的shell脚本
    mount       在远程主机执行挂载、解挂操作    src  path  fstype  state=mounted|unmounted|absent  opts
    archive     在远程主机压缩文件/目录    path  dest  format  remove
    unarchive   将ansible主机上的或远程主机上的压缩包解压缩到远程主机的指定位置    copy(remote_src)  src  dest
    replace     在远程主机修改通过正则表达式匹配的文件内容    path  regexp  replace  after  before  backup
    setup       收集远程主机的系统信息(facts信息)    filter


    inventory主机清单管理

    主机清单配置文件   /etc/ansible/hosts

    格式:
    [组名]
    主机IP[:ssh端口]     #默认是 22 端口
    主机名[:ssh端口]
    主机IP[0:255]        #设置连续的主机列表范围
    主机名[a:z]    ansible_port=     ansible_user=    ansible_password=           #设置主机变量

    [组名:vars]             #设置组变量
    ansible_port=
    ansible_user=
    ansible_password=

    [大组名:children]       #设置嵌套组
    组名1
    组名2
    组名3


    playbook剧本

    vim XXX.yaml  XXX.yml
    ---
    - name:                 #设置play的名称
      hosts:                #指定执行此play的远程主机组
      remote_user:          #指定执行此play的用户
      gather_facts:         #设置是否收集facts信息 yes|no|true|false
      tasks:                #指定此play的任务列表
      - name:                  #定义任务的名称
        模块名: 模块参数       #定义任务要使用的模块和参数(键值对格式)
      - name:  
        模块名: 模块参数
        ignore_errors: true    #忽略此任务的失败
      - name:  
        模块名: 模块参数
        notify: '任务名'       #定义此任务执行结果为changed状态时要触发的handlers任务
      - name:  
        模块名: 模块参数
        when:                  #定义条件表达式(== != > >= < <=),条件成立时执行此task任务,否则不执行此任务
      - name:  
        模块名: 模块参数={{item}}
        with_items:            #定义循环列表
      - name:  
        模块名: 模块参数
        tags:                  #定义任务的标签,ansible-playbook --tags="标签" 可实现仅执行拥有指定标签的任务(拥有always标签的任务总是执行)
        - 标签1
        - 标签2
        ....
        
      handlers:
      - name: 任务名
        模块名: 模块参数


    ansible-playbook XXX.yaml -k -K  
                              --syntax-check
                              --list-task
                              --list-hosts
                              --start-at-task="任务名称"
                              --tags="标签"


    tasks任务的模块语法格式:

    纵向格式:
        模块名:
        - 参数1: 值
        - 参数2: "{{变量名}}"
            ....
    横向格式:
        模块名: 参数1=值  参数2={{变量名}} ....

            
    with_items 和 vars 的语法格式
    纵向格式:
      - name:
        with_items:
        - 值1
        - 值2
        ....
        模块名: 参数={{item}}

      vars:
        变量名:
        - 值1
        - 值2
        ....
      tasks:
      - name:
        模块名: 参数={{item}}
        with_items: "{{变量名}}"

      #值为对象类型(键值对字段)时:
        with_items:
        - key1: 值1
          key2: 值2
        - key1: 值3
          key2: 值4
        ....

      vars:
        变量名:
        - key1: 值1
          key2: 值2
        - key1: 值3
          key2: 值4
        ....
        
    横向格式:
      #值为纯量类型时:
        with_items: [值1, 值2, ....]

      vars:
        变量名: [值1, 值2, ....]

      #值为对象类型(键值对字段)时:
        with_items:
        - {key1: 值1, key2: 值2}
        - {key1: 值3, key2: 值4}
        ....


    template配置模板模块

    1)先准备一个 XXX.j2 配置模板文件,在模板文件中使用 {{变量名}} 格式引用主机变量、组变量、facts信息字段变量或vars字段自定义的变量的值
    2)编辑 playbook 文件,在文件中的 tasks 任务中定义 template 模块配置(template: src=XXX.j2文件路径 dest=远程主机文件路径)
     

  • 相关阅读:
    这几个颠覆性PyCharm插件你一定要知道
    创建型:工厂模式-工厂方法、抽象工厂
    Java三大特性篇之——多态篇(千字详解)
    SpringCloud 组件Gateway服务网关【gateway快速入门】
    LeetCode【128】最长连续序列
    【小沐学Python】网络爬虫之urllib
    浅聊三种设计模式(单例、工厂、代理)
    音视频录制器—打包数据流
    qcow2和vmdk互相转
    《深度学习进阶 自然语言处理》第五章:RNN通俗介绍
  • 原文地址:https://blog.csdn.net/bob_gem/article/details/136495651