设为首页 收藏本站
查看: 1076|回复: 0

[经验分享] ansible常见模块

[复制链接]

尚未签到

发表于 2018-1-2 11:51:41 | 显示全部楼层 |阅读模式
模块的使用

查看模块帮助
  ansible-doc -l 查看所有模块
  
ansible-doc -s MODULE_NAME 查看指定模块的详细帮助

ansible命令应用基础
  语法: ansible <host-pattern> [-f forks] [-m module_name] [-a args]
  
-f forks:启动的并发线程数
  
-m module_name: 要使用的模块
  
-a args: 模块特有的参数

常用模块

command
  功能:命令模块,默认模块,用于在远程主机执行命令,缺点:运行的命令中无法使用变量,管道。如果需要使用管道、变量,请使用raw模块,或者shell模块
  

[iyunv@node1 ~]# ansible-doc -s command  
- name: 在远程节点执行命令
  
action: command
  
chdir           # 在执行命令之前,先切换到该目录
  
creates         # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
  
executable      # 切换shell来执行命令,需要使用命令的绝对路径
  
free_form=      #要执行的Linux指令,一般使用Ansible的-a参数代替。
  
removes         #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
  

cron
  定时任务模块
  

[iyunv@node1 ~]# ansible-doc -s cron  
- name: 设置管理节点生成定时任务
  
action: cron
  
backup             # 如果设置,创建一个crontab备份
  
cron_file          #如果指定, 使用这个文件cron.d,而不是单个用户crontab
  
day                # 日应该运行的工作( 1-31, *, */2, etc )
  
hour               # 小时 ( 0-23, *, */2, etc )
  
job                #指明运行的命令是什么
  
minute             #分钟( 0-59, *, */2, etc )
  
month              # 月( 1-12, *, */2, etc )
  
name               #定时任务描述
  
reboot             # 任务在重启时运行,不建议使用,建议使用special_time
  
special_time       # 特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
  
state              #指定状态,prsent表示添加定时任务,也是默认设置,absent表示删除定时任务
  
user               # 以哪个用户的身份执行
  
weekday            # 周 ( 0-6 for Sunday-Saturday, *, etc )
  

  每10分钟执行一次:
  

ansible webserver -m cron -a 'name="test crontab" minute="*/10"  job="/bin/echo hello,world!" '  

  
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
  
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root
  
ansible test -m cron  -a 'backup="True" name="test" minute="0" hour="5,2" job="ls -alh > /dev/null"'
  
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'
  

user
  用户模块
  

[iyunv@node1 ~]# ansible-doc -s user  
- name: 管理用户帐号
  
action: user
  
comment          # 用户的描述信息
  
createhome       # 是否创建家目录
  
force            # 在使用`state=absent'是, 行为与`userdel --force'一致.
  
group            # 指定基本组
  
groups           # 指定附加组,如果指定为('groups=')表示删除所有组
  
home             # 指定用户家目录
  
login_class      #可以设置用户的登录类 FreeBSD, OpenBSD and NetBSD系统.
  
move_home        # 如果设置为`home='时, 试图将用户主目录移动到指定的目录
  
name=            # 指定用户名
  
non_unique       # 该选项允许改变非唯一的用户ID值
  
password         # 指定用户密码
  
remove           # 在使用 `state=absent'时, 行为是与 `userdel --remove'一致.
  
shell            # 指定默认shell
  
state            #设置帐号状态,不指定为创建,指定值为absent表示删除
  
system           # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户。
  
uid              #指定用户的uid
  
update_password  # 更新用户密码
  

user: name=johnd comment="John Doe" uid=1040 group=admin  
user: name=james shell=/bin/bash groups=admins,developers append=yes user: name=johnd state=absent remove=yes
  
user: name=james18 shell=/bin/zsh groups=developers expires=1422403387
  
user: name=test generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa    #生成密钥时,只会生成公钥文件和私钥文件,和直接使用ssh-keygen指令效果相同,不会生成authorized_keys文件。
  

  注:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
  

echo "123456" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin  
$1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0
  
#使用上面的密码创建用户
  

  

  
ansible all -m user -a 'name=foo password="$1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0"'
  

group
  用户组模块
  

[iyunv@node1 ~]# ansible-doc -s group  
- name: 添加或删除组
  
action: group
  
gid       # 设置组的GID号
  
name=     # 管理组的名称
  
state     # 指定组状态,默认为创建,设置值为absent为删除
  
system    # 设置值为yes,表示为创建系统组
  

  创建一个mysql用户组,并添加到mysql用户到组中
  

ansible test_name -m group -a 'name=mysql gid=306 system=yes'  
ansible test_name -m user -a 'name=mysql uid=306 system=yes group=msyql'
  

copy
  复制模块
  

[iyunv@node1 ~]# ansible-doc -s copy  
- name: 将文件复制到被管理主机
  
action: copy
  
backup          # 创建一个备份文件包括时间戳信息,如果以某种方式重创错了,还可以拿回原始文件
  
content         # 取代src=,表示直接用此处指定的信息生成为目标文件内容;
  
dest=           # 远程节点存放文件的路径,必须是绝对路径
  
directory_mode  # 递归复制设置目录权限,默认为系统默认权限
  
force           # 如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果设置为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
  
group           # 复制到远程主机后,指定文件或目录的属
  
mode            # 复制到远程主机后,指定文件或目录权限,类似与 `chmod'指明如 0644
  
owner           # 复制到远程主机后,指定文件或目录属主
  
src             # 要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
  

  将本地的/etc/fatab文件复制到目标主机的/tmp/fatab.ansbile,属主为root权限为640
  

ansible test_name -m copy -a 'src=/etc/fstab dest=/tmp/tatab.ansible owner=root mode=640'  

  在webserver组主机创建文件,自己手动指定文件内容:
  

ansilbe webserver -copy -a 'content='hello,world!\n' dest=/tmp/tatab.ansible'  

ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"  
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
  
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"
  

file
  文件操作模块
  

[iyunv@node1 ~]# ansible-doc -s file  
- name: 设置文件属性
  
action: file
  
force          # 需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况下;另一种是目标连接已存在,需要先取消之前的软连接,有两个选项:yes|no
  
group          # 设置文件或目录的属组
  
mode           # 设置文件或目录的权限
  
owner          # 设置文件或目录的属主
  
path=          # 必选项,定义文件或目录的路径
  
recurse        # 递归设置文件的属性,只对目录有效
  
src            # 要被链接到的路径,只应用与state=link的情况
  
state          # directory:如果目录不存在,创建目录;
  
file:即使文件不存在,也不会被创建
  
link:创建软连接;
  
hard:创建硬连接;
  
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
  
absent:删除目录、文件或者取消链接文件
  

  示例:设置/tmp/fstab.ansbile属主和属组都为mysql,权限为644
  

ansible test_name -m file -a 'path=/tmp/fstab.ansible owner=mysql group=mysql mode=644'  

  在webserver组创建/test/fstab.ansible的连接文件:
  

ansilbe webserver -m file -a 'path=/test/fstab.link src=/tmp/ansible.fstab state=link'  

Ping
  功能:测试指定主机是否能连接,如果成功返回pong。

service
  

[iyunv@node1 ~]# ansible-doc -s service  
- name: 管理服务
  
action: service
  
arguments     # 向服务传递的命令行参数
  
enabled       # 设置服务开机自动启动,参数为yes|no
  
name=         # 控制服务的名称
  
pattern       # 定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
  
runlevel      # 设置服务自启动级别
  
sleep         # 如果执行了restarted,则在stop和start之间沉睡几秒钟
  
state         # 启动`started' 关闭`stopped' 重新启动 `restarted' 重载 `reloaded'
  

  启动httpd服务,并设置开机自动启动:
  

ansible webserver -m service -a 'name=httpd enabled=yes state=started'  

ansible test -m service -a "name=httpd state=started enabled=yes"  
asnible test -m service -a "name=foo pattern=/usr/bin/foo state=started"
  
ansible test -m service -a "name=network state=restarted args=eth0"
  

shell
  功能:执行的命令中有管道或者变量,就需要使用shell
  

[iyunv@node1 ~]# ansible-doc -s shell  
- name: Execute commands in nodes.
  
action: shell
  
chdir       # 执行之前,先cd到指定目录在执行命令
  
creates     # 一个文件名,当这个文件存在,则该命令不执行
  
executable  # 切换shell来执行命令,需要使用命令的绝对路径
  
free_form=  # 执行的命令
  
removes     # 一个文件名,这个文件不存在,则该命令不执行
  

  与command模块类似.
  更改user帐号的密码:
  

ansible webserver -m shell -a 'echo new_password | passwd --stdin user1'  

raw
  与shell模块功能相同,推荐优先使用raw模块

script
  脚本模块
  

[iyunv@node1 ~]# ansible-doc -s script  
- name: 将本地脚本复制到远程主机并运行之
  
action: script
  
creates      # 一个文件名,当这个文件存在,则该命令不执行
  
free_form=   # 本地脚本路径
  
removes      # 一个文件名,这个文件不存在,则该命令不执行
  

ansible webserver -m script -a '/root/script.sh'  

yum
  

[iyunv@node1 ~]# ansible-doc -s yum  
- name: Manages packages with the `yum' package manager
  
action: yum
  
conf_file          # yum的配置文件
  
disable_gpg_check  # 关闭gpg_check
  
disablerepo        # 不启用某个源
  
enablerepo         # 启用某个源
  
name=              # 指定要安装的包,如果有多个版本需要指定版本,否则安装最新的包
  
state              # 安装(`present'),安装最新版(`latest'),卸载程序包(`absent')
  

  安装zsh:
  

ansible webserver -m yum -a 'name=zsh'  
ansible test -m yum -a 'name=httpd state=latest'
  
ansible test -m yum -a 'name="@Development tools" state=present'
  
ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
  

setup
  收集指定服务器的信息,每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息,如操作系统版本、IP地址等报告给远程的ansbile主机.在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下:
  

ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb'   //查看主机内存信息  
ansible 10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]'   //查看地接口为eth0-2的网卡信息
  
ansible all -m setup --tree /tmp/facts   //将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)
  

synchronize
  使用rsync同步文件,其参数如下:
  

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 模式用于从远程主机上取文件
  

src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"  
src=some/relative/path dest=/some/absolute/path archive=no links=yes
  
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
  
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull
  

  目的:将主控方/root/a目录推送到指定节点的/tmp目录下
  
命令:ansible 10.1.1.113 -m synchronize -a 'src=/root/a dest=/tmp/ compress=yes'
  
执行效果:
  

delete=yes   使两边的内容一样(即以推送方为主)  
compress=yes  开启压缩,默认为开启
  
--exclude=.Git  忽略同步.git结尾的文件
  

  由于模块,默认都是推送push。因此,如果你在使用拉取pull功能的时候,可以参考如下来实现
  
mode=pull 更改推送模式为拉取模式
  
目的:将10.1.1.113节点的/tmp/a目录拉取到主控节点的/root目录下
  
命令:ansible 10.1.1.113 -m synchronize -a 'mode=pull src=/tmp/a dest=/root/'
  由于模块默认启用了archive参数,该参数默认开启了recursive, links, perms, times, owner,group和-D参数。如果你将该参数设置为no,那么你将停止很多参数,比如会导致如下目的递归失败,导致无法拉取。
  其他相关的参数解释:
  

dest_port=22    # 指定目的主机的ssh端口,ansible配置文件中的 ansible_ssh_port 变量优先级高于该 dest_port 变量  
rsync_path      # 指定 rsync 命令来在远程服务器上运行。这个参考rsync命令的--rsync-path参数,
  
--rsync-path=PATH     # 指定远程服务器上的rsync命令所在路径信息
  
rsync_timeout   # 指定 rsync 操作的 IP 超时时间,和rsync命令的 --timeout 参数效果一样
  

raw
  目的:在10.1.1.113节点上运行hostname命令
  
命令:ansible 10.1.1.113 -m raw -a 'hostname|tee'

get_url模块:
  目的:将http://10.1.1.116/favicon.ico文件下载到指定节点的/tmp目录下
  
命令:ansible 10.1.1.113 -m get_url -a 'url=http://10.1.1.116/favicon.ico dest=/tmp'
  参数:
  

sha256sum:下载完成后进行sha256 check;  
timeout:下载超时时间,默认10s
  
url:下载的URL
  
url_password、url_username:主要用于需要用户名密码进行验证的情况
  
use_proxy:是事使用代理,代理需事先在环境变更中定义
  

get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440  
get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf sha256sum=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
  

filesystem
  在块设备上创建文件系统
  
选项:
  

dev:目标块设备  
force:在一个已有文件系统 的设备上强制创建
  
fstype:文件系统的类型
  
opts:传递给mkfs命令的选项
  

  示例:
  

ansible test -m filesystem -a 'fstype=ext2 dev=/dev/sdb1 force=yes'  
ansible test -m filesystem -a 'fstype=ext4 dev=/dev/sdb1 opts="-cc"'
  

mount
  配置挂载点
  选项:
  

dump  
fstype:必选项,挂载文件的类型
  
name:必选项,挂载点
  
opts:传递给mount命令的参数
  
src:必选项,要挂载的文件
  
state:必选项
  
present:只处理fstab中的配置
  
absent:删除挂载点
  
mounted:自动创建挂载点并挂载之
  
umounted:卸载
  

name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present  
name=/srv/disk src='LABEL=SOME_LABEL' state=present
  
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present
  

  
#####创建挂载例子
  

  
ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
  
ansible test -a 'losetup /dev/loop0 /disk.img'
  
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
  
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
  

unarchive模块
  用于解压文件,模块包含如下选项:
  

copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。  
creates:指定一个文件名,当该文件存在时,则解压指令不执行
  
dest:远程主机上的一个路径,即文件解压的路径
  
grop:解压后的目录或文件的属组
  
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
  
mode:解决后文件的权限
  
src:如果copy为yes,则需要指定压缩文件的源路径
  
owner:解压后文件或目录的属主
  

  例子:
  

- unarchive: src=foo.tgz dest=/var/lib/foo  
- unarchive: src=/tmp/foo.zip dest=/usr/local/bin copy=no
  
- unarchive: src="https://example.com/example.zip" dest=/usr/local/bin copy=no
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430779-1-1.html 上篇帖子: Ansible playbooks 下篇帖子: ansible 基础知识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表