美文网首页
Ansible(一)介绍、安装、基本配置

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

作者: 月饮沙 | 来源:发表于2021-01-03 19:21 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Ansible(一)介绍、安装、基本配置

          本文链接:https://www.haomeiwen.com/subject/pjcpoktx.html