1 引言
Ansible中文官网:https://ansible-tran.readthedocs.io/en/latest/docs/intro_installation.html
上面详细阐述了ansible的相关内容,是我的主要参考。
2 安装
2.1 安装之前
- Ansible默认通过 SSH 协议管理机器
- 若你希望使用Ansible的最新版本,并且你使用的操作系统是 Red Hat Enterprise Linux ™, CentOS, Fedora, Debian, Ubuntu,我们建议使用系统的软件包管理器
- 目前,只要管理机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.
- 管理机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本,等等.
- 被管理的机器也需要安装 Python 2.4 或以上的版本.如果版本低于 Python 2.5 ,还需要额外配置安装支持,详见官网【installation】
2.2 安装方式
2.2.1 源码安装
$ git clone git://github.com/ansible/ansible.git --recursive
$ cd ./ansible
$ source ./hacking/env-setup
#如果没有安装pip, 请先安装对应于你的Python版本的pip:
$ sudo easy_install pip
$ sudo pip install paramiko PyYAML Jinja2 httplib2 six
#注意,当更新ansible版本时,不只要更新git的源码树,也要更新git中指向Ansible自身模块的 “submodules” (不是同一种模块)
$ git pull --rebase
$ git submodule update --init --recursive
#一旦运行env-setup脚本,就意味着Ansible从源码中运行起来了.默认的inventory文件是 /etc/ansible/hosts.inventory文件也可以另行指定 (详见 Inventory文件) :
$ echo "127.0.0.1" > ~/ansible_hosts
$ export ANSIBLE_HOSTS=~/ansible_hosts
#测试一条ping命令:
$ ansible all -m ping --ask-pass
#也可以使用命令 “sudo make install”
2.2.2 yum安装
# install the epel-release RPM if needed on CentOS, RHEL, or Scientific Linux
$ yum install epel-release -y
$ sudo yum install ansible
2.2.3 配置ssh和hosts
- 配置免密登录
$ sudo ssh-keygen
$ sudo ssh-copy-id -i ~/.ssh/id_rsq.pub root@到被管理的主机ip
- 将被管理的主机添加到hosts中,或者在/etc/ansible/inventory/下面创建文件来添加被管理的主机。如何使用inventory后面再说,一般也推荐使用inventory管理主机
vim /etc/ansible/hosts
192.168.0.1
192.168.0.2
192.168.0.3
3 配置文件目录
-
目录结构示意图:
-
在使用ansible时,通常需要在/etc/ansible/下这样设计配置文件目录:
1)主yml文件就放置在/etc/ansible下,比如install_zabbix_agent.yml
2)/etc/ansible/roles/目录用来存放“角色”的配置文件,我们把具有特定功能的一组配置文件看作是一个“角色”。比如,安装zabbix agent这个功能可以作为一个角色,其配置文件均放置在roles/install_zabbix_agent/下,而上面的主yml文件install_zabbix_agent.yml会调用这个角色。这个不理解的话后面会有应用场景的例子。
3)/etc/ansible/vars/目录用来存储全局变量文件;
- 那么在/etc/ansible/roles/install_zabbix_agent/这个角色的目录下通常会设置以下几个目录
1)tasks:用于存放实现功能的main.yml脚本
2)templates:用于存放main.yml脚本将会用到的配置文件模版,配置文件模版放置在这里的好处就是可以直接使用template模块对文件进行copy操作而无需写绝对路径。
3)defaults:用于存放默认的处理流程,如统一重命名主机的hostname
4)files:用于存储需要用到的文件
5)vars:用于存储角色的变量文件
6)handlers:用于存储触发yml脚本
4 ansible命令执行方式
有两种:
- ad-hoc:主要用于临时命令的执行
- ansible-playbook:是ad-hoc命令的集合,通过一定的规划编排在一起,实现一个完整的功能。这也是我的常用方法。