2-ansible基础元素介绍

ansible
ansible基础元素介绍

ansible配置文件解析

/etc/ansible:配置文件目录,Inventory主机配置清单,日常运维的所有的配置类操作也是基于此目录进行。ansible不是一种服务所以在修改配置文件后不需要进行重启等操作。
ansible自身的配置文件/etc/ansible/ansible.cfg,文件遵循INI风格。
ansible.cfg配置文件可以有多个,读取顺序是当前命令执行目录ansible.cfg–>用户家目录ansible.cfg–>/etc/ansible/ansible.cfg

  1. [defaults]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #inventory      = /etc/ansible/hosts                    #主机配置清单位置
    #library = /usr/share/my_modules/ #库文件路径
    #module_utils = /usr/share/my_module_utils/ #
    #remote_tmp = ~/.ansible/tmp #远程主机存放临时文件目录
    #local_tmp = ~/.ansible/tmp #本机存放临时文件目录
    #plugin_filters_cfg = /etc/ansible/plugin_filters.yml
    #forks = 5 #同时操作多台主机时的并发数
    #poll_interval = 15
    #sudo_user = root #默认sudo用户
    #ask_sudo_pass = True
    #ask_pass = True
    #transport = smart
    #remote_port = 22
    #module_lang = C
    #module_set_locale = False
    #gathering = implicit
    #gather_subset = all
    # gather_timeout = 10
    # inject_facts_as_vars = True
    host_key_checking = False #首次连接是否需要key认证,建议将注释去掉,并设置为False
    log_path = /var/log/ansible.log #ansible执行日志存放目录

    多数保持默认即可。

  2. [privilege_escalation]

    1
    2
    3
    4
    #become=True            #是否sudo
    #become_method=sudo #sudo方式
    #become_user=root #sudo后的用户
    #become_ask_pass=False #sudo后是否验证密码
  3. [ssh_connection]

    1
    #pipelining = false     #管道加速功能,要配合requiretty进行使用
  4. [accelerate]

    1
    2
    3
    4
    5
    #accelerate_port = 5099             #加速连接端口
    #accelerate_timeout = 30 #命令执行超时时间
    #accelerate_connect_timeout = 5.0 #连接超时时间
    #accelerate_daemon_timeout = 30 #上一个活动连接的时间,单位分钟
    #accelerate_multi_key = yes

除了修改host_key_checking = False以及可能修改[accelerate]其他配置保持默认即可,还有其他类的配置但是基本都是使用默认配置

ansible相关命令

ansible

临时性操作、非固化需求。

1
ansible <host-pattern> [options]
  • <host-pattern>:配置清单中的ip、主机别名、组等
  • [options]:
    –version :显示版本以ansible的一些基础信息
    -m NAME :指定使用的模块
    -u USERNAME :指定远程主机以指定用户运行命令
    -b :使远程主机以sudo方式执行命令
    -v :详细过程 -vv -vvv更为详细
    -k :提示输入ssh连接密码
    -K :提示输入sudo时的口令
    -i :使用指定的Inventory配置文件(默认使用/etc/ansible/hosts)
    返回结果有三种颜色:红色(执行异常)、绿色(执行成功,但执行执行目标没有变化)、橘黄色(执行成功,但是执行目标有变化)。
    例如:使用ansible远程修改一个文件,返回绿色说明命令执行成功,但是文件没有变化,也就是说原文件中的内容就是要修改后的样子,不需要进行修改;返回值橘黄色说明命令执行成功,且将文件按照要求进行修改了。

ansible-galaxy

可以简单的理解为github或者pip功能,可以使用该命令从galaxy.ansible.com下载Roles(一堆playbook的集合),默认存放在/etc/ansible/roles

1
ansible-galaxy [ init | info | install | list | remove] [--help] [options] ROLE_NAME
  • [init | info | install | list | remove ]

init :初始化本地roles
info :列出指定roles的信息
install :安装指定roles到本地
list :列出已经安装的roles
remove :删除本地的roles

  • [–help]
    类似的ansible-galaxy init --help 查看ansible-galaxy init相关使用方式。
  • [options]
    根据ansible-galaxy xxx使用执行的选项

ansible-doc

ansible模块文档说明。
ansible-doc -l :列出支持的模块
ansible-doc MODULE_NAME:显示模块用法说明
ansible-doc -v MODULE_NAME:显示模块版本号

ansible-playbook

日常应用中使用最多的命令,通过预先编写YML格式的playbook文件实现批量管理,playbook文件可以理解为是按照一定条件组成的ansible的任务集。
ansible-playbook xxx.yml

ansible-vault

主要用于配置文件的加密,例如playbook文件中包含敏感信息,可以使用ansible-vault。

1
ansible-vault [create|decrypt|edit|view|encrypt|encrypt_string|rekey] [--help] [options]
  • [ create | decrypt | edit | view | encrypt | encrypt_string | rekey]

create #创建新的加密文件
decrypt #解密加密文件
edit #编辑加密文件
view #查看加密文件
encrypt #加密YAML文件
encrypt_string #加密字符串
rekey #为加密文件重新设置加密

ansible-console(先了解)

交互式工具,用户可以在ansible-console虚拟出来的终端中执行各种内置命令。

Inventory配置清单

默认配置文件/etc/ansible/hosts,该配置文件遵循INI、yaml、json,在/etc/ansible/hosts尾部直接添加主机即可,建议在配置受控端时,先配置好控制端到受控端的免密
在使用时可以将多个主机文件一并传递ansible-play xxx.yml -i Inventory1 -i Inventory2
可以将多个主机文件放在同一个目录下,当多个单个文件太长时,并不容易维护,可以将其进行分类,分别保存到不同的文件中,在同一个目录中进行保存,注意:在目录的多个文件中有父组关系时,必须先加载定义子组的文件。默认是按照ASCII顺序进行加载,尽量对多个文件进行编号来控制加载顺序。

1
2
3
4
5
6
7
inventory_hosts]# ll
总用量 12
-rw-r--r-- 1 root root 10 8月 16 14:51 01-cloud
-rw-r--r-- 1 root root 10 8月 16 14:51 02-web
-rw-r--r-- 1 root root 10 8月 16 14:51 03-database

ansible-playbook playbook.yaml -i inventory_hosts/ #执行时可以将整个文件夹作为参数传递

定义主机和组

  • 可以直接是IP
    1
    192.168.27.7

使用方式: ansible 192.168.27.7 -m ping

  • 可以是hostname
    1
    test3:22
    冒号后的数字表示端口号,默认22端口,此方式需要在/etc/hosts中进行配置,例如:添加192.168.27.7 test3

使用方式: ansible test3 -m ping

  • 分组
    1
    2
    3
    [testserver]
    192.168.27.[5:7]
    test[a:c]
    [testserver]表示一个叫testserver分组的开始,其分组成员包括192.168.27.5、192.168.27.6、192.168.27.7、testa、testb、testc。[5:9:2]则表示5、7、9。

使用方式: ansible testserver -m ping 会同时操作testserver组下的所有成员机器

定义组变量

类似于主机变量

1
2
3
4
5
6
7
[test]
test1
test2
test3

[test:vars] #[组名:vars]
http_prot=808

这样就给test组所有的主机定义了http_prot=808变量

子组

1
2
3
4
5
6
7
8
9
10
11
12
[test]
test1
test2
test3

[nginx]
nginx1
nginx2

[hostname:children] #[组名:children]
test
nginx

这样hostname这个组就相当于test组和nginx组的集合,这个组实际有5个成员。
子组的变量将具有更高的优先级,将会覆盖父组的变量;合并变量,ansible将按照ASCII顺序合并同一级别的组,a组与b组合并变量,a组则相当于父组。all是所有组的父组

其他参数

1
test1 ansible_host=192.168.163.171 ansible_port=22 ansible_user=root ansible_password=123456

ansible_host:指定test1的IP
ansible_port:指定ssh的端口
ansible_user:指定ssh远程的用户名
ansible_password:指定ssh用户的密码【不推荐使用这种明文密码的方式,推荐使用公私秘钥认证的方式】

逻辑运算与正则

  • all
    ansible all -m ping 检测使用的主机配置清单中所有的主机
    ansible 192.168.27.* -m ping 检测192.168.27网段的主机
  • 逻辑或
    ansible "test:nginx" -m ping 检测test和nginx组(或者是主机)的情况,合集
  • 逻辑非
    ansible "test:!nginx" -m ping 检测在test组但不在nginx组的主机,非
  • 逻辑与
    ansible "test:&nginx" -m ping 检测同时在test组和nginx组的主机,交集
  • 域切割
    可以理解为组的切片
    1
    2
    3
    4
    [test]
    nginx
    zabbix
    web
    ansible test[2] -m ping等同于ansible web -m ping
  • 正则匹配
    ansible ~正则表达式 -m -ping ~表示开启正则匹配功能。