ansible史上最全常见企业级应用模块详解

版权声明:转载请声明! https://blog.csdn.net/qq_34672033/article/details/89647523

ansible常见企业级应用模块详解

查看模块帮助文档

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

ansible命令应用基础使用

ansible: (host-pattern)

#语法说明: 
ansible <host-pattern> [-f forks] [-m module_name] [-a args]

#参数说明:
-f forks          #启动的并发线程数
-m module_name    #要使用的模块
-a args           #模块特有的参数

ansible-galaxy

连接galaxy.ansible.com下载相应的roles(角色)

  • 列出所有已经安装的galaxy
ansible-galaxy list
  • 安装galaxy,角色包
ansible-galaxy install geerlingguy.redis

Alt text

  • 删除galaxy角色包
ansible-galaxy remove geerlingguy.redis

ansible模块详解

ping模块

  1. 一个简单的测试模块,这个模块总是返回‘pong’在成功连接时,这个模块在剧本中时没有意义的,但是能够使用ansible命令验证登陆能力和用于pyth的配置,
  2. 这个并不是传统的ICMP ping,而是先检查能否通过SSH登陆节点,在检查python版本是否满足要求,能满足返回pong,
[root@m01 /server/scripts 20:37:43]# ansible shuai -m ping
172.16.1.31 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.16.1.41 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

copy模块

Alt text
使用说明

ansible 主机组模块名 -m 模块名称-a “src=源  dest=目标”

ansible 主机组模块名 -m 模块名称 -a “src=源  dest=目标 backup=yes”
说明:backup选项在分发文件前,对以后源文件进行备份

ansible 主机组模块名-m 模块名称 -a “src=源  dest=目标 mode=600 owner=shuai
group=shuai  backup=yes”
说明:更改用户权限

ansible 主机组模块名  -m  模块名称  -a “content='shuai  NB\n'  dest=目标/zhang.txt mode=600 owner=shuai group=shuai  backup=yes”

ansible 主机组模块名-m 模块名称 -a “src=源  dest=目标/a/b/c/d/e/f  mode=600 owner=shuiai group=shuai  backup=yes
说明:可以递归创建目录,但是不能跟文件名!

小技巧可以把主控端的某个服务的配置文件复制一份直接copy到被控端,直接覆盖/变动文件

fetch: (从客户端取单个文件)

从被控端取文件到主控端,与copy模块相反
注意!只能抓取被控端的单个!文件!,不能是目录!

# 演示
ansible app -m fetch -a 'src=/ansible/1.sh dest=/data/'

src : 源
dest : 目标,在抓取文件到主控端后,会生成一个被控端主机IP,及抓取时的文件的路径!
因为只能抓取一个文件,可以先行打包文件,然后在抓取压缩包
Alt text

shell模块:(万能模块、可以操作特殊符号)

ansible 主机组模块名 -m 模块名称 -a  “脚本/server/scripts/ceshi.sh”
ansible 主机组模块名 -m 模块名称 -a  “命令tree /tmp”
ansible 主机组模块名 -m 模块名称script -a  "脚本"  # 利用script模块执行脚本

说明:script模块与shell模块的区别
(1)shell:需要将脚本文件复制到远程服务器,然后执行远程服务器上的脚本
(2)script:不需要将脚本文件复制到远程服务器上,实质是将脚本执行过程在远程服务器上进行执行

script模块: (运行脚本)

(1)script模块的作用是在运行脚本的是,无需在被控端运行脚本,直接在主控端写好脚本后,直接运行,会在所有被控端主机上执行主控端里的脚本内容
(2)相当于scp+shell组合

# 格式
ansible 172.16.1.21 -m script -a 
'/PATH/TO/SCRIPT_FILE'

#演示
ansible 172.16.1.21 -m script -a ceshi.sh
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to 172.16.1.21 closed.\r\n",
    "stderr_lines": [
        "Shared connection to 172.16.1.21 closed."
    ],
    "stdout": "node1\r\nnode1\r\n",
    "stdout_lines": [
        "node1",
        "node1"
    ]
}

command模块 :(最通用的功能、默认模块)

因为是默认模块可以不写command
ansible app -a 'df -h'

ansible shuai -m command -a "free -m"
ansible shuai -m command -a "cat /etc/redhat-release"
# 说明:执行一个命令在远程节点上

特殊点:不支持的字符,例如 > < | &等 $HOME,替代方案利用用shell模块

ansible shuai -m shell -a "ps -ef|grep ssh"
ansible shuai -m shell -a "echo oldboy >/tmp/a.log"

yum模块:通过yum模块安装软件

依赖于机器里的yum源,如果yum源不匹配会安装失败

# 安装nmap包
ansible shuai  -m yum -a  “name=nmap state=installed”
#多个包一起安装方法
name=vsftp,nmap,nginx,mysql

#卸载包
ansible shuai -m yum -a "name=nmap state=removed"

#更新yum缓存
ansible shuai  -m yum -a  “name=nmap update_cache=yes”

小技巧:
如果是在互联网上下载下来的rpm包,可以先从主控端使用copy模块复制到被控端,然后在使用yum模块进行安装!

service模块:管理软件服务

ansible 主机  -m service -a  “name=服务名  state=状态

ansible app -m service -a "name=vsftp state=started"

ansible app -m service -a "name=vsftp state=started  enabled=yes"

都是过去式(stoped/restarted/started)
enabled=是否开机启动<===>yes/no”

file模块:设置文件属性

说明:设置文件属性信息/链接/目录或者移动文件/链接/目录,很多相同的模块有(copy/template/assemble)

  1. file模块参数使用说明:
ansible 主机 -m 模块 -a src=   dest=  state=

# 创建硬连接
ansible shuai -m file -a  "src=源,远程主机信息  dest=目标  state=hard"

# 创建软连接,于copy的src不同的是copy是指本地源,file的src是指远端
ansible shuai -m file -a  "src=源,远程主机信息  dest=目标  state=link"

# 创建目录
ansible shuai -m file -a  “dest=目标  state=directory”

# 创建文件,类似于touch命令的工作方式
ansible shuai -m file -a  “dest=目标  state=touch”
#或
ansible app -m file -a 'name=/ansible/f2 state=touch'

# 递归删除,如果文件链接会取消链接
ansible shuai -m file -a  “dest=目标  state=absent” 

# 更改用户权限
ansible app -m file -a 'path=/ansible/1.sh owner=root mode=777'

上面用到的:path/name/dest都是相同的作用
state : 状态,指定一个操作命令

cron模块:计划任务管理模块

  • 参数:
minute:  # Minute when the job should run ( 0-59, *, */etc )
hour:    # Hour when the job should run ( 0-23, *, */2, etc )
day:     # Day of the month the job should run ( 1-31, */2, etc )
month:   # Month of the year the job should run ( 1-12, */2, etc )
weekday: # Day of the week that the job should run ( 0- for Sunday-Saturday, *, etc )
job:     # The command to execute or, if env is set, the value of environment variable. The command should not contain line breaks. Required if state=present(指定要干什么事/添加,默认参数,如果不等于会出错).
  • 正常写法:
* * * * *  /bin/sh /server/scripts/test.sh &>/dev/null
  • 模块写法:
# 例一:
ansible shuai -m cron -a "name=alicron  minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"

# 例二:删除任务/慎用
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' state=absent"

# 例三:注释定时任务信息
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'disabled=yes/no“

name=alicron #给计划任务起名,可以防止多重添加一样的定时任务

hostname: (管理主机名)

修改主机名,并且连带修改掉/etc/hostname文件内容

ansible app -m hostname -a 'name=appserver'

Alt text

user : (管理用户)

Ansible user模块主要用于操作系统用户、组、权限、密码等操作

  • user模块使用详解:

system:默认创建为普通用户,为yes则创建系统用户
append:添加一个新的组
comment:添加描述信息
createhome:给用户创建家目录
force:强制删除用户
group:创建用户主组
groups:将用户加入组或者附属组添加
home:指定用户的家目录
name:表示状态,是否create、remove、modify
password:指定用户的密码,为加密密码
remove:删除用户
shell:设置用户的shell登录环境
uid:设置用户ID
update_password:修改用户密码
state:用户状态,默认为present,表示新建用户

  • 模块使用演示
# 创建用户
nsible app -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=504 comment="nginx service"'

# 删除用户并删除家目录
ansible app -m user -a 'name=nginx state=absent remove=yes'

mount模块:挂载模块

  • 配置挂载点

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

  • 模块演示说明:
ansible test -m mount -a 'name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present'

ansible test -m mount -a 'name=/srv/disk src='LABEL=SOME_LABEL' state=present'

ansible test -m mount -a 'name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present'

ansible test -m mount -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'

ansible test -m mount -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'

synchronize模块:使用rsync同步文件模块

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

(1)archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启

(2)checksum: 跳过检测sum值,默认关闭

(3)compress:是否开启压缩

(4)copy_links:复制链接文件,默认为no ,注意后面还有一个links参数

(5)delete: 删除不存在的文件,默认no

(6)dest:目录路径

(7)dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议

(8)dirs:传速目录不进行递归,默认为no,即进行目录递归

(9)rsync_opts:rsync参数部分

(10)set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况

(11)mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件

  • 模块使用演示
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"'

# 复制链接文件
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path archive=no links=yes'

ansible app -m synchronize -a  'src=some/relative/path dest=/some/absolute/path checksum=yes times=no'

ansible app -m synchronize -a 'src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull

猜你喜欢

转载自blog.csdn.net/qq_34672033/article/details/89647523