ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。无客户端。
我要讲一些Ansible的安装和一些基本概念,然后我们会开始研究一些真正有意思的东西 – playbook,配置管理,部署以及语法编排.我将会写出如何使用/usr/bin/ansible执行ad-hoc并行命令,还会列出ansible的核心有什么样的模块可供使用.当然以后你也可以写你自己的模块。
ansible安装需要有epel源。如果您没有安装epel源可以执行我下面的安装命令,该命令是从阿里源镜像安装的epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install ansible #安装ansible
在安装部署这里可以vim /etc/hosts ,把客户机的域名写上去。
给所有客户机设置免密码ssh-key的方式。这样后面进行测试的时候会方便很多。
ssh-keygen #生成秘钥
ssh-copy-id 192.168.133.160 #把秘钥发送给ip为192.168.133.160的主机
1.定义一下主机清单,vim /etc/ansible/hosts,在这里写上客户机的IP
2.测试连通性 ansible localhost -m ping -m 指定模块。什么功能
3.简洁输出 ansible host1 -m ping -o
4.know_hosts ansible host2 -m ping -u root -k 用户密码 -o 增加用户名选项,增加密码选项 注意:这里的host2主机域名是已经在主机清单中写过的。
1 增加主机组 vim /etc/ansible/hosts
[webserver] #webserver这是主机组名,下面的四个都是组成员
host1
host2
host3
host4
2 增加用户名 密码 vim /etc/ansible/hosts,如果已经做过了免密登录那就可以不做这一步。
[webserver]
host[1:4] ansible_ssh_user='root' ansible_ssh_pass='666666' #组成员host1到host4,这是个简便写法,user是root,pass是666666
3 组:变量 vim /etc/ansible/hosts
[webserver]
host[1:4]
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
常用变量
4 子分组
将不同的分组进行组合 vim /etc/ansible/hosts
[apache] #组1
host[1:2] #组1中的成员
[nginx] #组2
host[3:4] #组2中的成员
[webserver:children] #webserver组,children参数是子分组的意思
apache #子分组一
nginx #子分组二
[webserver:vars] #webserver的变量
ansible_ssh_user='root'
ansible_ssh_pass='666666'
5 自定义主机列表 vim hostlist
[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
ansible -i hostlist dockers -m ping -o
临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。
1.shell模块 调用帮助:ansible-doc shell
ansible webserver -m shell -a 'hostname' -o -f 2 #获取主机名,-f2指定线程数,一次并发执行的线程数
ansible host2 -m shell -a 'yum -y install httpd' -o #部署apache
2.复制模块 调用帮助:ansible-doc copy
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes' #src后面是原文件,dest后面是目标目录和修改后的文件名,owner用户,group用户组,mode权限,backup=yes备份,如果文件有多份,可以进行备份。
3.用户模块 调用帮助:ansible-doc user
ansible webserver -m user -a 'name=qianfeng state=present' #创建用户
ansible webserver -m user -a 'name=qianfeng state=absent' #删除用户
echo '777777' | openssl passwd -1 -stdin #生成加密密码
ansible webserver -m user -a 'name=qianfeng password="$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272."' #修改密码
ansible webserver -m user -a 'name=qianfeng shell=/sbin/nologin append=yes' #修改shell
4.软件包管理 调用帮助:ansible-doc yum
ansible host2 -m yum -a 'name="httpd" state=latest' #安装apache
ansible host2 -m yum -a 'name="httpd" state=absent' #卸载apache
5.服务模块 调用帮助:ansible-doc service
ansible host2 -m service -a 'name=httpd state=started' #启动apache
ansible host2 -m service -a 'name=httpd state=started enabled=yes' #apache开机自启
ansible host2 -m service -a 'name=httpd state=stopped' #关闭apache程序
ansible host2 -m service -a 'name=httpd state=restarted' #重启apache程序
ansible host2 -m service -a 'name=httpd state=started enabled=no' #开机禁止启动
6.文件模块 调用帮助:ansible-doc file
ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' #创建文件
ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory' #创建目录
还有其他很多参数,我这里就不一一列举了,可以通过上面的帮助逐一查看。
7.收集模块 调用帮助:ansible-doc
ansible host3 -m setup -a 'filter=ansible_all_ipv4_addresses' #查询IPv4地址
示例,编写一个剧本,完成web的部署,配置,启动的全过程。
vim apache.yaml
- hosts: host2 #针对host2主机做
tasks: #任务
- name: install apache packages #描述
yum: name=httpd state=present #安装httpd
- name: copy apache conf #描述
copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf #将本机的apache配置文件复制为 host2的配置文件。
notify: restart apache service #引用处理程序
- name: ensure apache is running #描述
service: name=httpd state=started enabled=yes #开启apache服务,设置为开机自启
handlers: #定义处理程序,如果没有被 notify,handlers 不会执行
- name restart apache service
service: name=httpd state=restarted