Ansible常用Ad-Hoc命令介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible常用Ad-Hoc命令介绍相关的知识,希望对你有一定的参考价值。

在自动化运维的过程中,我们常常会通过命令行的形式使用Ansible模块,ansible自带了259各模块,我们可以通过一些命令来查看ansible中所含的模块,也可以查看单一模块的信息。下面,我就为大家介绍一些常用的模块。
关于ansible的部署安装请参考:
部署自动化运维服务——Ansible

ansible-doc-l                          //显示所有自带模块
ansible-doc -s “模块名称”      //查看具体模块的信息,使用‘q’退出介绍

Ad-Hoc命令格式

Ah-Hoc常用可选项如下:

  • v:--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息
  • i:PATH,--inventory=PATH:指定inventory信息,默认/etc/absible/hosts
  • f:NUM,--forks=NUM:并发线程数,默认5个线程
  • m:NAME,--module-name=NAME:指定执行使用的模块
  • M:DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径
  • a:‘ARGUMENTS‘,--args=‘ARGUMENTS‘:模块参数
  • k:--ask-pass SSH:认证密码
  • K:--ask-sudo-pass sudo:用户的密码(--sudo时使用)
  • o:--one-line:标准输出至一行
  • s:--sudo:相当于Linux系统下的sudo命令
  • c:CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts
  • --list-hosts:列出符合条件的主机列表,不执行任何命令

aommand模块

command命令用于系统命令,不如ping、tail、date等命令,接下来我就以date、tail为例,介绍他的使用方法,接下来的所有操作中,都会使用“web“分类。

ansible web -m command -a ‘date‘                         //-a后的参数需使用单引号
ansible web -m command -a ‘tail -1 /etc/passwd‘

技术分享图片

cron模块

Ansible中的cron模块用于定义计划性任务。其中有两种状态(state):present表示添加(默认使用,可省略),absent表示移除。

创建计划性任务

ansible-doc -s cron                                                                                                    //查看模块信息
ansible web -m cron -a ‘minute="*/1" job="/bin/echo test" name="test cron job"‘  
//每分钟执行一次输出test,name的名称可以自定义,
ansible web -a ‘crontab -l‘                                                                                         //计划性任务,command为默认模块,-m可省略

技术分享图片

移除计划性任务

ansible web -m cron -a ‘name="test cron job" state=absent‘   
//在创建时所使用的名称,取消是也要相对应,若是在创建时为设定名称,使用name=None即可

技术分享图片

ping模块

ping模块用来测试指定主机的联通性

ansible web -m ping

技术分享图片

user模块

user模块用于创建新用户和更改、删除已存在的用户。其中name选项用于指明创建的用户名称

新建用户

生成密钥

因为ansible user的passwd参数需要接收加密的值,所以需要利用openssl命令来生成密码,采用md5加密。

echo ansible | openssl passwd -1 -stdin   //此处为“一”,不是“L”,明文为ansible

新建用户

ansible web -m user -a ‘name=zhang password="$1$zF5aYItH$MKXWT.NfH8kOV6OH3Y/Tp0"‘ -o

验证新建用户是否成功

ssh 172.16.10.30 -l zhang     //ssh远程登陆

技术分享图片

删除用户

ansible web -m user -a ‘name="zhang" state=absent‘

group模块

group模块用于对用户组管理

ansible web -m group -a ‘name=mysql gid=306 system=yes‘   //新建mysql组,gid=306
ansible web -m user -a ‘name=lisi uid=306 system=yes group=mysql‘   //新建用户lisi,uid=306,并加入到mysql组

copy模块

copy模块用于实现文件复制和批量下发文件。其中使用src来定义本地源文件路径,使用dest定义被管理主机文件路径,使用content则是通过指定信息内容来生成文件。注意,复制或者下发文件,一定时管理主机上有的文件,不要使用管理主机上不存在的文件或目录

批量下发、复制文件

批量下发文件时,可以同时指定文件的属组属主,文件权限等属性

ansible web -m copy -a ‘src=/etc/fstab dest=/opt/fstab.bak owner=lisi group=mysql mode=600 backup=yes‘ -o
ansible web -m shell -a ‘md5sum /opt/fstab.bak‘ -o   //验证下发功能

技术分享图片

写入指定内容到文件

ansible web -m copy -a ‘content="hello word!" dest=/opt/a.txt‘ -o
ansible web -m shell -a ‘md5sum /opt/a.txt‘ -o

shell模块

shell模块可在被管理主机上运行命令,并支持风管道符等功能的复杂命令

ansible zhangsan -m shell -a ‘echo abc123 | passwd --stdin zhangsan‘   //免交互创建已有用户密码

file模块

file模块用来设置文件属性,其中使用path指定文件路径,使用src定义源文件路径,使用name或dest来替换创建文件的符号链接

设置文件权限

ansible web -m file -a ‘owner=lisi group=mysql mode=644 path=/opt/a.txt‘ -o
ansible web -m shell -a ‘ls -l /opt/a.txt‘

技术分享图片

设置链接文件

ansible web -m file -a ‘path=/opt/fstab.link src=/etc/fstab state=link‘ -o    //src后的目录及文件都为和管理主机上所有

技术分享图片

删除文件

ansible web -m file -a "path=/opt/a.txt state=absent" -o

创建文件

ansible web -m file -a "path=/opt/test state=touch" -o            //创建一个文件

yum模块

yum模块负责在被管理主机上安装与卸载软件包,可以使用本地yum仓库,或是在线yum源,如果选用本地yum仓库,则需为被管理主机搭建yum仓库。若是使用在线,则直接安装,本次测试采用在线安装,不搭建本地yum仓库。

安装软件包

ansible web -m yum -a ‘name=httpd state=latest‘ -o   //在被管主机上安装最新版本httpd软件
ansible web -m shell -a ‘rpm -qa httpd‘ -o           //查看软件包安装情况

技术分享图片

卸载软件包

ansible web -m yum -a ‘name=httpd state=absent‘ -o
ansible web -m shell -a ‘rpm -qa httpd‘ -o

service模块

service模块用来控制管理服务的运行状态,其中,使用enablesd表示是否开机自启,取值为true或false;使用name定义服务名称;使用state指定服务状态,分别取值startd、stoped、restarted。

开启httpd服务

ansible web -m service -a ‘enabled=true name=httpd state=started‘ -o
ansible web -m shell -a ‘/usr/bin/netstat -ntap | grep httpd‘                          //查看服务启动是否成功
ansible web -a ‘systemctl status httpd‘                                                         //查看服务状态

技术分享图片

script模块

script模块可以将本地脚本复制到被管理主机上进行运行。注意,使用相对路径来指定脚本

编写简单的shell脚本

cd /opt
vim test.sh
#!/bin/bash
echo this is ansible test > /opt/ansible.txt
chmod +x test.sh

下发shell脚本执行

ansible web -m script -a ‘test.sh‘
ansible web -m shell -a ‘/usr/bin/cat /opt/ansible.txt‘

技术分享图片

setup模块

setup模块收集、查看被管主机的facts(facts是ansible采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前。都会将自己的相关信息(操作系统、IP地址等)发送给控制主机。

ansible web -m setup     //内容特别多就不贴图了

以上是关于Ansible常用Ad-Hoc命令介绍的主要内容,如果未能解决你的问题,请参考以下文章

《Ansible权威指南》笔记——Ad-Hoc命令集,常用模块

Ansible 文档译文Ad-Hoc 命令介绍

ansible ad-hoc及常用模块

ansible ad-hoc及常用模块

ansible ad-hoc及常用模块

Ansible Ad-Hoc命令集