上海市建设网站,网站设计公司排名前十,如何做电商网站分析报告,建筑网站资料排行榜一、Ansible 发展史及功能
作者#xff1a;Michael DeHaan#xff08; Cobbler pxe kikstar 与 Func 作者#xff09;ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具#xff0c;使用它可以在相距数光年的距离#xff0c;远程实时控制前线的舰队战斗2…一、Ansible 发展史及功能
作者Michael DeHaan Cobbler pxe kikstar 与 Func 作者ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具使用它可以在相距数光年的距离远程实时控制前线的舰队战斗2012-03-09发布0.0.1版2015-10-17Red Hat宣布1.5亿美元收购。
Ansible是一个基于Python开发的配置管理和应用部署工具现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点Pubbet和Saltstack能实现的功能Ansible基本上都可以实现。
Ansible能批量配置、部署、管理上千台主机、比如以前需要切换到每个主机上执行的一或多个操作使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。 官网https://www.ansible.com/
官方文档https://docs.ansible.com/1.1 Ansible 功能 批量执行远程命令,可以对远程的多台主机同时进行命令的执行 批量安装和配置软件服务可以对远程的多台主机进行自动化的方式配置和管理各种服务 编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构 提供自动化运维工具的开发API, 有很多运维工具,如jumpserver堡垒机就是基于 ansible 实现自动化管理功能 Ansible是基于模块工作的只是提供了一种运行框架本身没有完成任务的能力真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。 1.2 Ansible 特性 模块化调用特定的模块完成特定任务支持自定义模块可使用任何编程语言写模块账号软件等 Paramikopython对ssh的实现PyYAMLJinja2模板语言三个关键模块 基于Python语言实现 部署简单基于python和SSH(默认已安装)agentless无需代理不依赖PKI无需ssl 安全基于OpenSSH 幂等性一个任务执行1遍和执行n遍效果一样不因重复执行带来意外情况,此特性非绝对 支持playbook编排任务YAML格式编排任务支持丰富的数据结构 剧本演员要按照 系统按照你规定的方式去执行命令 较强大的多层解决方案 role (1) Ansible是基于模块工作的它只是提供了一种运行框架它本身没有完成任务的能力真正执行操作的是Ansible的模块 (2)ansible通常基于ssh连接来控制远程主机远程主机上不需要安装Ansible或其它额外的服务 (3)Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性指的是无论执行多少次同样的运算结果都是相同的即一条命令任意多次执行所产生的影响均与一次执行的影响相同。比如执行 systemctl stop xxx 命令来停止服务当发现要停止的目标服务已经处于停止状态它什么也不会做 所以多次停止的结果仍然是停止不会改变结果它是幂等的而 systemctl restart xxx 是非幂等的。 Ansible的很多模块在执行时都会先判断目标节点是否要执行任务所以可以放心大胆地让Ansible去执行任务重复执行某个任务绝大多数时候不会产生任何副作用。 1.3 Ansible 架构
1.3.1 Ansible组成 INVENTORYAnsible管理主机的清单 /etc/ansible/hosts 需要管理的服务清单,(将你需要管理的主机 、地址 或者名字 写入此文件) MODULESAnsible执行命令的功能模块多数为内置核心模块也可自定义 PLUGINS模块功能的补充如连接类型插件、循环插件、变量插件、过滤插件等该功能不常用 API供第三方程序调用的应用程序编程接口
1.3.2 Ansible 命令执行来源 USER 普通用户即SYSTEM ADMINISTRATOR PLAYBOOKS任务剧本任务集编排定义Ansible任务集的配置文件由Ansible顺序依次执行通常是JSON格式的YML文件 CMDB配置管理数据库 API 调用 PUBLIC/PRIVATE CLOUD API调用
1.3.3Ansible工作原理及流程 ①加载自己的配置文件默认/etc/ansible/ansible.cfg
②查找对应的主机的配置文件找到要执行的主机或组/etc/ansible/hosts文件
③加载自己对应的模块文件如command、yum、ping
④通过ansible将模块命令生成对应的临时py文件(类似python脚本)并将该文件传输至被管理端 ⑤传输到在被控制端的对应用户的家目录下.ansible/tmp/xxx/xxx.py
⑥被控制端给传输过来的py文件加执行权限 ⑦执行并返回结果执行完成后删除py文件并sleep 0退出 二、Ansible
2.1安装 yum源安装 [rootzzzcentos1 ~]#systemctl stop firewalld
[rootzzzcentos1 ~]#setenforce 0
[rootzzzcentos1 ~]#yum install epel-release.noarch -y
[rootzzzcentos1 ~]#yum install ansible -y 编译安装 yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
wget https://releases.ansible.com/ansible/ansible-1.5.4.tar.gz
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible Git方式 yum install git
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
2.2查看基本信息
[rootzzzcentos1 ~]#ansible --version
ansible 2.9.27config file /etc/ansible/ansible.cfgconfigured module search path [u/root/.ansible/plugins/modules, u/usr/share/ansible/plugins/modules]ansible python module location /usr/lib/python2.7/site-packages/ansibleexecutable location /usr/bin/ansiblepython version 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
[rootzzzcentos1 ~]#
2.3相关文件 /etc/ansible/ansible.cfg 主配置文件配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文 件 /etc/ansible/hosts 主机清单 放了被管理的主机 修改的 /etc/ansible/roles/ 存放角色的目录 需要自己建 树状图 /etc/ansible/ ├── ansible.cfg #ansible的配置文件一般无需修改 ├── hosts #ansible的主机清单用于存储需要管理的远程主机的相关信息 └── roles/ #公共角色目录 2.4 ansible 主配置文件
Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下
ANSIBLE_CONFIG #环境变量,注意此项用 ansible --version 看不到,但可以生效
./ansible.cfg #当前目录下的ansible.cfg
~/.ansible.cfg #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg #系统默认配置文件[rootnode1 yum.repos.d]#ansible --version 可以使用 来查看 Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改 [defaults]
#inventory /etc/ansible/hosts #主机列表配置文件
#library /usr/share/my_modules/ #库文件存放目录
#remote_tmp $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp $HOME/.ansible/tmp #本机的临时命令执行目录
#forks 5 #默认并发数
#sudo_user root #默认sudo 用户
#ask_sudo_pass True #每次执行ansible命令是否询问ssh密码
#ask_pass True
#remote_port 22
#host_key_checking False #检查对应服务器的host_key建议取消此行注释,实现第一次连接自动信任目标主机
#log_path/var/log/ansible.log #日志文件建议启用
#module_name command 、mod #默认模块可以修改为shell模块
[privilege_escalation] #普通用户提权配置
#becomeTrue
#become_methodsudo
#become_userroot
#become_ask_passFalse
2.5 inventory 主机清单文件
ansible的主要功用在于批量主机操作为了便捷地使用其中的部分主机可以在inventory 主机清单文件中将其分组组织
默认的inventory file 位置在 /etc/ansible/hosts 官方文档 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html ansible_ssh_host
#将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
#ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口
192.168.1.100:2222ansible_ssh_user
#默认的 ssh 用户名ansible_ssh_pass
#ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)ansible_sudo_pass
#sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)ansible_sudo_exe (new in version 1.8)
#sudo 命令路径(适用于1.8及以上版本)ansible_connection
#与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 smart,smart 方式会根据是否支持 ControlPersist, 来判断ssh 方式是否可行.ansible_ssh_private_key_file
#ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.ansible_shell_type
#目标系统的shell类型.默认情况下,命令的执行使用 sh 语法,可设置为csh 或 fish.ansible_python_interpreter
#目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是/usr/bin/python,比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的Python.之所以不使用 /usr/bin/env 机制,因为这要求远程用户的路径设置正确,且要求 python 可执行程序名不可为 python以外的名字(实际有可能名为python26).与ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径.... 例子 [web] 192.168.91.101:666 #可以指定ssh端口非默认的端口 192.168.91.102 [server] 192.168.91.[100:105] #指定连续的主机 ansible不用启动用的时候自动启动 组名可以自定义例如[web] ①ansible管理不需要输入yes 修改使用ansible管理时不需要输入yes的两种方式 方法一 [rootzzzcentos1 ~]#vim /etc/ssh/ssh_config35 StrictHostKeyChecking no #ask改为no不询问了 方法二 [rootzzzcentos1 ~]#vim /etc/ansible/ansible.cfg71 host_key_checking False #取消此行注释 [rootzzzcentos1 ~]#ansible web -m ping -k 执行返回结果 绿色执行成功并且不需要做改变的操作 黄色执行成功并且对目标主机做变更 红色执行失败 ②开启免密登录 ansible 默认使用 ssh 连接,所以管理前要免密登录 [rootzzzcentos1 ~]#ssh-keygen
[rootzzzcentos1 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.246.8
[rootzzzcentos1 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.246.9 ③使用脚本免密登录 2.6Ansible相关工具 /usr/bin/ansible 主程序临时命令执行工具 /usr/bin/ansible-doc 查看配置文档模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字 /usr/bin/ansible-playbook 定制自动化任务编排剧本工具,相当于脚本 /usr/bin/ansible-pull 远程执行命令的工具 /usr/bin/ansible-vault 文件加密工具 /usr/bin/ansible-console 基于Console界面与用户交互的执行工具 /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
2.6.1 ansible
执行临时任务一次性任务 用法 ansible host-pattern [-m module_name] [-a args]
命令 主机或者清单中的组 -m 指定模块 -a 执行的任务 选项 --version #显示版本
-m module #指定模块默认为command
-v #详细过程 -vv -vvv更详细
--list-hosts #显示主机列表可简写 --list
-C, --check #检查并不执行 检查的是脚本不是配置文件
-T, --timeoutTIMEOUT #执行命令的超时时间默认10s
-k, --ask-pass #提示输入ssh连接密码默认Key验证
-u, --userREMOTE_USER #执行远程执行的用户,默认root
-b, --become #代替旧版的sudo 切换
--become-userUSERNAME #指定sudo的runas用户默认为root vim /etc/sudoers 用户权限
-K, --ask-become-pass #提示输入sudo时的口令
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数 -v #详细过程 -vv -vvv更详细 去被管理的那两台主机看看 --list-hosts #显示主机列表可简写 --list [rootzzzcentos1 ~]#ansible web --list #看当前被管理的主机
[rootzzzcentos1 ~]#ansible all --list #看所有主机 [rootzzzcentos1 ~]#ansible web:nginx --list-hostshosts (4):192.168.246.8192.168.246.9192.168.246.10192.168.246.11
[rootzzzcentos1 ~]#ansible web:nginx --list-hosts
[WARNING]: No hosts matched, nothing to dohosts (0):
[rootzzzcentos1 ~]#ansible web:!nginx --list-hostshosts (2):192.168.246.8192.168.246.9
[rootzzzcentos1 ~]# ansible kube*:etcd:!10.0.0.101 -a reboot reboot 除了本机不重启其他都要重启 -C, --check #检查脚本不是配置文件哦并不执行 -k, --ask-pass #提示输入ssh连接密码默认Key验证 不推荐使用密码用密钥更安全 -f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数 如果你有一百台机器就可以并行十台十台去执行 2.6.2 ansible-doc ansible-doc 模块 #可以看模块的详细信息 [rootzzzcentos1 ~]#ansible-doc -l [rootzzzcentos1 ~]#ansible-doc ping #该模块的详细信息
[rootzzzcentos1 ~]#ansible-doc -l |wc -l
3387
[rootzzzcentos1 ~]#ansible-doc -s ping [rootzzzcentos1 ~]#ansible-doc file
#幂等性安全性自己写脚本 按q退出 2.6.3 ansible-console #此工具可交互执行命令支持tabansible 2.0新增
提示符格式
执行用户当前操作的主机组 (当前组的主机数量)[f:并发数]$常用子命令
设置并发数 forks n 例如 forks 10
切换组 cd 主机组 例如 cd web
列出当前组主机列表 list
列出所有的内置命令 ?或helprootall (4)[f:5]$ cd web
rootweb (2)[f:5]$
rootweb (2)[f:5]$ forks 1
rootweb (2)[f:1]$ [rootnode1 ~]#ansible-console
Welcome to the ansible console.
Type help or ? to list commands.rootall (4)[f:5]$ ping
#直接使用模块
2.6.4 playbook
此工具用于执行编写好的 playbook 任务
范例
ansible-playbook hello.yml
cat hello.yml
---
#hello world yml file
- hosts: websrvsremote_user: rootgather_facts: notasks:- name: hello worldcommand: /usr/bin/wall hello world 2.7 模块
常用模块帮助文档参考
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.htmlhttps://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html 用法 ansible host-pattern [-m module_name] [-a args] 命令 主机或者清单中的组 -m 指定模块 -a 执行的任务 2.7.1 Command 模块 ommand模块是ansible的默认模块 功能在远程主机执行命令此为默认模块可忽略 -m 选项
注意此命令不支持 $VARNAME | ; 等可能用shell模块实现 重定向 |管道符 ;并行执行 后台执行 注意此模块不具有幂等性
[rootzzzcentos1 ~]#ansible web -m command -a cp /etc/passwd /data/ 验证 注意此命令不支持 $VARNAME | ; 等可能用shell模块实现 验证 2.7.2shell模块 功能和command相似用shell执行命令,支持各种符号,比如:*,$, shell 可以用特殊符号可以用的命令更多 注意此模块不具有幂等性 在远程主机执行命令相当于调用远程主机的shell进程然后在该shell下打开一个子shell运行命令支持管道符号等功能
ansible-doc -s shell [rootzzzcentos1 ~]#ansible web -a echo hahahaha /data/test1
192.168.246.9 | CHANGED | rc0 192.168.246.8 | CHANGED | rc0 [rootzzzcentos1 ~]#
验证 实验 [rootzzzcentos1 ~]#ansible web -m shell -a ifconfig ens33|awk NR2{print} 提取出ip地址行 shell模块的常用参数 chdir在远程主机上运行命令的前提进入目录
creates 判断指定文件是否存在 如果存在 不执行后面的操作
removes 判断指定文件知否存在 如果存在 执行后面的操作
2.7.3 Script模块
功能在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意此模块不具有幂等性
[rootzzzcentos1 data]#ansible web -m script -a /data/hello.sh 验证 2.7.4 copy模块
功能从ansible服务器主控端复制文件到远程主机
注意: srcfile 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件 关键字 src 代表源文件路径 dest 代表文件落地路径 owner 属主 group 属组 mode 代表权限backup 如果复制时有同名文件会先备份再复制源文件要有变动才会有备份 [rootzzzcentos1 data]#ansible web -m copy -a src/etc/fstab dest/mnt/ ownerlili mode644 检测 常用参数 mode指出复制时目标文件的权限 owner指出复制时目标文件的属主(对面无此组或此主会报错) group指出复制时目标文件的属组 dest‘路径’目标文件路径 src‘路径’源文件路径 content‘字符串内容’将字符串内容复制到到目标文件中等于重定向即覆盖不能与src同用 [rootzzzcentos1 data]#ansible web -m copy -a src/data/hello.sh dest/mnt/ ownerlili grouplili mode644 验证 backup 如果复制时有同名文件会先备份再复制 (文件内容要发生改变才行) [rootzzzcentos1 data]#ansible web -m copy -a src/data/hello.sh dest/mnt/ ownerlili grouplili mode644 backupyes 验证 我们的hello.sh文件中的内容没有发生改变所以复制到 7-2和7-3下并没有备份 验证 当我们修改了hello.sh文件中的内容后复制时会在7-2和7-3下备份的哦 加 / 和不加 /
ansible web -m copy -a src/etc dest/backup
ansible web -m copy -a src/etc/ dest/backup 不加 / etc会变成子目录连etc一起复制 加 / 只复制etc下的文件 把etc文件夹改名成 backup content [rootzzzcentos1 data]#ansible web -m copy -a contenttest line1\ntest line2\n dest/opt/test.txt 验证 2.7.5 Get_url 模块
功能: 用于将文件从http、https或ftp下载到被管理机节点上
常用参数如下
url: 下载文件的URL,支持HTTPHTTPS或FTP协议
dest:下载到目标路径绝对路径如果目标是一个目录就用服务器上面文件的名称如果目标设置了名称就用目标设置的名称
owner指定属主
group指定属组
mode指定权限
force:如果yesdest不是目录将每次下载文件如果内容改变替换文件。如果否则只有在目标不存在时才会下载该文件checksum:对目标文件在下载后计算摘要以确保其完整性
url_username:用于HTTP基本认证的用户名。对于允许空密码的站点此参数可以不使用url_password
url_password:用于HTTP基本认证的密码。如果未指定url_username参数则不会使用url_password参数
validate_certs如果“no”SSL证书将不会被验证。适用于自签名证书在私有网站上使用
timeout: URL请求的超时时间,秒为单位 [rootzzzcentos1 data]#ansible web -m get_url -a urlhttps://nginx.org/download/nginx-1.18.0.tar.gz dest/data
验证 可以指定名称 验证 md5sum 可以检测文件是否有问题 [rootzzzcentos2 data]#md5sum nginx-1.18.0.tar.gz 官网有md5sum值 [rootzzzcentos2 data]#md5sum nginx-1.18.0.tar.gz
b2d33d24d89b8b1f87ff5d251aa27eb8 nginx-1.18.0.tar.gz
[rootzzzcentos2 data]# 2.7.6 Fetch 模块
功能从远程主机提取文件至ansible的主控端copy相反目前不支持目录 只能传文件不支持文件夹打包成压缩包就行把客户端文件拷贝到ansible的主控端 不支持文件夹怎们办打包成目录就可以了 [rootzzzcentos1 mnt]#ansible web -m fetch -a src/etc/passwd dest/mnt 2.7.7 File模块
功能设置文件属性,创建软链接等 path 指定文件路径 state 文件状态 有新建(touch) 删除(absent) 文件夹(directory) 连接文件(link)等 src 源文件 mode 权限 owner 属主 group 属组 recurse 递归 [rootzzzcentos1 mnt]#ansible web -m file -a path/data/666 statetouch mode644 ownerlili grouplili 验证 ansible web -m file -a path/mnt/web.txt statetouch ownerzhangsan groupzhangsan mode755
#创建空文件
ansible web -m file -a path/mnt/web statedirectory
#新建目录
ansible web -m file -a src/mnt/web path/opt/web-link statelink
#新建软连接 path|dest|name 这三个选项都可以使用
ansible web -m file -a path/opt/web-link stateabsent
#删除文件ansible all -m file -a path/data/mysql statedirectory ownermysql groupmysql
ansible all -m file -a path/data/mysql statedirectory ownermysql groupmysql recurseyes
#递归修改目录及子目录的属性
2.7.8 state模块
功能检查文件或文件系统的状态
注意对于Windows目标请改用win_stat模块 选项 path文件/对象的完整路径必须 常用的返回值判断 exists 判断是否存在 isuid 调用用户的ID与所有者ID是否匹配 [rootzzzcentos1 mnt]#ansible web -m file -a path/mnt/aa statedirectory 验证 删除 [rootzzzcentos1 mnt]#ansible web -m file -a path/mnt/aa/bb/cc stateabsent 验证 给远程主机上创建一个软连接 [rootzzzcentos1 mnt]#ansible web -m file -a src/opt/nihao path/mnt/123.txt statelink 验证 #查看文件是否存在 验证 2.7.9 unarchive 模块
功能解包解压缩
实现有两种用法
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录设置copyyes,此为默认值,可省略
2、将远程主机上的某个压缩包解压缩到指定路径下设置copyno 常见参数 copy默认为yes当copyyes拷贝的文件是从ansible主机复制到远程主机上如果设置为copyno会在远程主机上寻找src源文件 remote_src和copy功能一样且互斥yes表示在远程主机不在ansible主机no表示文件在ansible主机上 src源路径可以是ansible主机上的路径也可以是远程主机(被管理端或者第三方主机)上的路径如果是远程主机上的路径则需要设置copyno dest远程主机上的目标路径 mode设置解压缩后的文件权限 copyyes 把本机压缩包解压到远程主机 加不加这个copyyes效果一样默认是yes [rootzzzcentos1 mnt]#ansible web -m unarchive -a src/mnt/all.tar.gz dest/mnt 验证 copyno 在ansible主机上配置
[rootzzzcentos1 mnt]#ansible web -m unarchive -a src/data/nginx-1.18.0.tar.gz dest/data copyno 验证 2.7.10 Archive模块
功能打包压缩保存在被管理节点对远端主机进行压缩 常用的参数 path: 必须参数远程主机上需要被打包压缩的源文件/目录 dest: 打包压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在则会被覆盖 format: 指定压缩类型包括: bz2、gz默认、tar、xz、zip removeyes|no: 是否删除源文件 [rootzzzcentos1 mnt]#ansible web -m archive -a path/var/log/ dest/data/log.tar.bz2 ownerlili mode0600 验证 解压后的这些文件是7-2自己的因此是对远端主机进行压缩 2.7.11 Hostname模块
功能管理主机名 修改被控制端的主机名 参数name指定被控端的主机名 ansible 192.168.91.102 -m hostname -a namenode3
#一般不使用此模块主机名会一致
2.7.12 Cron 模块
功能计划任务
支持时间minutehourdaymonthweekday #远程主机定义计划任务2种状态present(添加)和absent(移除)默认为present。 常用参数minute/hour/day/month/weekday:分/时/日/月/周 关键字 job:任务计划要执行的命令 name任务计划的名称 ansible-doc -s cron #查看模块常用的参数有哪些 创建任务 [rootzzzcentos1 mnt]#ansible 192.168.246.8 -m cron -a hour*/2 minute30 weekday1-5 namebackup mysql job/root/mysql_backup.sh 验证 删除任务 [rootzzzcentos1 mnt]#ansible 192.168.246.8 -m cron -a namebackup mysql stateabsent 验证 disabledyes 不启用 [rootzzzcentos1 ~]#ansible 192.168.246.8 -m cron -a hour2 minute30 weekday1-5 namebackup mysql job/root/mysql_backup.sh disabledyes 验证 disabledno 启用 验证 2.7.13 Yum和 Apt 模块
功能yum 管理软件包只支持RHELCentOSfedora不支持Ubuntu其它版本apt 模块管理 Debian 相关版本的软件包 在远程主机上安装与卸载软件包 ansible-doc -s yum name参数 必须参数用于指定需要管理的软件包
state参数 用于指定软件包的状态 默认值为。present表示确保软件包已经安装除了。present其他可用值有 installed、 latest、absent、removed其中 installed 与present 等效latest 表示安装 yum 中最新的版本absent 和 removed 等效表示删除对应的软件包。
disable_gpg_check参数 用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no表示不禁用验证设置为 yes 表示禁用验证即不验证包直接安装。在 对应的 yum 源没有开启 gpg 验证的情况下需要将此参数的值设置为 yes否则会报错而无法进行安装。
enablerepo参数 用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件但是你不确定A源是否启用了你可以在安装软件包时 将此参数的值设置为 yes即使A源的设置是未启用也可以在安装软件包时临时启用A源。
disablerepo参数 用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数比如当多个 yum 源中同时存在要安装的软件包时你可 以使用此参数临时禁用某个源这样设置后在安装软件包时则不会从对应的源中选择安装包。enablerepo 参数和 disablerepo 参数可以同时使用name 所安装的包的名称
state present---安装 latest---安装最新的, absent--- 卸载软件。
update_cache 强制更新yum的缓存
conf_file 指定远程yum安装时所依赖的配置文件安装本地已有的包。
disable_pgp_check 是否禁止GPG checking只用于presentor latest。
disablerepo 临时禁止使用yum库。 只用于安装或更新时。
enablerepo 临时使用的yum库。只用于安装或更新时 yum 安装 httpd [rootzzzcentos1 ~]#ansible web -m yum -a namehttpd statepresent
验证 yum 删除或卸载 httpd [rootzzzcentos1 ~]#ansible web -m yum -a namehttpd stateabsent 验证 2.7.14 yum_repository 模块
功能建立yum仓库模块 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 源。 [rootzzzcentos1 ~]#ansible web -m yum_repository -a nameepel descriptionepel baseurlhttps://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheckno fileepel
[rootzzzcentos1 ~]#ansible web -m yum -a namenginx statepresent enablerepoepel 安装nginx 验证 2.7.15 Service 模块
功能管理远程被控制主机上的管理服务的运行状态 常用参数 name“名称” 管理的服务名称 enabletrue/false 设置服务开机自启或关闭 statestart/stop/restart 设置服务的状态 为开始/关闭/重启 enableyes/no 设置是否开机自启runlevel若设置开机自启则要设置在那些系统等级使用 ansible web -m service -a namehttpd statestarted enabledyes
#管理httpd服务 让其开机启动
ansible web -m service -a namehttpd statestopped
#管理httpd服务 让其停止服务
ansible web -m service -a namehttpd statereloaded
#管理httpd服务 让其重新加载配置
ansible web -m service -a namehttpd staterestarted
#管理httpd服务 让其重启 [rootzzzcentos1 ~]#ansible web -m service -a namenginx statestarted enabledyes
验证 2.7.16 mount 挂载和卸载
功能: 挂载和卸载文件系统 常用参数 src定义挂载设备的路径 path定义挂载到哪个目录必须指定 fstype指定挂载文件的系统类型必须指定xfs、iso9660、nfs... opts定义挂载的参数defaults、rw、ro... state定义挂载的状态mounted进行挂载修改/etc/fstab信息、absent永久性卸载并修改 /etc/fstab信息、unmounted临时卸载不修改/etc/fstab信息 [rootzzzcentos1 ~]#ansible web -a blkid 例子
#临时挂载
mount websrvs -m mount -a srcUUIDb3e48f45-f933-4c8e-a700-22a159ec9077 path/home fstypexfs optsnoatime statepresent
#临时取消挂载
mount websrvs -m mount -a path/home fstypexfs optsnoatime stateunmounted
#永久挂载
ansible websrvs -m mount -a src10.0.0.8:/data/wordpress path/var/www/html/wp-content/uploads opts_netdev statemounted
#永久卸载
ansible websrvs -m mount -a src10.0.0.8:/data/wordpress path/var/www/html/wp-content/uploads stateabsent
2.7.17 User 模块
功能管理用户在远程主机设管理用户账户 comment 用户的描述信息 createhome 是否创建家目录 force 在使用stateabsent时, 行为与userdel –force一致. group 指定基本组 groups 指定附加组如果指定为(groups)表示删除所有组 home 指定用户家目录 move_home 如果设置为home时, 试图将用户主目录移动到指定的目录 name 指定用户名 non_unique 该选项允许改变非唯一的用户ID值 password 指定用户密码使用 SHA512 hash remove 在使用stateabsent时, 行为是与userdel –remove一致 shell 指定默认shell state 设置帐号状态不指定为创建指定值为absent表示删除 system 当创建一个用户设置这个用户是系统用户。这个设置不能更改现有用户 uid 指定用户的uid update_ password always 如果password参数设置的值与用户当前的加密过的密码字符串不一致则直接更新用户的密码默认值即为always on_create 如果password参数设置的值与用户当前的加密过的密码字符串不一致则不会更新用户的密码字符串保持之前的密码设定 常用的参数有 name 表示用户名 必选的参数 statepresent 或 absent 表示创建账号或者删除账号 present表示创建 absent表示删除 systemyes或no 表示是否为系统账号 uid表示用户uid group用户基本组 groups用户附加组 shell默认的shell create_homeyes或no 表示是否创建家目录 password 用户的密码 建议使用加密后的字符串 remove为yes或no 当state为absent的时候 是否删除用户的家目录 [rootzzzcentos1 ~]#ansible web -m user -a namehttpd create_homeno shell/sbin/nologin
#创建httpd系统用户 并不创建家目录 以及shell类型为不登陆验证 [rootzzzcentos1 ~]#ansible web -m user -a namelisi groupswheel uid1008创建lisi用户 其uid为1008 加入wheel组中验证 2.7.18 Group 模块
功能管理组
范例
#创建组
ansible websrvs -m group -a namenginx gid88 systemyes
#删除组
ansible websrvs -m group -a namenginx stateabsent 创建组 [rootzzzcentos1 ~]#ansible web -m group -a namenihao gid88 systemyes 验证 使用命令cat /etc/group来查看所有用户组的信息。 使用命令getent group来查看所有用户组的信息。 2.7.19 reboot模块
[rootansible ~]#ansible web -m reboot
2.7.20 Lineinfile 模块
ansible在使用sed进行替换时经常会遇到需要转义的问题而且ansible在遇到特殊符号进行替换时存在问题无法正常进行替换 。
其实在ansible自身提供了两个模块lineinfile模块和replace模块可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块
regexp参数 使用正则表达式匹配对应的行当替换文本时如果有多行文本都能被匹配则只有最后面被匹配到的那行文本才会被替换当删除文本时如果有多行文本都能被匹配这么这些行都会被删除。
如果想进行多行匹配进行替换需要使用replace模块
功能相当于sed可以修改文件内容 关键字 path 指定要操作的文件 regexp 使用正则表达式匹配对应的行 line 修改为新的内容 insertafter 将文本插入到“指定的行”之后 insertbefore 将文本插入到“指定的行”之前 state 删除对应的文本时需要stateabsent backrefs 1.支持后向引用、2.当未匹配到内容则不操作文件 backup 是否在修改文件之前对文件进行备份 create 当要操作的文件并不存在时是否创建对应的文件 将远端主机/etc/fstab 中 所有#开头的行全部删除
[rootzzzcentos1 ~]#ansible web -m lineinfile -a dest/etc/fstab stateabsent regexp^# 验证 例子
[rootzzzcentos1 ~]#ansible web -m lineinfile -a path/etc/httpd/conf/httpd.conf regexp^Listen lineListen 80#将/etc/httpd/conf/httpd.conf 中以Listen开头的行 修改为Listen 80[rootzzzcentos1 ~]#ansible web -m lineinfile -a path/etc/selinux/config regexp^SELINUX lineSELINUXdisabled#将远端主机/etc/selinux/config配置文件中 以Selinux开头的行 更改为SELINUXdisabled
2.7.21 replace 模块
该模块有点类似于sed命令主要也是基于正则进行匹配和替换建议使用
[rootzzzcentos1 ~]#ansible all -m replace -a path/etc/fstab regexp^(UUID.*) replace#\1 验证 2.7.22 setup模块
功能 setup 模块来收集主机的系统信息这些 facts 信息可以直接以变量的形式使用但是如果主机较多会影响执行速度
可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息
范例会对你有用哦查询信息
ansible all -m setup
ansible all -m setup -a filteransible_nodename
ansible all -m setup -a filteransible_hostname
ansible all -m setup -a filteransible_domain
ansible all -m setup -a filteransible_memtotal_mb
ansible all -m setup -a filteransible_memory_mb
ansible all -m setup -a filteransible_memfree_mb
ansible all -m setup -a filteransible_os_family
ansible all -m setup -a filteransible_distribution_major_version
ansible all -m setup -a filteransible_distribution_version
ansible all -m setup -a filteransible_processor_vcpus
ansible all -m setup -a filteransible_all_ipv4_addresses
ansible all -m setup -a filteransible_architecture
ansible all -m setup -a filteransible_uptime_seconds
ansible all -m setup -a filteransible_processor*
ansible all -m setup -a filteransible_env
主机相关信息 仅显示ipv4的信息 当前系统版本