ansible是基于模块化的,通过调用特定的模块,完成特定的任务

基于Python语言实现,由Paramiko、PyYAML和Jinja2三个关键模块实现

部署简单,agentless(无需部署客户端,通过ssh协议管理各客户端)

基于主从模式

支持自定义模块 (其他编程语言写的模块,也可以经过ansible的接口调用)

支持Playbook  连续任务按先后顺序完成

支持幂等性:命令可重复运行

 

ansible的组成部分:

   ansible core:ansible自身核心模块

   host inventory:主机库,定义可管控的主机列表

   connection plugins:连接插件,默认基于ssh协议连接

   modules:core modules(自带模块或核心模块)、custom modules(自定义模块,用户可基于任何编程语言编写自定义模块)

配置文件:

   (1)ansible应用程序的主配置文件:/etc/ansible/ansible.cfg

   (2) Host Inventory定义管控主机:/etc/ansible/hosts   

 

安装: yum -y install epel-release  yum -y install ansible

 

命令的使用格式:ansible <host-pattern> [-m module_name] [-a args] [options]

 

vim /etc/ansible/hosts

 上面是自定义单个主机示例

 

 自定义单个组示例,中括号中的字符是组名,一个主机可以属于多个主

 

可以使用ansible -i /somefile     指明inventory host文件路径

 

自定义两个组

 

 

ansible-doc 命令查看相关帮助, ansible-doc -l  列出ansible支持哪些模块,ansible-doc -s  MODULE-NAME 查看模块支持哪些

参数

 

最简单的一条命令:ansible web1 -m ping,由于ssh不是基于密钥验证,此处会显示UNREACHABLE

先得在各主机上配置密钥验证,首先创建密钥对,命令很简单ssh-keygen,加三次回车

cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys    chmod 700 /root/.ssh/authorized_keys

scp -p authorized_keys id_rsa id_rsa.pub 192.168.238.170:/root/.ssh/   (通过scp将密钥发往各主机)

 

此时再来测试   ansible all -m ping    all表示所有主机

 

ansible常用模块介绍

ansible <host-pattern> [-m module_name] [-a args] [options]

args:是key=value格式

command:默认模块,可省略。在远程主机上进行操作命令,command不是key=value格式,后面直接跟命令

例如:ansible all -m command -a ’ifconfig'

注意:要用到管道类的命令,command无法执行

 

user:添加删除user命令

例如:ansible web1 -m user -a "name=apache state=present"    name指定用户名,present表示创建,absent表示删除

删除家目录,要使用remove=true,要创建系统用户添加system=true

 

cron 定义crontab中的条目的

例如:ansible all -m cron -a "minute='*/5' job='/usr/sbin/ntpdate 133.100.11.8 &> /dev/null' name='sync time'"

上面的name必须指定

删除: ansible all -m cron -a "name='sync time' state=absent", 另外的参数month=  day=  weekday= 

 

file  设置文件属性

例如:ansible web1 -m file -a "path=/tmp/dir state=directory"      创建dir目录

   ansible web1 -m file -a "path=/tmp/nihao owner=root state=touch"   创建一个nihao的空文件

 

yum   包管理器

例如: ansible web1 -m yum -a "name=httpd state=present"   安装httpd包

 

copy   完成文件复制

例如:ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=600'  src指定本地文件绝对路径,dest指定目标主机绝

对路径,mode指定文件权限

 

template   跟copy类似

 

service   启动关闭 各个服务

例如:ansible web1 -m service -a 'name=httpd state=started enabled=true'    启动http服务,enabled=true指定开机启动

 

shell   在shell环境中运行shell命令

例如:ansible all -m shell -a 'echo "0" | passwd --stdin root'

 

setup 获取远程主机上的主机属性信息

例如:ansible 192.168.238.170 -m setup 

 

script    指定本地一个脚本文件,传递到远程主机上执行一遍

vim /tmp/date.sh

例如:ansible all -m script -a '/tmp/date.sh'   在所有主机上执行脚本设定时区