Ansible基础

编程知识 更新时间:2023-04-16 00:51:23

目录

Ansible介绍

Ansible特点

Ansible puppet saltstack三款自动化运维工具的对比

Ansible部署教程

Ansible连接方式

基于密码连接

基于秘钥连接

临时指定inventory

inventory参数

匹配规则

ansible命令详解

ansible-doc命令详解

Ansible Ad-hoc常用模块

command

 shell模块

script模块

file模块

copy模块

template模块

ferch模块

user模块

group模块

yum_repository模块

mount模块

yum模块

service systemd模块

cron模块

setup模块

find模块

replace模块

unarchive模块


Ansible介绍

Ansible是近年越来越火的一款运维自动化工具,其主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率。

ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作

Ansible特点

  • 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  • 默认使用SSH协议对设备进行管理;
  • 有大量常规运维操作模块,可实现日常绝大部分操作。
  • 配置简单、功能强大、扩展性强;
  • 支持API及自定义模块,可通过Python轻松扩展;
  • 通过Playbooks来定制强大的配置、状态管理;
  • 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  • 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
     

Ansible图解

Ansible:Ansible核心程序。核心执行工具,一次性虎林市的操作都是通过该命令执行
HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
Playbooks:“任务剧本(又称任务集)”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
ConnectionPlugins:连接插件,Ansible和Host通信使用

Ansible puppet saltstack三款自动化运维工具的对比

名称

Puppet

SaltStack

Ansible

开发语言

Ruby

Python

Python

客户端

二次开发

不支持

支持

支持

通信验证

同学加密

标准SSL协议

AES加密

OpenSSH

平台支持

AIX,BSD,HP-UX,Linux,Mac OS X,Solaris,Windows

BSD,Linux,Mac OS X,Solaris,Windows

AIX,BSD,HP-UX,Linux,Mac OS X,Solaris

配置文件格式

Ruby语法格式

YAML

YAML

Web UI

提供

提供

提供(商业版本)

命令执行

不支持(配置模块可实现)

支持

支持

名称

优势

劣势

成本

Puppet

模块由Ruby或Ruby子集编写push命令可以即可触发变更Web界面生成处理报表、资源清单、实时节点管理代理运行端进行详细、深入的报告和对节点进行配置

相对其他工具较复杂,需学习Puppet的DSL或Ruby安装过程缺少错误校验和产生错误报表

开源软件免费SaltStack企业版每年内个节点花费约¥100

Saltstack

状态文件可用简单YAML配置模块或复杂的Python/PyDSL脚本与客户端可以基于SSH或在被管节点安装代理Web界面可看到运行的工作、minion状态、事件日志、可在客户端执行命令扩展能力极强

Web界面像毒药竞争产品不稳定与相对不完善缺乏生成深度报告的能力

开源软件免费SaltStack企业版每年内个节点花费约¥150,随着数量增加相应的会有折扣

Ansible

模块可以用任何语言开发备管节点不需要安装代理软件有Web管理界面、可配置用户、组、资源清单和执行Playbook安装、运行极其简单

对备管理节点为Windows有待加强Web管理界面是内置的Ansible的一部分需导入资源清单执行效率较低

开源版本免费Ansible Tower小于10台被管理节点免费超过10太后没年每台需支付¥100~$250的支持服务费用

Ansible部署教程

主机            操作系统      IP地址
ansiblecentos7192.168.100.6
nodecentos7192.168.100.5
nodecentos7192.168.100.4

#下载阿里云仓库
wget http://mirrors.aliyun/repo/Centos-7.repo

#现在epel源
yum install -y epel-release

下载ansible
yum install ansible -y


#查看版本
ansible --version

Ansible连接方式

基于密码连接

#修改ansible的hosts文件
vim /etc/ansible/hosts

#方法一
[web]
192.168.100.4 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123123"
192.168.100.5 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123123"

#方法二
[web]
192.168.100.[5:8] ansible_ssh_user=root ansible_ssh_pass="123123"


#方法三
[web]
192.168.100.4
192.168.100.5

[web:vars]
ansible_ssh_pass="123123"

基于秘钥连接

#创建密钥对并发送到控制端
ssh-keygen -t rsa
ssh-copy-id root@192.168.100.4
ssh-copy-id root@192.168.100.5


#修改ansible的hosts文件
vim /etc/ansible/hosts

[web]
192.168.100.4

[db]
192.168.100.5

#还可以定义多个组,把一个组当另一个组的组成员
[web]
192.168.100.4

[db]
192.168.100.5

[lyh]
web
db

临时指定inventory

#编辑一个主机清单
vim /root/user

[docker]
192.168.100.4 ansible_ssh_pass='123123'
192.168.100.5


#执行命令指定inventory
ansible dockers -m ping -i /root/user -o

inventory参数

参数名参数说明
ansible_ssh_host定义主机的ssh地址
ansible_ssh_port定义主机的ssh端口
ansible_ssh_user定义主机的ssh认证用户
ansible_ssh_pass定义主机的ssh认证密码
ansible_sudo定义主机的sudo用户
ansible_sudo_pass定义主机的sudo密码
ansible_sudo_exe定义主机的sudo路径
ansible_connection定义主机连接方式
ansible_ssh_private_key_file定义主机私钥文件
ansible_shell_type定义主机shell类型
ansible_python_interpreter定义主机python解释器路径

匹配规则

 以此图为例

#主机的匹配
#匹配单个主机
ansible 192.168.100.4 -m ping
#匹配多个主机
ansible 192.168.100.4,192.168.100.5 -m ping 
#匹配所有
ansible all -m ping 


#组的匹配
#一个组内所有主机匹配
ansible web -m ping
#匹配web组里有,但db组里没有的主机
ansible 'web:!db' -m ping -o
#匹配web组和db组都有的主机(交集)
ansible 'web:&db' -m ping -o
#匹配web组和db组所有的主机(并集)
ansible 'web:db' -m ping -o 等同于 ansible web,db -m ping 

ansible命令详解

ansible --help
Usage: ansible <host-pattern> [options]
​
​
选项:
  -a MODULE_ARGS, --args=MODULE_ARGS                                #指定模块的参数
  --ask-vault-pass                                                  #询问账号的密码
  -B SECONDS, --background=SECONDS                                  #异步运行,在指定秒后异步运行失败
  -C, --check                                                       #不做出任何改变,只是进行测试检查
  -D, --diff                                                        #当更改(小)文件和模板时,显示这些文件中的差异
  -e EXTRA_VARS, --extra-vars=EXTRA_VARS                            #将其他变量设置为key=value或YAML/JSON,如果文件名前面有@
  -f FORKS, --forks=FORKS                                           #指定要使用的并行进程数,例如100台机器,-f指定每次运行几台,默认每次运行5台
  -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY   #指定主机列表路径,如果不指定,默认为/etc/ansible/ansible.cfg中指定的hosts
  -l SUBSET, --limit=SUBSET                                         #将选定的主机限制为附加模式。
  --list-hosts                                                      #列出清单中的主机列表,不进行任何操作         
  -m MODULE_NAME, --module-name=MODULE_NAME                         #指定要执行的模块名称,默认为 command 模块
  -M MODULE_PATH, --module-path=MODULE_PATH                         #指定要执行模块的路径,默认模块路径为~/.ansible/plugins/modules:/usr/share/ansible/plugins
  -o, --one-line                                                    #浓缩输出
  --playbook-dir=BASEDIR                                            #指定playbook文件目录
  -P POLL_INTERVAL, --poll=POLL_INTERVAL                            #指定轮训间隔时间,默认为15
  --syntax-check                                                    #如果使用了playbook则执行--syntax-check对剧本进行check
  -t TREE, --tree=TREE                                              #将ansible输出记录到指定目录
  --vault-id=VAULT_IDS  the vault identity to use
  --vault-password-file=VAULT_PASSWORD_FILES
                        vault password file
  -v, --verbose                                                     #详细模式(-VVV更多,-VVVV可启用连接调试)
  --version                                                         #显示程序的版本号、配置文件位置、配置模块搜索路径、模块位置、可执行位置和退出
​
 
 
  特权提升选项:
    -b, --become                                                    #临时使用--become-method指定的提取方法
    --become-method=BECOME_METHOD                                   #使用权限提升方法(默认值=sudo)
    --become-user=BECOME_USER                                       #以该用户的身份运行操作(默认值=root)
    -K, --ask-become-pass                                           #请求权限提升密码
​
​
​
  连接选项:
    -k, --ask-pass                                                  #请求连接密码
    --private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE     #指定私钥文件进行登录
    -u REMOTE_USER, --user=REMOTE_USER                              #指定连接用户,默认不指定则为hosts文件中用户
    -c CONNECTION, --connection=CONNECTION                          #连接方式,默认为smart,还有ssh和sftp
    -T TIMEOUT, --timeout=TIMEOUT                                   #ansible连接超时时间,默认为10s
    --ssh-common-args=SSH_COMMON_ARGS                               #指定要传递到SFTP/SCP/SSH的常见参数(例如ProxyCommand)
    --sftp-extra-args=SFTP_EXTRA_ARGS                               #指定要传递到SFTP的额外参数(例如-f、-l)
    --scp-extra-args=SCP_EXTRA_ARGS                                 #指定要传递到SCP的额外参数(例如-1)
    --ssh-extra-args=SSH_EXTRA_ARGS                                 #指定只传递给ssh的额外参数(例如-R)

ansible-doc命令详解

ansible-doc -h
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
​
Options:
  -j, --json                                                        #仅用于内部测试,为所有插件转储json元数据
  -l, --list                                                        #列出ansible内置的所有模块
  -F, --list_files                                                  #在没有摘要的情况下显示插件名及其源文件(暗示-列表)
  -M MODULE_PATH, --module-path=MODULE_PATH                         #模块路径,默认为 ~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
  -s, --snippet                                                     #显示指定插件的参数等,用法 ansible-doc -s module_name 
  -t TYPE, --type=TYPE                                              #选择插件类型,默认为模块 

Ansible Ad-hoc常用模块

command

ansible默认的模块,可以直接执行命令,但"<,>,|,:,&,$等特殊字符不能再command中运行,如需使用,需在shell模块使用。

#查看模块参数
ansible-doc -s command

#在web组执行ls命令
ansible web -m command -a 'ls'
#由于command是ansible的默认模块可以简写
ansible web -a 'ls'

#chdir切换目录,一般在编译的时候使用
ansible web -m command -a 'chdir=/tmp pwd'

#creates 如果creates的文件存在,则不执行后面的命令
ansible web -m command -a 'creates=/tmp ls /etc/passwd'

#creates 如果creates的文件不存在,则执行后面的命令
ansible web -m command -a 'creates=/tmp1 ls /etc/passwd'

#removes和creates相反如果removes的文件存在,则执行后面的命令
ansible web -m command -a 'removes=/tmp ls /etc/passwd'

#如果removes的文件不存在,则不执行后面的命令
ansible web -m command -a 'removes=/tmp1 ls /etc/passwd'

 shell模块

专门用来执行shell命令的模块,和command模块一样,参数基本一致,可执行"<,>,|,:,&,$等特殊字符,都有如chdir、creates、removes等参数。

#查看模块参数
ansible-doc -s shell

#基本命令和command是一样的
ansible web -m shell -a 'mkdir /tmp/test'
ansible web -m shell -a 'ls /tmp/'

#执行下面这条命令,每次执行都会更新文件的时间戳
ansible web -m shell -a 'cd /tmp/test && touch 1.txt &&ls -lh'

#由于有时候不想更新文件的创建时间戳,则如果存在则不执行,使用creates
ansible web -m shell -a 'creates=/tmp/test && touch 1.txt &&ls -lh'

由图可见command不支持&&等字符

script模块

由于在被管理机器上面执行shell脚本的模块,脚本无需在被管理机器上面存在。

#查看模块参数
ansible-doc -s script

free_form参数     必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地,并没有具体的一个参数名叫 free_form,具体解释请参考 command 模块。
chdir参数         此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。
creates参数       使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。
removes参数       使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。


#编写脚本
vim ansible_script.sh
#!/bin/bash
echo "hostname"

#在所有被管理机器上执行该脚本
ansible all -m script -a '/root/ansible_script.sh'

file模块

用于对文件的处理,创建,删除,控制权限等。

#查看模块参数
ansible-doc -s file

path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况

state:
=directory:如果目录不存在,创建目录
=file:即使文件不存在,也不会被创建
=link:创建软链接
=hard:创建硬链接
=touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
=absent:删除目录、文件或者取消链接文件


#创建目录
ansible web -m file -a 'path=/tmp/test1 state=directory'

#创建文件
ansible web -m file -a 'path=/tmp/test2 state=touch'

#创建软连接
ansible web -m file -a 'src=/tmp/test1 path=/tmp/test3 state=link'

#删除文件
ansible web -m file -a 'path=/tmp/test3 state=absent'

#创建文件同时设置权限信息
ansible web -m file -a 'path=/tmp/test3 state=directory mode=755 owner=root group=root'

copy模块

用于管理端复制文件到远程主机,并可以设置权限,属主,属组等。

#查看模块参数
docker-doc -s copy

src:用于指定需要copy的文件或目录。
dest:用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
content:直接在远程主机被管理文件中添加内容,会覆盖源文件内容
force:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup:设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
owner:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode:指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r--r--“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。


#复制文件到远程主机并改名
ansible web -m copy -a 'src=/root/ansible_test.sh dest=/tmp/a.sh'

#复制文件到远程主机,并备份远程文件。
ansible web -m copy -a 'src=/root/ansible_test.sh dest=/tmp/a.sh backup=yes'

#直接在远程主机a.sh中添加内容
ansible web -m copy -a 'content="#!/bin/bash\n echo 'uptime'" dest=/tmp/a.sh'

#复制文件到远程主机,并设置权限及属主与属主
ansible web -m copy -a 'src=/etc/passwd dest=/tmp/passwd mode=700 owner=root group=root'

template模块

也是用于管理端复制文件到远程主机,并可以设置权限,属主,属组等。和copy的区别是,在文件中支持变量

#查看模块参数
docker-doc -s template

owner参数:     指定最终生成的文件拷贝到远程主机后的属主。
group参数:     指定最终生成的文件拷贝到远程主机后的属组。
mode参数:      指定最终生成的文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r–r--",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。

除了上述参数,还有如下参数也很常用
force参数:     当远程主机的目标路径中已经存在同名文件,并且与最终生成的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup参数:    当远程主机的目标路径中已经存在同名文件,并且与最终生成的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将最终生成的文件拷贝到远程主机。

ferch模块

用于从被管理机器上拉取文件,拉取下来的内容会保留目录结构,一般情况下用于收集被管理机器的日志文件等。

#查看模块参数
ansible-doc -s fetch


src  指定需要从远端机器拉取的文件路径
dest 指定从远端机器拉去下来的文件存放路径
flat yes 不按照src的目录来创建目录,flat为no就在当前路径创建和src一样的目录路径

#从被管理机器拉取cron日志文件,默认会在本地创建一个节点地址目录
ansible web -m fetch -a 'src=/var/log/cron dest=/tmp'

user模块

用于对系统用户的管理,用户的创建、删除、家目录、属组等设置。

#查看模块参数
ansible-doc -s user

参数		    释义
password		请输入密码信息
name		    指定用户名信息
uid		        指定用户uid信息
group		    指定用户主要属于哪个组
groups		    指定用户属于哪个附加组信息
shell		    指定是否能够登录
create_home	    是否创建家目录信息
home		    指定家目录创建在什么路径 默认/home


#创建用户名,指定家目录,指定UID组
ansible web -m user -a 'name=mysql home=/home/mysql uid=1002 group=root'
#查看
ansible web -m shell -a 'id mysql && ls -1 /opt'

#创建用户,不创建家目录,并且不能登录
ansible web -m user -a 'name=nginx shell=/bin/nologin uid=1003 create_home=no'
#查看
ansible web -m shell -a 'id nginx && tail -1 /etc/passwd'

#删除用户
ansible web -m user -a 'name=nginx state=absent'

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

group模块

用于创建组,当创建用户时如果需要指定组,组不存在的话就可以通过group来创建组

#ansible-doc -s group

参数	   	释义
gid		    指创建的组ID信息
name		指创建组名称信息
state	    删除指定的用户组
=		    创建指定的用户组

#创建组
ansible web -m group -a 'name=www'

#创建组并制定gid
ansible web -m group -a 'name=www1 gid=1005'

#删除组
ansible web -m group -a 'name=www state=absent'

yum_repository模块

管理远程主机上的yum仓库

#查看模块参数
ansible-doc -s yum_repository

name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
baseurl参数:此参数用于设置 yum 仓库的 baseurl。
description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中可以存在多个 yum 源。
enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数:此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey参数:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。

#给远程主机创建yum仓库
ansible web -m yum_repository -a 'name=lyh description="lyh" baseurl=file:///media/cdrom enabled=1 gpgcheck=no file=lyh'

ansible web -m shell -a 'ls /etc/yum.repos.d/'

mount模块

管理被控端设备挂载。

#查看模块参数
ansible-doc -s mount

参数	    说明
src	        本地或远程设备的路径
path	    设备挂载至本地的路径
fstype	    挂载的文件系统类型,xfs、nfs...
opts	    挂载的参数,defaults、ro...
state	    挂载的状态,absent、mounted、unmounted

#将/dev/cdrom挂载到/media/cdrom,并设置开机自动挂载
ansible web -m mount -a 'src=/dev/cdrom path=/media/cdrom fstype=iso9660 state=present'

#临时卸载/dev/cdrom但不清理/etc/fstab
ansible web -m mount -a 'src=/dev/cdrom path=/media/cdrom fstype=iso9660 state=unmounted'

#永久删除/dev/cdrom,同时清理/etc/fstab
ansible web -m mount -a 'src=/dev/cdrom path=/media/cdrom fstype=iso9660 state=sbsent'

yum模块

用于对软件包的管理、下载、安装、卸载、升级等操作

#查看模块参数
ansible-doc -s yum

name	                指定安装软件包名或软件包URL
enablerepo	            允许从哪些仓库获取软件
disablerepo	            禁止从哪些仓库获取软件
exclude	                排除某些软件包,例如kernel
download_only	        仅下载软件包,不安装
disable_gpg_check	    不进行gpg检测
update_cache	        可以在安装包的同时更新yum缓存
list
    installed           列出所有已安装的软件包
    updates             列出所有可更新的软件包 
    repos               列出所有yum仓库
state	                
    installed,present  安装软件包
    removed,absent     卸载软甲包
    latest              安装最新软件包


#列出所有已安装的软件包
ansible web -m yum -a 'list=installed'

#列出所有可更新软件包
ansible web -m yum -a 'list=updates'

#列出所有yum仓库
ansible web -m yum -a 'list=repos'

#安装apache
ansible web -m yum -a 'name=httpd state=installed'

#卸载apache
ansible web -m yum -a 'name=httpd state=removed'

#安装最新apache,通过epel源安装
ansible web -m yum -a 'name=httpd state=prestet enablerepo=epel'

#安装最新版本的 Apache 软件,如果存在则更新 Apache
ansible web -m yum -a 'name=httpd state=latest'

#更新所有的软件包,但排除和kernel相关的
ansible web -m yum -a "name=* state=latest exclude=kernel"

#安装包组,类似yum groupinstall
ansible web -m yum -a 'name="@DevelopmentTools" state=installed'


service systemd模块

服务模块,用于对服务进行管理,服务的启动、关闭、开机自启等

#查看模块参数
ansible-doc -s service    或者systemd

name                指定需要管理的服务名
enable              指定开机是否自启
state               指定服务状态
    started         启动服务
    stopped         停止服务
    restarted       重启服务
    reloaded        重载服务

#启动httpd并设置开机自启
ansible web -m service -a 'name=httpd state=started enabled=yes'

#关闭httpd并关闭开机自启
ansible web -m service -a 'name=httpd state=stopped enabled=no'

cron模块

用于指定任务计划

#查看模块参数
ansible-doc -s cron

参数	    说明
name	    定时任务基本描述
job	        定时任务要执行的命令
minute	    分
hour	    小时
day	        日
month	    月
weekday	    周,0-6
disabled	yes:禁用计划任务,no:启用计划任务

#创建一个任务计划并起名
ansible web -m cron -a 'name="ceshi" minute=* hour=* day=* month=* weekday=* job="/bin/bash /root/test.sh"'

#查看 
ansible web -m shell -a 'crontab -l'

#删除任务计划(如果创建时候没有起名,则在name输入None)
ansible web -m cron -a 'name="ceshi" job="/bin/bash /root/test.sh" state=absent'

#添加定时任务, 每天的凌晨2点和凌晨5点执行一次ls
ansible web -m cron -a 'name="ls" job="ls &> /dev/null" minute=0 hour=2,5'

#禁用上面示例的计划任务:
ansible web -m cron -a 'name="ls" job="ls &> /dev/null" minute=0 hour=2,5 disabled=yes'

setup模块

用于获取系统信息的一个模块

#查看模块信息
ansible-doc -s setup

filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

#常见的过滤选项
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 web -m setup

#返回web组的IP地址
ansible web -m setup -a 'filter=ansible_all_ipv4_addresses'

#返回web组的内存信息。
ansible web -m setup -a "filter=ansible_memory_mb"

#通过通配符实现模糊匹配,比如以”mb”关键字结尾的信息
ansible web -m setup -a "filter=*mb"

find模块

在被管理主机中查找符合条件的文件

#查看模块参数
ansible-doc -s find

paths参数 :       必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,此参数有别名,使用别名 path 或者别名 name 可以代替 paths。
recurse参数 :      默认情况下,只会在指定的目录中查找文件,也就是说,如果目录中还包含目录,ansible 并不会递归的进入子目录查找对应文件,如果想要递归的查找文件,需要使用 recurse 参数,当 recurse 参数设置为 yes 时,表示在指定目录中递归的查找文件。
hidden参数 :      默认情况下,隐藏文件会被忽略,当 hidden 参数的值设置为 yes 时,才会查找隐藏文件。
file_type参数 :    默认情况下,ansible 只会根据条件查找”文件”,并不会查找”目录”或”软链接”等文件类型,如果想要指定查找的文件类型,可以通过 file_type 指定文件类型,可指定的文件类型有 any、directory、file、link 四种。
patterns参数 :    使用此参数指定需要查找的文件名称,支持使用 shell(比如通配符)或者正则表达式去匹配文件名称,默认情况下,使用 shell 匹配对应的文件名,如果想要使用 python 的正则去匹配文件名,需要将 use_regex 参数的值设置为 yes。
use_regex参数:    默认情况下,find 模块不会使用正则表达式去解析 patterns 参数中对应的内容,当 use_regex 设置为 yes 时,表示使用 python 正则解析 patterns 参数中的表达式,否则,使用 glob 通配符解析 patterns 参数中的表达式。
contains参数:     使用此参数可以根据文章内容查找文件,此参数的值为一个正则表达式,find 模块会根据对应的正则表达式匹配文件内容。
age参数 :         使用此参数可以根据时间范围查找文件,默认以文件的 mtime 为准与指定的时间进行对比,比如,如果想要查找 mtime 在3天之前的文件,那么可以设置 age=3d,如果想要查找 mtime 在3天以内的文件,可以设置 age=-3d,这里所说的3天是按照当前时间往前推3天,可以使用的单位有秒(s)、分(m)、时(h)、天(d)、星期(w)。
age_stamp参数 :   文件的时间属性中有三个时间种类,atime、ctime、mtime,当我们根据时间范围查找文件时,可以指定以哪个时间种类为准,当根据时间查找文件时,默认以 mtime 为准。
size参数 :        使用此参数可以根据文件大小查找文件,比如,如果想要查找大于3M的文件,那么可以设置 size=3m,如果想要查找小于50k的文件,可以设置 size=-50k,可以使用的单位有 t、g、m、k、b。
get_checksum参数 :当有符合查找条件的文件被找到时,会同时返回对应文件的 sha1校验码,如果要查找的文件比较大,那么生成校验码的时间会比较长。



#在web组的/lyh目录中查找文件内容中包含 abc 字符串的文件,隐藏文件会被忽略,不会进行递归查找。
ansible web -m find -a 'paths=/lyh contains=".*abc.*"'

#在web组的/lyh目录以及其子目录中查找文件内容中包含 abc 字符串的文件,隐藏文件会被忽略。
ansible web -m find -a 'paths=/lyh contains=".*abc.*" recurese=yes'

#在web组的/lyh目录中查找以 .sh 结尾的文件,包括隐藏文件,但是不包括目录或其他文件类型,不会进行递归查找
ansible web -m find -a 'paths=/lyh patterns="*.sh" hidden=yes'

#在web组的/lyh目录中查找以 .sh 结尾的文件,包括隐藏文件,包括所有文件类型,比如文件、目录、或者软链接,但是不会进行递归查找。
ansible web -m find -a 'paths=/lyh patterns="*.sh" file_type=any hidden=yes'

replace模块

可以根据我们指定的正则表达式替换文件中的字符串,文件中所有匹配到的字符都会被替换

#查看模块参数
ansible-doc -s replace

path参数     必须参数,指定要操作的文件,2.3版本之前,只能使用 dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为 path 参数的别名使用。
regexp参数   必须参数,指定一个 python 正则表达式,文件中与正则匹配的字符串将会被替换。
replace参数  指定最终要替换成的字符串。
backup参数   是否在修改文件之前对文件进行备份,最好设置为yes。

#把web组中/lyh/test 文件中的所有 ABC 替换成 abc。
ansible web -m replace -a 'path=/lyh/test regexp="ABC" replace=abc'

#把web组中/lyh/test 文件中的所有 ABC 替换成 abc,但在之前先备份。
ansible web -m replace -a 'path=/lyh/test regexp="ABC" replace=abc backup=yes'

unarchive模块

解压复制远程主机上的压缩文件

#查看模块参数

creates:        一个文件名,当它已经存在时,这个步骤将不会被运行。
copy:           默认为yes,拷贝的文件从ansible主机复制到远程主机,no在远程主机上寻找src源文件解压
src:            tar源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需设置copy=no
dest:           远程主机上的目标绝对路径
mode:           设置解压缩后的文件权限
exec:           列出需要排除的目录和文件
remote_src:     设置remote_src=yes为解包目标上已经存在的档案。对于Windows目标,改用win_unzip模块。
owner:          解压后文件或目录的属主
group:          解压后的目录或文件的属组

#将本地包解压到被管理端并设置权限
ansible all -m unarchive -a 'src=/src/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'

更多推荐

Ansible基础

本文发布于:2023-04-13 01:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a5204d804e5ff7a10be9bdee1a712741.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   Ansible

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 71380文章数
  • 14阅读数
  • 0评论数