模块的使用
查看模块帮助
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模块。
[root@node1 ~]# ansible-doc -s command - name: 在远程节点执行命令 action: command chdir # 在执行命令之前,先切换到该目录 creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断 executable # 切换shell来执行命令,需要使用命令的绝对路径 free_form= #要执行的Linux指令,一般使用Ansible的-a参数代替。 removes #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
cron
定时任务模块
[root@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
用户模块
[root@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
用户组模块
[root@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
复制模块
[root@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
文件操作模块
[root@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
[root@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
[root@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
脚本模块
[root@node1 ~]# ansible-doc -s script - name: 将本地脚本复制到远程主机并运行之 action: script creates # 一个文件名,当这个文件存在,则该命令不执行 free_form= # 本地脚本路径 removes # 一个文件名,这个文件不存在,则该命令不执行
ansible webserver -m script -a '/root/script.sh'
yum
[root@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
模块的使用
查看模块帮助
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模块。
[root@node1 ~]# ansible-doc -s command - name: 在远程节点执行命令 action: command chdir # 在执行命令之前,先切换到该目录 creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断 executable # 切换shell来执行命令,需要使用命令的绝对路径 free_form= #要执行的Linux指令,一般使用Ansible的-a参数代替。 removes #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
cron
定时任务模块
[root@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
用户模块
[root@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
用户组模块
[root@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
复制模块
[root@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
文件操作模块
[root@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
[root@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
[root@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
脚本模块
[root@node1 ~]# ansible-doc -s script - name: 将本地脚本复制到远程主机并运行之 action: script creates # 一个文件名,当这个文件存在,则该命令不执行 free_form= # 本地脚本路径 removes # 一个文件名,这个文件不存在,则该命令不执行
ansible webserver -m script -a '/root/script.sh'
yum
[root@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
来源:https://www.cnblogs.com/hzpythoner/p/6915812.html