ansible中的基础中的基础用法
在一些企业中,作为运维通常会批量管理成千上百个机器,那今天我们来说一下在一些中小型企业中批量管理几十台机器的工具ansible
ansible的rpm包安装的来源是epel源,当然有写基础的也可以源码破译安装。
yum install ansible
一条小命令。
一些关于ansible的选项
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写 --list
-k, --ask-pass 提示输入ssh连接密码,默认Key验证
-K, --ask-become-pass 提示输入sudo时的口令
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-b, --become 代替旧版的sudo 切换
--become-user=USERNAME 指定sudo的runas用户,默认为root
ansible --version
可以查看一下安装版本之类的详细信息。主要就是确认安装。
接下来就是编辑ansible管理的主机清单了。所有被管理的机器都是存放在/etc/ansible/hosts
这个目录里面,在下面找个不碍事的地方把需要被管理主机IP分组键入即可。例如
[an***vs]
192.168.37.103
192.168.37.23
[appsrvs]
192.168.37.3
但是被管理的机器不可能密码都是一样的 ,而且ansible批量管理的时候只给我们一次输入密码的机会,如果没有被管理的机器的密码也是不会登录对方进行管理的,所以我们就需要基于key登录了。
ssh-keygen
一条小命令
ssh-copy-id IP
就可以把自己的公钥发送给对方ip了。可以使用ssh IP
测试一些远程连接对方是否还需要密码哟,完成这步以后再次远程连接或者管理的时候就不需要对方的密码了。
根据个人需要可以先设置一下自己的偏好,我还是习惯先把默认的模块command换成shell,就是vim /etc/ansible/ansible.cfg
目录下 找到一个叫做“module_name
”把前面的#注释去掉 “module_name = shell
”就行了,因为command不能识别一些特殊符号,shell模块是通吃的。回了这个其实ansible基本上学会了都,但是虽然够用但是不够专业!!!
执行结果状态其中绿色表示执行成功并且不需要做更改的操作;×××表示执行成功并且对目标主机做出变更;我们最不愿意见到的红色表示执行失败;
那让我们来执行一条命令来试试它的格式吧。
ansible all -a 'ls /data'
其中的all表示的所有被管理的机器,包括所有分组里面的。因为用的是shell模块而刚才我们也把shell模块设为默认模块了,所以我们不用写-m shell
(需要注意的是如果使用其它模块的户需要写-m
加其它模块的,稍后我们会介绍)-a
表示的是正常我们linux中的命令。
Script:在远程主机上运行ansible服务器上的脚本
ansible all -m script -a '/root/test.sh'
就是执行test.sh这个脚本。
Copy:从主控端复制文件到远程主机
ansible all -m copy -a 'src=/data/f1 dest=/data/ owner=root mode=600 backup=yes'
其中src就是主控机的文件源 dest的放在被控机器的位置owner是更改文件所有者,mode是更改文件权限,因为如果有目标存在默认是覆盖的 ,所以backup是对目标文件进行备份的。
Fetch:从远程主机提取文件至主控端,copy相反,目前不支持目录
ansible all -m fetch -a 'src=/data/f1 dest=/data/
是把被控机器的/data/f1文件抓取到主控机的/data/下。(目前仅支持抓取文件不支持文件夹哟)
File:设置文件属性
ansible all -m file -a ' src=/data/f1 dest=/data/fi-link state=link' | ansible all -m file -a 'path= /data/f1 owner=root mode=600'
其中最基础的就是更改文件的权限和所有者,另外file还可以给文件蛇者软连接,state就是需要更更的状态。
unarchive:解包解压缩,有两种用法:
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=n
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程
主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
ansible all -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'
这个例子就是在被控主机找到压缩包https://example.com/example.zip并且解压到/data/目录下。
Yum:管理包
ansible srv -m yum -a ‘name=httpd state=present’
安装
ansible srv -m yum -a ‘name=httpd state=absent’
删除
Cron:计划任务
支持时间:minute,hour,day,month,weekday
ansibleall -m cron -a "minute=*/5 job=
/usr/sbin/ntodate172.16.0.1&> /dev/null' name=Synctime" 就是创建任务,每5分钟把垃圾日志扔到垃圾箱。
ansible all -m cron -a 'state=absent name=Synctime'
就是把刚才建立的那个任务删除。
Service:管理服务
ansible all -m service -a 'name=httpd state=started enabled=yes'
就是把httpd这个服务打开并且设置开机启动。
ansible all -m service -a 'name=httpd state=stopped'
就是把HTTP的这个服务关闭。
User:管理用户
ansible all -m user -a 'name=user system=yes home=/data/user'
就是创建系统用户user 并且家目录在/data/下。
ansible all -m user -a 'name=user state-absent remove=yes'
就是删除用户user并且连着家目录一起删除。
Group:管理组
ansible all -m group -a 'name=testgroup syste=yes'
就是创建系统组
ansible all -m group -a 'name=testgroup state=absent'
就是删除组testgroup
差不多模块就是这些,如果把这些掌握基本上可以ansible用到淋漓尽致了,当然也不是那么尽致······ 应付一般的工作肯定每问题了。