admin 管理员组文章数量: 887017
目录
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地址 |
---|---|---|
ansible | centos7 | 192.168.100.6 |
node | centos7 | 192.168.100.5 |
node | centos7 | 192.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基础 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726688226h1013228.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论