Ansible教程(2)Ansible Ad-Hoc命令行与常用模块
一、Ansible Ad-Hoc简介
Ad-Hoc是一种通过ansible独有的命令行让Ansible进行工作的方式
1、ansible命令行语法格式
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
<host-pattern>:指定生效的主机组,可以使用主机列表中的地址或者组名,all代表所有主机,也支持逻辑与、或以及正则表达式
[-f forks]:并发数,可以理解为ansible一次性要让多少个主机执行任务,配置文件中默认为5
[-m module_name]:使用的模块名
[-a args]:每个模块特有的参数,可以用ansible-doc -s 模块名来查看模块对应参数
-b:老版本中的sudo指令,将在远端主机切换到root执行操作,这个root用户是在ansible配置中定义的
-K:sudo时需要输入的密码
2、ansible命令行示例
ansible 192.168.1.100 -m ping #指定某台主机 ansible all -m ping #指定所有主机 ansible 192.168.1.100:192.168.1.50 -m ping #一次指定多台主机 ansible all:\!192.168.1.100 -m ping #排除某台主机 ansible web -m ping -u dba -k #使用dba用户对web组进行操作 ansible web -m command -a 'cat /etc/passwd' -u dba -k -b -K #使用dba用户连接web组,然后sudo到root用户查看passwd文件
二、Ansible常用模块介绍
command模块:默认模块。让远端主机执行指定的命令,但不支持管道或者重定向。
ansible 192.168.44.130 -a 'date'
cron模块:设置定时任务,其中有个state选项包含present、absent两个参数,分别代表增加和移除
ansible webserver -m cron -a 'minute="*/10" job="/bin/echo test" name="test cron job" ' ansible webserver -m cron -a 'hour="*/1" job="/usr/sbin/ntpdate 10.254.1.10" name="crontab from ansible" state=present'
user模块:管理用户,还有一个group模块用于管理组
ansible webserver -m user -a "name=mysql system=yes"
file模块:设置文件的属性,如所属主、文件权限等
ansible all -m file -a 'owner=mysql group=mysql mode=644 path=/tmp/test' ansible all -m file -a 'path=/etc/passwd.link src=/etc/passwd state=link' # path:指定要设置的文件所在路径,可使用name或dest替换 # state:指明文件的格式,touch=创建新的文件;absent=删除文件,link=创建软连接文件;directory=创建目录。创建文件的软连接时src指明源文件,path指明连接文件路径
ping模块:测试远端主机是否能连接
ansible all -m ping
service模块:控制服务运行状态
ansible webserver -m service -a 'enabled=true name=httpd state=started' # enabled:是否开机自动启动,取值为true或者false # name:服务名称 # state:状态,取值有started,stopped,restarted
shell模块:和command模块一样是用来运行命令,当命令中有变量或者管道符的时候要用shell模块,特殊符号需要转义,比如\$
ansible all -m shell -a "echo test | passwd --stdin user1"
script模块:将本地的脚本复制到远端主机并执行,需要把脚本放在当前目录中并使用相对路径来指定
ansible all -m script -a 'test.sh'
yum模块:安装程序包,远端主机需要先配置好正确的yum源
ansible -m yum -a 'name=httpd state=present' # name:指明要安装的程序包,可以带版本号,否则默认最新版本,多个安装包用逗号分隔 # tate:present代表安装,也是默认操作;absent是卸载;latest最新版本安装
setup模块:收集被管理主机的信息,包含系统版本、IP地址、CPU核心数。在Ansible高级操作中可以通过该模块先收集信息,然后根据不同主机的不同信息做响应操作,类似Zabbix中的低级别发现自动获取磁盘信息一样
copy模块:实现文件复制,但是使用该模块进行文件复制时不会引用变量的值,如果使用了变量,需要替换为template模块(该模块只能通过playbook方式运行)
ansible all -m copy -a 'src=/etc/fstab dest=/etc/fstab owner=root mode=640' ansible all -m copy -a 'content="hello world" dest=/etc/fstab owner=root mode=640 backup=yes' # src=:定义本地源文件的路径 # dset=:定义目标文件路径 # content=:用该选项直接生成内容,替代src # backup=:如果目标路径存在同名文件,将自动备份该文件
sysctl模块:实现内核参数修改
ansible all -m sysctl -a 'name=vm.swappiness value=1 state=present'
三、查看Ansible模块帮助信息
1、通过ansible-doc -l命令可以显示当前版本所支持的模块信息
2、通过ansible-doc -s modulename显示指定模块的详细用法
ansible-doc -s yum
评论