zoukankan      html  css  js  c++  java
  • ansible相关说明

    2、ansible相关说明

    2.1、ansible相关命令

    ansible:定义并运行简单任务,主要执行ad-hoc命令
    ansible-config:查看、编辑、管理ansible配置
    ansible-connection
    ansible-console:repl控制台执行ansible任务
    ansible-doc:文档查看工具。控制台输入 ansible-doc -h 查看帮助各个参数说明,查看playbook片段使用 ansible-doc -s yum , 详细说明可以使用 -v -vvv -vvvv 参数
    ansible-galaxy:共享和下载roles的工具
    ansible-inventory:查看inventory的信息,可以把hosts的ini格式转成想要的json或者yaml
    ansible-playbook:执行playbookansible-pull:从仓库中拉去playbook
    ansible-vault:文件加密工具重点掌握ansible和ansible-playbook命
    ansible-pull: 默认使用的是push模式,pull模式相反;适用于数量巨大的机器配置;没有网络连接的机器运行

    2.2、ansible命令

    格式:ansible <host_name/inventory_file> -m <module_name> -a
    例子:ansible all -m shell -a 'date'
    常见可选参数:

    -m 模块名,默认不指定模式时,使用的是command模块。
    -a 针对模块的具体命令,用单引号包含
    -f 并行执行的设备数(默认5)
    -o 简化输出(一行输出)
    -i 指定 inventory 的路径(默认为 /etc/ansible/hosts)
    -u 执行用户(默认root)
    -P 后台执行(后跟数字表示隔多少秒轮询一次,为0表示静默执行)
    -B 最大执行时长(单位秒)
    -t 输出结果重定向
    --syntax-check playbook语法检查,不执行

    2.3、ansible主要配置文件

    /etc/ansible/ansible.cfg 配置文件,以下是对默认文件修改

    # 注意,ansible的执行用户为普通用户,因为每个机器都做了sudo,所以ansible.cfg需要设置切换root操作,以下列出修改
    [privilege_escalation]
    # become=True	# 取消总是以root执行,需要时加参数切换
    become_method=sudo
    become_user=root
    become_ask_pass=False
    
    # 以下是修改之后的执行效果,注意看输出
    ansible lzcx -m shell -a "whoami"
    ansible lzcx -m shell -a "whoami" -b
    

    切换root

    /etc/ansible/hosts 主机库(host inventory)
    /etc/ansible/roles/ 公共角色,主要在自动化部署多台主机时应用
    /usr/bin ansible执行命令存放目录,ansible,ansible-doc,ansible-playbook等等

    2.4、inventory介绍

    Inventory 文件遵循 ini 文件风格,[] 标记分组,方便对机器列表的管理
    inventory 支持配置设置支持 ip,主机名,ip区域,ssh端口,连接类型(默认ssh)和连接用户,主机变量,添加关键字作为配置组变量
    静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。
    设置组名时,尽量选择有意义的名字
    以下是hosts文件的几种配置方法,举例说明,不一定用在这个实验环境

    # 未分组的主机,添加在最前面
    192.168.1.1.212
    # 添加一个分组,并指定ip区域
    [centos6]
    192.168.1.[216:217]
    # 指定连接类型和连接用户
    [target1]
    localhost ansible_connection=local
    192.168.1.213 ansible_connection=ssh
    ansible_ssh_user=operation
    # 配置主机变量
    [target2]
    host1 http_port=80
    host2 http_port=80 var2=xxx var3=xxx
    # 添加关键字var,配置组变量,对属于该组的所有主机都适用
    [target2:var]
    var4=xxx
    var5=xxx
    # 添加关键字children,把组作为其他组的子成员
    [target3:children]
    target1
    target2
    

    2.5、主机列表的执行匹配规则

    匹配规则主要有以下几种
    逻辑匹配:全量 all/* 、逻辑或 | 、逻辑非 ! 、逻辑与 & 、切片 []
    正则匹配:见下文详解

    以下列举各种匹配类型
    指定主机ip:直接指定ip运行,这里指定包括数字和字母指定

    # 例
    ansible 192.168.1.216 -m shell -a 'date'
    

    指定主机名:前提是先将ip和主机名添加到系统hosts文件才能识别,将主机名添加到ansible的hosts文件,执行命令检查是否成功

    # 例
    echo '192.168.1.214 yuhui' >> /etc/hosts
    echo 'yuhui' >> /etc/ansible/hosts
    # 指定主机名
    ansible yuhui -m shell -a 'date'
    

    指定组名:组名指的是ansible目录下hosts文件的组名

    # 例
    ansible centos6 -m shell -a 'date'
    

    ansible中正则匹配详解

    匹配所有的主机:all

    ansible all -a 'hostname'
    

    匹配规则性主机或主机名

    # 匹配后缀是 yk 的主机组
    ansible *yk -a 'uptime'
    

    匹配规则性主机或主机名

    匹配多个组的主机,中间用 : 隔开(或操作),可匹配多个主机组,格式 group_name:group_name:group_name...

    # 匹配 mysql 和 centos6 2个主机组
    ansible mysql:centos6 -a 'uptime'
    # 匹配 mysql、centos6、gzyk 3个主机组
    ansible mysql:centos6:gzyk -a 'uptime'
    

    在某个组而不在其他组(非操作)

    # 匹配在 my_vm 组但不在 centos6 组的主机,注意匹配范围是用 单引号'' 包含,双引号会报错
    ansible 'my_vm:!centos6' -a 'hostname'
    

    在某个组而不在其他组

    匹配两个组的交集(与操作)

    # 匹配 my_vm 和 centos6 共有的主机
    ansible 'my_vm:&centos6' -a 'hostname'
    

    匹配两个组的交集

    匹配一个组的特定主机

    # 匹配 my_vm 组内的第二和第三个主机,应用了python的切片
    ansible my_vm[1:2] -a 'date'
    

    匹配一个组的特定主机

    混合匹配

    # 匹配 my_vm 和 yuhui组但不包含 centos6 组的主机
    ansible 'my_vm:yuhui:!centos6' -a 'date'
    

    混合匹配

    匹配关键字开头:~

    # 匹配 192.168.1.21 开头的主机
    ansible '~192.168.1.21*' -a 'hostname'
    

    匹配关键字开头

    指定执行 --limit 用法,ansible和ansible-playbook都支持

    # 指定 my_vm 组里面的 192.168.1.216 执行
    ansible my_vm -a 'hostname' --limit=192.168.1.216
    # 用limit指定my_vm组里面的192.168.1.21前缀主机
    ansible my_vm -a 'hostname' --limit=192.168.1.21*
    ansible my_vm -a 'hostname' --limit=~192.168.1.21*
    

    limit限制匹配

  • 相关阅读:
    自学数据分析书单2
    自学的数据分析书单
    @RequestBody, @ResponseBody 注解详解(转)
    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解(转)
    @RequestMapping 用法详解之地址映射(转)
    关于java属性字段命名
    jQuery对象和DOM对象使用说明
    UAP开发错误之The given System.Uri cannot be converted into a Windows.Foundation.Uri(windows phone背景更换)
    Windows Azure之Mobile Service
    .NET重思(二)接口和抽象类的取舍
  • 原文地址:https://www.cnblogs.com/AutoSmart/p/10272532.html
Copyright © 2011-2022 走看看