Ansible(一)介绍、安装、基本配置

Ansible介绍

Ansible是一个轻量级的自动化管理工具,它不需要在客户端安装代理,通过OpenSSH或者WinRM连接到被管理主机并运行任务。

Ansible安装

只需要在控制节点主机上配置epel源,然后执行yum install ansible安装即可。在被管理主机上不需要执行任何操作。
建议控制节点和被管理主机的python版本一致

Ansible配置文件

Ansible安装完成后,会默认生成/etc/ansible/ansible.cfg配置文件。我们也可以使用其他的配置文件

查看当前使用的配置文件

[root@localhost ~]# ansible --version |grep cfg
  config file = /etc/ansible/ansible.cfg

设置其他配置文件

Ansible只会使用它检索到的第一个配置文件中的配置。
除了默认的配置文件,我们还可以用其他位置的配置文件,优先级由高到低的顺序如下:

# 通过环境变量指定的配置文件优先级最高
ANSIBLE_CONFIG 
# 其次是当前目录下的ansible.cfg文件
./ansible.cfg
# 再次是用户家目录下的.ansible.cfg文件
~/.ansible_cfg
# 默认的配置文件优先级最低
/etc/ansible/ansible.cfg

建议在要运行Ansible命令的目录中创建ansible.cfg文件,并将其他相关的文件都放在同一目录下。

配置文件内容

Ansible的配置文件是以sector作为划分的。每个方括号表示一个sector

常用选项

# 基本配置
[defaults] 
# 该配置文件默认使用的inventory文件
inventory = /etc/ansible/hosts
# 该配置文件使用root用户进行ssh连接
remote_user = root
# 使用root用户进行ssh连接时不提示输入密码
ask_pass = false

# 权限提升相关配置
[privilege_escalation] 
# 如果remote_user使用root用户,就不需要配置提权部分。
# 如果remote_user不是root,但不需要做特权操作,也不需要配置
# 权限实际是否提升取决于被管理主机是否配置了sudoers文件

# 需要提权
become = true
# 提权的方式
become_method = sudo
# 提权到root用户
become_user = root
# 进行sudo操作的时候不需要输入密码
become_ask_pass = false

Ansible inventory文件

inventory文件就是记录哪些主机可以被Ansible控制
inventory文件可以分为静态文件和动态文件两种

静态inventory文件

静态inventory文件就是一个文本文件,里面记录了被管理主机的ip或者host
可以将多个主机放在一个主机组中,便于批量管理。也可以将多个主机组放入到一个大组中。
可以使用[]符号指定多个主机

# 主机示例
# 使用IP地址  
192.169.1.100
# 使用主机名
servera

# 主机组示例 
# group1中包含server1和server2
[group1]
server1
server2
# group2中包含server3和server4
[group2]
server[3:4]
# group3中包含group1和group2里面的所有主机
# 使用:children来代表下面定义的是主机组
[group3:children]
group1
group2

特殊组

除了在inventory文件中定义的组以外,Ansible还有两个特殊的组

  • all 表示inventory中的所有被管理主机主机
  • ungrouped 表示不属于任何主机组的被管理主机

动态inventory文件

动态inventory文件实际上就是一个脚本,可以用来从其他位置获取被管理主机的信息。
脚本可以使用任何语言进行编写,返回的值需要是JSON格式

使用动态inventory文件

ansible -i inventory.py all --list-hosts
注意动态inventory文件需要具有执行权限

使用JSON格式查看inventory文件

ansible-inventory -i inventory --list

静态Inventory文件和JSON格式对照及说明

# 静态inventory文件
[root@localhost ~]#  cat inventory
server1

[group1]
server2 user=root
server3

[group2]
server[4:6]

[group3:children]
group1
group2

[group2:vars]
user=devops
password=123

# 对应的JSON格式文件
[root@localhost ~]#  ansible-inventory -i inventory --list
## 整个JSON是一个Python中的字典,该字典中的key值包括以下两种
## 1. `_mata` 记录了所有主机和主机的变量
## 2. `主机组名` 记录了组中的主机列表或子组列表
{
   ## _mata的值是一个字典,其中包括一个hostvars的key,对应的value是一个记录主机名和相关变量的字典
    "_meta": {
        "hostvars": {
            # hostvars的值,是以主机名为key的字典,如果主机名没有变量,对应的value值是个空字典,如果主机名有对应的变量,对应的value值是一个key=变量名,value=变量值的字典
           # 注意主机组变量在这里会记录到组中的所有主机中
            "server1": {},
            "server2": {
                "user": "root"
            },
            "server3": {},
            "server4": {
                "password": 123,
                "user": "devops"
            },
            "server5": {
                "password": 123,
                "user": "devops"
            },
            "server6": {
                "password": 123,
                "user": "devops"
            }
        }
    },

  ## 主机组名作为key的value值也是字典,该字典的key-value可能有以下几种
  ## key=children  value=子主机组的列表
  ## key=hosts value=组中主机的列表
  ## key=vars  value=对应变量的字典
    "all": {
        "children": [
            "group3",
            "ungrouped"
        ]
    },
    "group1": {
        "hosts": [
            "server2",
            "server3"
        ]
    },
    "group2": {
        "hosts": [
            "server4",
            "server5",
            "server6"
        ]
    },
    "group3": {
        "children": [
            "group1",
            "group2"
        ]
    },
    "ungrouped": {
        "hosts": [
            "server1"
        ]
    }
}

查看inventory中定义的主机

ansible -i inventory group1 --list-hosts

猜你喜欢

转载自blog.51cto.com/13540167/2605638