ansible

作者: 秋幻旎苏 | 来源:发表于2017-08-12 13:33 被阅读0次

    一.ansible 相关组建介绍

    1.Ansible Inventory(主机清单)

    机器的信息都存放在ansible的Inventory 组件里面。在我们工作中配置部署针对的主机必须先存放在Inventory 里面,这样才能使用Ansible对服务器进行操作。默认Ansible的Inventory是一个静态 的INI格式的文件/etc/ansible/hosts。还可以在运行ansible命令的时候用-i 参数临时指定 Inventory的配置文件或者通过ANSIBLE_HOSTS环境变量指定。

    1.1.定义主机和主机组

    /etc/ansbile/hosts

    192.168.1.10    ansible_ssh_pass='123456'
    192.168.1.11    ansible_ssh_pass='123456'
    [zookeeper]
    192.168.1.2[1:3]
    [zookeeper:var]
    ansible_ssh_pass='123456'
    [ansible:children]
    zookeeper
    

    第1、2行定义了主机192.168.1.10和192.168.1.11,然后使用Inventory 内置参数ansible_ssh_pass定义了SSH登陆密码。
    第3行定义了一个组叫zookeeper
    第4行定义了zookeeper组下面三台主机192.168.1.21,192.168.1.22,192.168.1.23
    第5行到第6行定义针对zookeeper组的ssh登陆密码。
    第7行到第8行定义了一组ansible,下面包含zookeeper组

    通过ping模块我们可以测试到该组是否可以通过ansible 连接

    [root@zabbix ansible]# ansible zookeeper -m ping 
    192.168.1.21 | SUCCESS => {
        "changed": false, 
        "failed": false, 
        "ping": "pong"
    }
    192.168.1.22 | SUCCESS => {
        "changed": false, 
        "failed": false, 
        "ping": "pong"
    }
    192.168.1.23 | SUCCESS => {
        "changed": false, 
        "failed": false, 
        "ping": "pong"
    }
    

    1.2.多个Inventory列表

    我们可以通过修改ansible.cfg 中inventory 参数指定inventory 为一个目录,默认为(inventory = /etc/ansible/host)
    /etc/ansible/ansible.cfg 修改
    inventory = /etc/ansible/inventory

    [root@zabbix ansible]# mkdir inventory
    [root@zabbix ansible]# tree inventory/
    inventory/
    ├── redis
    └── zookeeper
    [root@zabbix inventory]# cat redis 
    [redis]
    192.168.239.129 
    192.168.239.130 
    192.168.239.131 
    

    1.3.动态Inventory

    在实际应用部署中会有大量的主机列表。如果手动维护这些列表将是一个非常繁琐的事情。其实Ansible还支持动态的Inventory里面的主机列表和变量信息都支持从外部拉取。比如我们可以从CMBD系统和zabbix监控系统拉取所有主机信息,然后使用ansible 进行管理 。
    将ansible.cfg 中inventory 参数指定为一个可执行的脚本。这个脚本的内容不受任何编程语言限制,但是这个脚本使用参数的时候有一定的规范并且对脚本执行的结果也有要求。这个脚本需要支持两个参数:
    *--list 或者-l ,这个参数运行后显示所有的主机以及主机组的信息(json格式)
    *--host 或者-H,这个参数后面需要指定一个host,运行结果会返回这台主机的所有信息(包括认证信息,主机变量等),也是json 格式。

    1.4.Inventory 内置参数

    ansible_ssh_host  定义hosts ssh 地址
    ansible_ssh_port  定义hosts ssh 端口
    ansible_ssh_user 定义hosts ssh 用户
    ansible_ssh_pass  定义hosts ssh 认证密码
    ansible_sudo  定义hosts sudo 用户
    ansible_sudo_pass  定义hosts sudo 密码
    ansible_sudo_exe  定义hosts sudo 路径
    ansible_connection  定义hosts连接方式
    ansible_ssh_private_key_file  定义hosts私钥
    ansible_shell_type  定义hosts shell 类型
    ansible_python_interpreter  定义hosts任务执行python 路径
    

    2.Ansible Ad-Hoc 命令

    2.1.执行命令

    shell 模块
    ansible 默认执行shell
    ansible hosts -a "command" = ansible hosts -m shell -a "command"

    2.2.复制文件

    copy 模块
    ansible hosts -m copy -a 'src=path dest=path owner=root group=root mode=644 backup=yes'
    backup=yes备份远程节点上的原始文件,在拷贝之前。如果发生什么意外,原始文件还能使用。

    2.3.包和服务管理

    yum 模块
    service 模块
    Ansible 还支持直接使用Ad-Hoc命令来管理包和服务,如下所示:
    ansible hosts -m yum -a 'name=httpd state=latest'
    ansible hosts -m service -a 'name=httpd state=started'

    2.4.用户管理

    user模块
    首先通过openssl 命令来生成一个密码,因为ansible user 的 password 参数需要接受加密后的值,如下所示:

    [root@zabbix inventory]# echo  ansible  |openssl passwd -1 -stdin
    $1$zWZPPBQu$uBau9cVX2ltqAyvNkCeAd1
    

    使用user模块批量新建用户:
    ansible hosts -m user -a 'name=test,password="$1$zWZPPBQu$uBau9cVX2ltqAyvNkCeAd1"
    关于ansible 的其他Ad-Hoc模块或者模块用法,可以通过ansible-doc -l 和ansible-doc 模块名进行查看。

    3.ansible playbook

    playbook 是ansible 进行配置管理的组件,虽然ansible的日常Ad-Hoc命令功能很强大,能完成一些基本配置管理工作,但是Ad-Hoc命令无法支撑复杂环境的配置管理工作。在我们实际使用ansible的工作中,大部分时间都是在编写playbook,这是ansible非常重要的组件之一。

    4.ansible facts

    facts组件是ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个json格式的数据结构中,ansible_facts 是最上层的值。下面我们通过实际操作来简单了解facts的数据结构:
    ansible hosts -m setup
    facts 组件默认已经收集了很多的设备基础信息,这些信息可以在做配置管理的时候进行引用。

    5.Ansible role

    用role的方式管理playbook ,用来维护playbook 。

    [root@zabbix ansible]# ls
    ansible.cfg  hosts  install_zabbix_agent.retry  install_zabbix_agent.yaml  roles
    [root@zabbix ansible]# tree roles/
    roles/
    └── install_zabbix_agent
        ├── files
        │   └── zabbix-3.2.6.tar.gz
        ├── tasks
        │   └── main.yaml
        ├── templates
        │   ├── zabbix_agentd
        │   └── zabbix_agentd.conf
        └── vars
            └── main.yaml
    
    

    6.Ansible Galaxy

    Ansible 的Galaxy 是ansible 官方一个分享role的功能平台,它的网址是https://galaxy.ansible.com/list#/roles 。可以把你编写的role通过ansible-galaxy 上传到Galaxy网站供其他人下载和使用。可以通过ansible-galaxy 命令很简单地实现role的分享和安装。当然Ansible 也支持从GitHub上下载role。在我们使用ansible-galaxy命令下载role的时候需要了解role的运行平台和Ansible依赖版本以及相关依赖。日常工作中我们使用ansible-galaxy install 就可以,默认会安装到/etc/ansible/roles目录下。

    二.centos6 安装ansible

    1.环境

    python 2.6以上
    paramiko 模块
    PyYAML
    Jinja2
    httplib2
    

    下载安装包

    ansible下载地址:http://releases.ansible.com/ansible/
    python 安装 http://www.jianshu.com/p/9cb04a70fade

    [root@jumpserver ~]# python --version
    Python 2.7.13
    [root@jumpserver software]# wget http://releases.ansible.com/ansible/ansible-2.3.1.0.tar.gz
    [root@jumpserver software]# tar -xf ansible-2.3.1.0.tar.gz 
    
    ##修改pip源
    [root@jumpserver software]# cat /root/.pip/pip.conf 
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    
    [install]
    trusted-host=mirrors.aliyun.com
    
    [root@jumpserver software]# pip install pycrypto==2.6
    [root@jumpserver software]# pip install paramiko
    [root@jumpserver software]# pip install Jinja2
    [root@jumpserver software]# pip install httplib2
    [root@jumpserver software]# pip install PyYAML
    
    [root@jumpserver software]# cd ansible-2.3.1.0
    [root@jumpserver ansible-2.3.1.0]# python setup.py  install
    [root@jumpserver ansible-2.3.1.0]# mkdir /etc/ansible
    [root@jumpserver ansible-2.3.1.0]# cd examples/
    [root@jumpserver examples]# ls
    ansible.cfg  hosts
    [root@jumpserver examples]# cp ./* /etc/ansible/
    [root@jumpserver examples]# whereis ansible
    ansible: /etc/ansible /usr/local/bin/ansible
    
    

    ansible 安装成功

    三.相关网站

    1.http://www.cnblogs.com/wsl222000/p/5724938.html
    2.http://blog.csdn.net/hu_wen/article/details/56675735
    3.https://github.com/hello-wn/ansible_zabbix
    4.http://blog.csdn.net/wn_hello/article/details/52237755
    5.http://www.cnblogs.com/yue-hong/p/6755709.html
    6.http://www.jianshu.com/p/15b154c4b8cb
    7.https://github.com/kuailemy123/Ansible-roles
    8.http://blog.csdn.net/williamfan21c/article/details/53439307
    

    相关文章

      网友评论

          本文标题:ansible

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