二ansible基础模块介绍

努力尽今夕,少年犹可夸。这篇文章主要讲述二ansible基础模块介绍相关的知识,希望能为你提供帮助。
1、ansible-doc?模块的手册,相当于shell的man
ansible-doc -l 列出所有模块
ansible-doc modulename 查看帮助
ansible-doc copy 查看copy模块相关信息
2、ping?测试网络连通性,ping模块没有参数

二ansible基础模块介绍

文章图片

3、command?默认模块,如果执行ansible命令没有-m指明模块,则默认使用command模块
二ansible基础模块介绍

文章图片

如果命令中有< > | & command模块执行失败
command模块不能解析系统变量
该模块不启动shell直接在ssh进程中指定,所有使用到shell的命令执行都会失败
所有command能执行的几乎shell都可以执行
4、shellshell模块用法基本与command一样,区别shell模块是通过/bin/sh进行命令执行的,可以执行任何命令
--不能执行交互式命令,例如vim、top
ansible webserver -m shell -a \'cd /tmp; touch test\'
二ansible基础模块介绍

文章图片

ansible webserver -m shell -a "echo ${HOSTNAME}"
ansible webserver -m shell -a \'echo ${HOSTNAME}\'
二ansible基础模块介绍

文章图片

变量解析
ansible执行命令是二次解析
第一次在本机解析,第二次在执行机器解析
需要第二次解析的变量要转移(\\)
5、user group创建组命令

?-----------------------------------------------------------------------------------------------------------------
ansible webserver -m group -a \'name=shandong gid=666 state=present system=yes\'
###创建一个名为shandong,id为666,为系统组的组
(1)创建news基本组,指定uid为9999
ansible webserver -m group -a "name=news gid=9999 state=present" -i hosts
(2)创建http系统组,指定uid为8888
ansible webserver -m group -a "name=http gid=8888 system=yes state=present" -i hosts
(3)删除news基本组
ansible webserver -m group -a "name=news state=absent" -i hosts
?-----------------------------------------------------------------------------------------------------------------
创建用户命令
?name             #名称
uid             #uid
group           #组名或gid
create_home     #是否创建家目录
system           #是否作为系统组
shell           #指定登录shell
state           #动作
  present     #创建
  absent       #删除
remove           #递归 (相当于userdel -r ...)
groups           #附加组
append           #如果是yes,就是给这个用户添加一个组
password         #密码
?ansible webserver -m user -a \'name=jinan shell=/bin/shell uid=1020 groups=root group=shandong state=present\'
用户jinan,登录方式为/bin/shell,id为1020,主组为shandong,从组为root,创建
二ansible基础模块介绍

文章图片

ansible webserver -m user -a \'name=huli shell=/sbin/nologin create_home=no uid=1021 state=present\'
用户huli,不登录,不创建家目录,id为1021,创建
-----------------------------------------------------------------------------
给用户创建密码是需要加密的,直接明文并不能直接使用
创建wugui用户,并设置密码123
生成加密密码
ansible webserver -m user -a \'name=wugui shell=/bin/shell uid=1022 state=present\'
ansible webserver -m shell -a  \'echo \'123\'|passwd --stdin wugui\'
删除用户及用户家目录
ansible webservers -m user -a "name=wugui state=absent remove=yes"
创建http用户,并为该用户创建2048字节的密钥,存放在~/http/.ssh/id_rsa
ansible webserver -m user -a "name=http generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa" -i hosts
----------------------------------------------------------------------------------
6、script命令太复杂,直接本地写脚本,使用scrip模块批量执行
该脚本包含但不限于shell脚本,只要指定sha-bang解释器的脚本都可以运行
-------------------------------------------------------------------------------------------
如果没有jinan用户,就添加binzhou用户,有则省略
现在两台机器都是有的,去192.168.10.130执行
userdel -r jinan
编写脚本
vi  user.sh
#!/bin/bash
id jinan & > /dev/null
if [ $? != 0 ]; then
  useradd binzhou
  echo \'123\' |passwd --stdin binzhou
fi
?chmod a+x user.sh
ansible webserver -m script -a \'./user.sh\'
7、yum_repository yumyum_repository模块  主要用于管理远程主机上的yum仓库
name:相当于.repo文件定义中括号的[仓库ID]
baseurl:相当于.repo文件中baseurl
description:相当于.repo文件中的name
file:相当于.repo文件的名称,不使用时默认以name加.repo命令
enabled=yes|no:相当于.repo文件中enabled
gpgcheck=yes|no:相当于.repo文件中gpgcheck
gpgcakey:前提是gpgcheck=yes,相当于.repo文件中gpgkey,验证gpg公钥
state=present|absent:默认present,absent表示删除
添加阿里源
ansible webserver -m yum_repository -a \'name=aliepel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=yes gpgcheck=0 gpgcakey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 state=present file=AlicloudEpel\'
删除阿里源
ansible webserver -m yum_repository -a \'file=AlicloudEpel name=aliepel state=absent\'
yum模块
??name:指定管理的软件包
?state=present|installed|latest|absent|removed:依次对应 安装|安装|安装最新版本|删除|删除
disable_gpg_check=no|yes:禁用对rpm包的公钥验证,默认no;
enablerepo=< local|AlicloudEpel> :在不确定某源是否启用的情况下,可以临时使用该源
disablerepo=< local|AlicloudEpel> :临时禁用某源
----------------------------------?---------------------------------------------------------
(安装present 卸载absent 升级latest 排除exclude 指定仓库enablerepo)
(1)安装当前最新的apache软件,如果存在则更新
ansible webserver -m yum -a "name=httpd state=latest" -i hosts
(2)安装当前最新的apache软件,通过epel仓库安装
ansible webserver -m yum -a "name=httpd state=latest enablerepo=epel" -i hosts
(3)通过公网url安装rpm软件
ansible webserver -m yum -a "name=https://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-agent-3.4.3-1.el6.x86_64.rpm state=latest" -i hosts
(4)更新所有软件包,排除和kernel相关的
ansible webserver -m yum -a "name=* state=latest exclude=kernel*,foo*" -i hosts
(5)删除apache软件
ansible webserver -m yum -a "name=httpd state=absent" -i hosts
----------------------------------------------------------------------------------------------
8、service systemd?设置服务的启动,重启,停止和重新加载,开机自启,systemd重新加载配置文件,使用哪块网卡
state:started|restarted|stopped|reloaded
enabled:yes|no
daemon_reload: yes
args: eth0
sleep: ##执行restarted会在stop和start之间沉睡几秒钟
--------------------------------------------------------------------------------------------------
?主机安装nginx服务
?ansible webserver -m yum -a \'name=nginx state=present\'
?设置启动,开机自启
ansible webserver -m service -a \'name=nginx state=started enabled=yes\'
停止服务,取消开机自启
ansible webserver -m service -a \'name=nginx state=stopped enabled=no\'
-----------------------------------------------------------------------------------------------
9、file?管理远程主机文件,创建文件或目录,删除文件或目录,修改文件或目录的权限等
path:
state=directory|touch|link|hard|absent:依次对应 目录|文件|软链接|硬链接|删除
src:前提state=link|hard时,需要指定链接源
force:state=link,force=yes表示强制创建链接文件,若有同名则覆盖
owner:指定属主
group:指定属组
mode:指定权限mode=655,mode=0700
recurse:当操作的对象是目录时,recurse=yes,可以递归修改目录中文件的属性
?----------------------------------------------------------------------------------------------------------------------
在/tmp目录下创建test目录,并在/tmp/test目录下创建test01文件,属主属组为root,权限644
ansible webserver -m file -a \'path=/tmp/test state=directory\'
ansible webserver -m file -a \'path=/tmp/test/test01 state=touch\'
ansible webserver -m file -a \'path=/tmp/test recurse=yes owner=root group=root mode=700\'
删除/tmp/test目录
ansible webserver -m file -a \'path=/tmp/test state=absent\'
(1)创建文件,并设定属主、属组、权限
ansible webserver -m file -a "path=/var/www/html/tt.html state=touch owner=apache group=apache mode=644" -i hosts
(2)创建目录,并设定属主、属组、权限
ansible webserver -m file -a "path=/var/www/html/dd state=directory owner=apache group=apache mode=755" -i hosts
(3)递归授权目录的方式
ansible webserver -m file -a "path=/var/www/html/ owner=apache group=apache mode=755" -i hosts
ansible webserver -m file -a "path=/var/www/html/ owner=apache group=apache mode=755 recurse=yes" -i hosts
?----------------------------------------------------------------------------------------------------------------------
10、copy template?copy模块将ansible主机上的文件拷贝到远程主机
路径为目录时递归复制,若路径以/结尾,则只复制目录里的内容,若不以/结尾,则复制包含目录在内的整个内容


fetch模块将远程主机上的文件拉取到ansible主机
参数
src:指定拉取或拷贝的文件,适用于copy|fetch
dest:指定存放的位置,适用于copy|fetch
content:指定远程主机文件的内容,而不是拷贝文件到远程主机上,仅限copy
force:当远程主机已存在同名文件时,yes强制覆盖,no不会执行覆盖操作,默认yes
backup:当远程主机已存在同名文件时,yes先备份再拷贝
owner:指定文件属主
group:指定文件属组
mode:指定文件权限
?---------------------------------------------------------------------------------------------------------------------
?copy模块:
将/tmp/jinan文件拷贝到远程主机/tmp/目录下,若有同名文件则先备份,属主root,权限644
创建文件
touch /tmp/jinan  
ansible webserver -m copy -a \'src=https://www.songbingjia.com/tmp/jinan dest=/tmp backup=yes owner=root mode=644/'
在远程主机/tmp/目录下生成qingdao文件,内容是第一行hello,第二行world
copy
ansible webserver -m copy -a \'content="hellow\\nworld" dest=/tmp/qingdao\'
fetch模块:
将远程主机192.168.10.130/tmp/qingdao文件拉取到ansible主机/tmp目录下
ansible 192.168.10.130 -m fetch -a \'src=https://www.songbingjia.com/tmp/test/test dest=/tmp/'
##实际目录是/tmp/192.168.10.130/tmp/qingdao
(1)将本地的httpd.conf文件Listen端口改为9999,然后推送到远端服务器
ansible webserver -m copy -a "src=https://www.songbingjia.com/android/httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644" -i hosts
(2)将本地的httpd.conf文件Listen端口改为9090,然后推送到远端,检查远端是否存在上一次的备份文件
ansible webserver -m copy -a "src=https://www.songbingjia.com/android/httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes" -i hosts
(3)往远程主机文件中写入内容
ansible webserver -m copy -a "content=HttpServer dest=/var/www/html/index.html" -i hosts
-----------------------------------------------------------------------------------------------------------------------
template模块
和copy模块差不多,但是copy会把文件原模原样拷贝过去,即使文件中包含变量也不会翻译
template模块首先使用变量渲染jinja2模板文件成普通文件,然后再复制过去
tempalte更多的使用在playbook中
--------------------------------------------------------------------------------------------------------------------------------
添加新文件
cat hello_world.j2
Hello {{ citys }}
先使用copy
?ansible webserver -m copy -a \'src=https://www.songbingjia.com/android/hello_world.j2 dest=/tmp/' -e \'citys=jinan\'
二ansible基础模块介绍

文章图片

在使用template
?ansible webserver -m template -a \'src=https://www.songbingjia.com/android/hello_world.j2 dest=/tmp/' -e \'citys=jinan\'
二ansible基础模块介绍

文章图片

---------------------------------------------------------------------------------------------------------------------------------------

11、setup?收集远程主机的一些基本信息,playbook里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数
ansible 192.168.10.130 -m setup
获取ip地址
ansible 192.168.10.130 -m setup -a \'filter=ansible_default_ipv4\'
ansible 192.168.10.130 -m setup -a \'filter=ansible_hostname\'
ansible_all_ipv4_addresses:仅显示ipv4的信息
ansible_devices:仅显示磁盘设备信息
ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_major_version:显示是系统主版本
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)
ansible_python_version:显示python版本
12、cron模块?管理远程节点的CRON 服务。等同于Linux 中的计划任务。
注意:使用Ansible 创建的计划任务,是不能使?本地 crontab -e去编辑,否则Ansible无法法再次操作此计划任务
name 指定一个cron job的名字。一定要指定,便于日后删除。  
minute 指定分钟,可以设置成(0-59, *, */2 等)格式。默认是 * , 也就是每分钟。  
hour 指定小时,可以设置成(0-23, *, */2 等)格式。默认是 * , 也就是每小时。  
day 指定天, 可以设置成(1-31, *, */2 等)格式。默认是 * , 也就是每天。  
month 指定月份, 可以设置成(1-12, *, */2 等)格式。 默认是 * , 也就是每周。  
【二ansible基础模块介绍】weekday 指定星期, 可以设置成(0-6 for Sunday-Saturday, * 等)格式。默认是 *,也就是每星期。  
job 指定要执行的内容,通常可以写个脚本,或者一段内容。  
state 指定这个job的状态,可以是新增(present)或者是删除(absent)。默认为新增(present)
-----------------------------------------------------------------------------------------------------------------
(1)添加定时任务,每分钟执行一次ls,* * * * * ls > /dev/null
ansible webserver -m cron -a "name=job1 job=\'ls > /dev/null\'" -i hosts
(2)添加定时任务,每天凌晨2点和凌晨5点执行一次ls,0 2,5 * * * ls > /dev/null
ansible webserver -m cron -a "name=job2 minute=0 hour=2,5 job=\'ls > /dev/null\'" -i hosts
(3)关闭定时任务,
ansible webserver -m cron -a "name=job1 state=absent" -i hosts
----------------------------------------------------------------------------------------------------------------- 
13、debug?debug 模块主要用于调试时使用,通常的作用是将一个变量的值 给打印出来。
var 直接打印一个个指定的变量值  
msg 打印一段可以格式化的字符串
这里引入了变量,我们只需了解 debug 模板的使用即可
ansible webserver -m debug -a "var=role" -e "role=web"  
ansible webserver -m debug -a "msg=\'role is {{role}} \'" -e "role=web"
14、lineinfile replace  blockin?le类似于sed的一种行编辑替换模块
path 目标文件
regexp 正则表达式,要修改的行
line 最终修改的结果
state 可以选择absent删除,默认是present替换
create 文件不存在时,是否要创建文件
?-----------------------------------------------------------------------------------------------------------------------------------------------
比如修改selinux?
ansible webserver -m lineinfile -a \'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled"\'
将远程主机的qingdao文件,world改成ni hao
ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^world" line="ni hao"\'
根据正则表达式替换”某一行”,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,被匹配行会被替换成 line 参数指定的内容,但是如果指定的表达式没有匹配到任何一行,那么 line 中的内容会被添加到文件的最后一行
?ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^test" line="test one"\'
二ansible基础模块介绍

文章图片

如果是在一个文件中把所有匹配到的多行都进行统一处理,请参考replace模块
向文件中插入两行新内容
ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^test" line="test one"\'
ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^2test" line="test two"\'
二ansible基础模块介绍

文章图片

使用replace模块将文件中的test替换为qingdao
ansible webserver -m replace -a \'path=/tmp/qingdao regexp="test" replace="qingdao"\'
二ansible基础模块介绍

文章图片

如果想对一个文件进行多次性添加/更新/删除多行内容等操作,参考blockin?le模块
?向qingdao文件中添加多行\'nihao qingdao\\n qingdao nihao\'
block 文件中被操作的块内容
ansible webserver -m blockinfile -a \'path=/tmp/qingdao block="nihao qingdao\\nqingdao nihao"\'
二ansible基础模块介绍

文章图片

15 archive unarchive?aichive 压缩命令
二ansible基础模块介绍

文章图片

二ansible基础模块介绍

文章图片

二ansible基础模块介绍

文章图片

unarchive解压缩
?这个模块有两种用法:
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes. 本地解压缩,解压缩位置不是默认的目录,没找到或传完删了后传到远程主机
2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no远程主机上面的操作,不涉及ansible服务端
?参数:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
?---------------------------------------------------------------------------------------------------------------------------------------------
??1、下载文件到指定目录:

    推荐阅读