1.Ping模块
ansible all -m ping
2.setup模块
ansible web -m setup
--tree :将所有主机的输出信息保存到/tmp/目录下,以/etc/ansible/hosts里的主机名为文件名
ansible all -m setup -a 'filter=ansible_distribution_version' --tree /tmp/
filter :过滤关键字
ansible db -m setup -a 'filter=ansible_distribution_version'
gather_subset:按子集收集信息,值有all, min, hardware, network, virtual, ohai, facter。不包含请使用!号,如,!network
facts参数说明如下:
关键字 |
说明 |
返回值例子 |
ansible_nodename |
节点名 |
"6-dns-1.hunk.tech" |
ansible_fqdn |
FQDN名 |
"6-dns-1.hunk.tech" |
ansible_hostname |
主机短名称 |
"6-dns-1" |
ansible_domain |
主机域名后缀 |
"hunk.teh" |
ansible_memtotal_mb |
总物理内存 |
"ansible_memtotal_mb": 222 |
ansible_swaptotal_mb |
SWAP总大小 |
"1023" |
ansible_processor |
CPU信息 |
Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz |
ansible_processor_cores |
CPU核心数量 |
4 |
ansible_processor_vcpus |
CPU逻辑核心数量 |
2 |
ansible_all_ipv4_addresses |
有所IPV4地址 |
192.168.0.200 |
ansible_all_ipv6_addresses |
所有IPV6地址 |
|
ansible_default_ipv4 |
默认网关的网卡配置信息 |
|
ansible_eth2 |
具体某张网卡信息 |
不同系统名称需要变化 |
ansible_dns |
DNS设置信 |
|
ansible_architecture |
系统架构 |
x86_64 |
ansible_machine |
主机类型 |
x86_64 |
ansible_kernel |
内核版本 |
"2.6.32-696.el6.x86_64" |
ansible_distribution |
发行版本 |
"CentOS" |
ansible_distribution_major_version |
操作系统主版本号 |
"6" |
ansible_distribution_release |
发行版名称 |
"Final" |
ansible_distribution_version |
完整版本号 |
"7.4.1708" |
ansible_pkg_mgr |
软件包管理方式 |
"yum" |
ansible_service_mgr |
进行服务方式 |
"systemd" |
ansible_os_family |
家族系列 |
"RedHat" |
ansible_cmdline |
内核启动参数 |
|
ansible_selinux |
SElinux状态 |
"disabled" |
ansible_env |
当前环境变量参数 |
|
ansible_date_time |
时间相关 |
|
ansible_python_version |
python版本 |
"2.6.6" |
ansible_lvm |
LVM卷相关信息 |
|
ansible_mounts |
所有挂载点 |
|
ansible_device_links |
所有挂载的设备的UUID和卷标名 |
|
ansible_devices |
所有/dev/下的正在使用的设备的信息 |
|
ansible_user_dir |
执行用户的家目录 |
"/root" |
ansible_user_gecos |
执行用户的描述信息 |
"The root " |
ansible_user_gid |
执行用户的的GID |
0 |
ansible_user_id |
执行用户的的用户名 |
"root" |
ansible_user_shell |
执行用户的shell类型 |
"/bin/bash" |
ansible_user_uid |
执行用户的UID |
0 |
3.command 命令模块
默认模块(可省略),用于在远程执行命令(不能使用变量)
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
4.hostname模块
ansible centos -m hostname -a 'name=centos'
5.cron 定时任务模块
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,*,*/2,……)
hour:小时(0-23,*,*/2,……)
minute:分钟(0-59,*,*/2,……)
month:月(1-12,*,*/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="present"'
ansible db -a "crontab -l"
6.user模块
groups:指定用户的属组
uid:指定用户的uid
password:为用户设置登陆密码,此密码是明文密码加密后的密码
update_password:always/on_create
always:只有当密码不相同时才会更新密码(默认)
on_create:只为新用户设置密码
name:指定用户名
createhome:是否创建家目录 yes|no(默认是yes)
system:是否为系统用户
remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r(默认是no)
state:是创建还是删除 present(添加(默认值))or absent(移除)
shell:指定用户的shell环境
append:yes/no
yes:增量添加group
no:全量变更group,只设置groups指定的group组(默认)
expires:设置用户的过期时间,值是一个时间戳
注:指定password参数时,不能使用后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可,加密处理过程如下:
安装python-pip,并安装加密函数库-passlib
yum -y install python-pip
pip install --upgrade pip
pip install passlib
使用加密函数库,获取密文密码
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$0lwTSmqKOkL.ktgl$OnBexXC7haBf0FRHVMIZM2edDeFWBbpKJ2r9cxVwNvY.vh3IIUzwFz8n7jFglc0CrtQSY12ziDonVL6e71Og2.
ansible db -m user -a 'name="testops" password="$6$0lwTSmqKOkL.ktgl$OnBexXC7haBf0FRHVMIZM2edDeFWBbpKJ2r9cxVwNvY.vh3IIUzwFz8n7jFglc0CrtQSY12ziDonVL6e71Og2."'
7.group模块
gid:指定组的uid
name:指定组名
system:是否为系统用户组
state:是创建还是删除 present(添加(默认值))or absent(移除)
8.copy模块
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
ansible db -m copy -a 'src=/etc/hosts dest=/tmp/ owner=root mode=640 backup=no'
ansible db -m copy -a 'content="Hello ansible you are clever! " dest=/tmp/ansile.txt force=yes owner=root mode=640 backup=no'
9.fatch模块
dest:用来存放文件的目录
flat:允许覆盖默认行为从hostname/path到/file的,如果dest以/结尾,它将使用源文件的基础名称
src:在远程拉取的文件,并且必须是一个file,不能是目录
validate_checksum:当文件fetch之后进行md5检查
ansible test -m fetch -a "src=/root/test.txt dest=/root"
10.file模块
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state: directory:如果目录不存在,创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件
ansible db -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible db -m file -a "path=/tmp/fstab state=absent"
ansible db -m file -a "path=/tmp/test state=touch"
11.yum模块
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present安装,absent卸载,latest最新)
ansible web -m yum -a 'name=httpd state=latest'
ansible web -m yum -a 'name="@Development tools" state=present'
ansible web -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
12.service模块
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
ansible web -m service -a 'enabled=yes name=httpd state=started'
13. shell模块
ansible web -m shell -a "ps -ef|grep httpd"
14. script模块
ansible db -m script -a '/tmp/script.sh'
15. synchronize模块
archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
checksum: 跳过检测sum值,默认关闭
compress:是否开启压缩
copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
delete: 删除不存在的文件,默认no
dest:目录路径
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
dirs:传速目录不进行递归,默认为no,即进行目录递归
rsync_opts:rsync参数部分
set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件
16. mount模块
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件
state:必选项 present:只处理fstab中的配置 absent:删除挂载点 mounted:自动创建挂载点并挂载之 umounted:卸载
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
17.raw模块
执行原始的命令,而不是通过模块子系统
18.apt模块
deb:用于安装远程机器上的.deb后缀的软件包(optional)
install_recommends:这个参数可以控制远程电脑上是否只是下载软件包,还是下载后安装,默认参数为true,设置为false的时候只下载软件包,不安装
update_cache:当这个参数为yes的时候等于apt-get update(optional)
name:apt要下载的软件包名字,支持name=git=1.6 这种制定版本的模式
state:状态(present,absent,latest),表示是安装还卸载
present: 默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除
19.pip模块
用于管理Python库依赖项
chdir:执行pip命令前cd进入的目录
name:要安装的Python库的名称或远程包的URL。
requirements:一个pip requirements.txt文件的路径,它应该是远程系统的本地文件,如果使用chdir选项,则可以将文件指定为相对路径。
version:指定的Python库的安装版本。
extra_args:额外的参数传递给pip。
executable:显式可执行文件或可执行文件的路径名,用于为系统中安装的特定版本的Python运行pip。 例如pip-3.3,如果系统中安装了Python 2.7和3.3,并且想要为Python 3.3安装运行pip。 它不能与“virtualenv”参数一起指定(在2.1中添加)。 默认情况下,它将采用适用于python解释器的版本。 pip3在python 3上,pip2或pip在python 2上。
virtualenv:要安装到的virtualenv目录的可选路径。 它不能与’executable’参数一起指定(在2.1中添加)。 如果virtualenv不存在,则将在安装软件包之前创建它。 可选的virtualenv_site_packages,virtualenv_command和virtualenv_python选项会影响virtualenv的创建。
virtualenv_command:用于创建虚拟环境的命令或路径名。 例如pyvenv,virtualenv,virtualenv2,~/bin /virtualenv,/usr/local/bin/virtualenv。
virtualenv_python:用于创建虚拟环境的Python可执行文件。 例如python3.5,python2.7。 未指定时,将使用用于运行ansible模块的Python版本。 当virtualenv_command使用pyvenv或-m venv模块时,不应使用此参数。
state:状态(present,absent,latest, forcereinstall),表示是安装还卸载
present:默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除
forcereinstall:“forcereinstall”选项仅适用于可ansible 2.1及更高版本。
20.template模块
基于模板方式生成一个文件复制到远程主机(template使用Jinjia2格式作为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。)
backup: 如果原目标文件存在,则先备份目标文件
src:在ansible控制器上的Jinja2格式化模板的路径。 这可以是相对或绝对的路径。
dest:将模板渲染到远程机器上的位置。
force:是否强制覆盖,默认为yes
owner:目标文件属主
group:目标文件属组
mode:目标文件的权限模式,模式可以被指定为符号模式(例如,u + rwx或u = rw,g = r,o = r)。
21.get_url 模块
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
dest:将文件下载到哪里的绝对路径。如果dest是目录,则使用服务器提供的文件名,或者如果没有提供,将使用远程服务器上的URL的基本名称。
headers:以格式“key:value,key:value”为请求添加自定义HTTP标头。
22.lineinfile模块
可以借助 lineinfile 模块,确保”某一行文本”存在于指定的文件中,或者确保从文件中删除指定的”文本”(即确保指定的文本不存在于文件中),还可以根据正则表达式,替换”某一行文本”
path:必须参数,指定要操作的文件。
line: 使用此参数指定文本内容。
regexp:使用正则表达式匹配对应的行。
state:absent表示删除,state的默认值为present。
backrefs:与“state=present”一起使用,“line”可以包含backreference,如果“regexp”与文件中的任何位置都不匹配,则文件将被保留不变。
insertafte:借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可以设置为EOF或者正则表达式,使用backrefs参数时,此参数会被忽略。
insertbefore:借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数的值可以设置为BOF或者正则表达式,当使用backrefs参数时,此参数会被忽略。
backup:是否在修改文件之前对文件进行备份。
create:当要操作的文件并不存在时,是否创建对应的文件。
23.blockinfile模块
blockinfile模块可以帮助我们在指定的文件中插入"一段文本"。
path:必须参数,指定要操作的文件。
block:此参数用于指定想要操作的那"一段文本",此参数有一个别名叫"content",使用content或block的作用相同。
marker:ansible会自动为这段文本添加一个开始标记和一个结束标记,默认情况下,开始标记为# BEGIN ANSIBLE MANAGED BLOCK,结束标记为# END ANSIBLE MANAGED BLOCK,可以使用marker参数自定义"标记",如,marker=#{mark}test ,这样设置以后,开始标记变成了# BEGIN test,结束标记变成了# END test,{mark}会自动被替换成开始标记和结束标记中的BEGIN和END。
state:两个可选值,present与absent,默认值就是present。在执行插入操作或更新操作时state的值为present,如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记的段落。
insertafter:在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的后面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的后面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为EOF,表示将文本插入到文档末尾。
insertbefore:在插入一段文本时,默认会在文件的末尾插入文本,如果你想要将文本插入在某一行的前面,可以使用此参数指定对应的行,也可以使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面,如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准,此参数的值还可以设置为BOF,表示将文本插入到文档开头。
backup:是否在修改文件之前对文件进行备份。
create:当要操作的文件并不存在时,是否创建对应的文件。