ansible离线安装ansible,ansible安装部署ansible
终极管理员 知识笔记 114阅读
Ansible常用模块 一、Ansible1.1 简介1.2 工作原理1.3 Ansible的特性1.3.1 特性一Agentless即无Agent的存在1.3.2 特性二幂等性 1.4 Ansible的基本组件 二、Ansible环境安装部署2.1 安装ansible2.2 查看基本信息2.3 配置远程主机清单 三、Ansible的模块很重要)3.1 ansible的命令格式3.2 Command模块3.2.1 基本格式和常用参数3.2.2 举个例子 3.3 shell模块3.3.1 基本格式和常用参数3.3.2 举个例子 3.4 cron模块3.4.1 基本格式和常用参数3.4.2 举个例子 3.5 user模块3.5.1 基本格式和常用参数3.5.2 举个例子 3.6 group模块3.6.1 常用参数3.6.2 举个例子 3.7 copy模块 面试常问3.7.1 基本格式和常用参数3.7.2 举个例子 3.8 file模块3.8.1 常用参数3.8.2 举个例子 3.9 hostname模块3.10 ping模块3.11 yum 模块3.12 service/systemd 模块3.13 script 模块3.14 mount 模块3.15 archive 模块3.15.1 常用参数3.15.2 举个例子 3.16 unarchive 模块3.16.1 常用参数3.16.2 举个例子 3.17 replace 模块3.17.1 常用参数3.17.2 举个例子 3.18 setup 模块
一、Ansible 1.1 简介

Ansible是自动化运维工具能实现跨主机对应用编排管理部署。
Ansible能批量配置、部署、管理上千台主机是应用级别的跨主机编排工具。

比如以前需要切换到每个主机上执行的一或多个操作使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。
1.2 工作原理基于模块工作通过模块实现在被控制节点上执行相应的命令操作。
1.3 Ansible的特性 1.3.1 特性一Agentless即无Agent的存在1无客户端agent存在不需要在被控制的节点上安装额外的客户端应用
2通过ssh协议与被控制节点通信。
1.3.2 特性二幂等性所谓幂等性指的是无论执行多少次同样的运算结果都是相同的即一条命令任意多次执行所产生的影响均与一次执行的影响相同。
Ansible的很多模块具有幂等性如果多次模块操作的状态没有发生改变则不会重复执行。
1.4 Ansible的基本组件InventoryAnsible管理的主机清单 /etc/anaible/hosts
需要管理的服务清单 ;
ModulesAnsible执行命令的功能模块多数为内置核心模块也可自定义
Plugins模块功能的补充如连接类型插件、循环插件、变量插件、过滤插件等该功能不常用
API供第三方程序调用的应用程序编程接口。
Playbook基于YAML格式的文件用于定义和描述一系列任务。
二、Ansible环境安装部署在管理端安装 ansible。
#先安装 epel 源yum install -y epel-release#yum安装ansibleyum install -y ansible
#可选操作修改被管理端的主机名方便管理区分hostnamectl set-hostname webserverhostnamectl set-hostname dbserver
2.2 查看基本信息 ansible --version
#查看ansible 目录结构tree /etc/ansible├── ansible.cfg#ansible的配置文件一般无需修改├── hosts#ansible的主机清单用于存储需要管理的远程主机的相关信息└── roles/#公共角色目录
2.3 配置远程主机清单 cd /etc/ansiblevim hosts [webservers]#配置组名192.168.2.102#组里包含的被管理的主机IP地址或主机名主机名需要先修改/etc/hosts文件[dbservers]192.168.2.103
#配置密钥对验证ssh-keygen -t rsa -P -f ~/.ssh/id_rsayum install -y sshpasssshpass -p 123123 ssh-copy-id -o StrictHostKeyCheckingno root192.168.2.102sshpass -p 123123 ssh-copy-id -o StrictHostKeyCheckingno root192.168.2.103
#免密登录测试以被管理端1为例ssh 192.168.2.102
三、Ansible的模块很重要) 3.1 ansible的命令格式 #ansible命令格式ansible 组名 -m 模块名 -a 参数#-a 用于向模块传递参数
#查看当前系统中的ansible模块ansible-doc -l
#查看特定模块的摘要信息ansible-doc -s <module_name>
3.2 Command模块 功能在远程主机执行命令此为默认模块可忽略 -m
选项。
注意此命令不支持 $VARNAME < > | ; & 等即不支持管道符、重定向符号。
注意此模块不具有幂等性
3.2.1 基本格式和常用参数#基本格式ansible <组名/IP> [-m command] -a [参数] 命令
#指定组/IP执行命令ansible 192.168.2.102 -m command -a dateansible webservers -a date #忽略-m选项默认使用command格式
#chdir参数ansible all -m command -a chdir/home ls ./
#creates参数ansible all -m command -a creates/opt/test.txt ls ./
#removes参数ansible all -m command -a removes/opt/test.txt ls ./
3.3 shell模块 功能和command模块类似在远程主机执行命令相当于调用远程主机的shell进程然后在该shell下打开一个子shell运行命令。
注意此模块不具有幂等性
注意此模块支持管道符号等功能
3.3.1 基本格式和常用参数ansible <组/IP/all> -m shell -a
#shell模块能够使用管道符ansible dbservers -m shell -a ifconfig | awk NR2 {print \$2}
功能在远程主机定义crontab任务计划。
ansible-doc -s cron#按 q 退出
3.4.1 基本格式和常用参数 #基本格式ansible <组/IP/all> -m cron -a
1周一到周五早八点半和晚八点半 执行 复制/var/log/messages 到 /opt
ansible dbservers -m cron -a minute30 hour8,20 weekday1-5 job/usr/bin/cp -f /var/log/message /opt namebackup1
2每两个月的5 15 25 执行复制
ansible webservers -m cron -a day5-25/10 month*/2 job/usr/bin/cp -f /var/log/message /opt namebackup15-15/10 #隔十天
3删除
指定状态为absent就行
ansible webservers -m cron -a namebackup1 stateabsent
功能在远程主机管理用户账户
3.5.1 基本格式和常用参数ansible <组/IP/all> -m user -a
ansible dbservers -m user -a nametest01#创建用户test01ansible dbservers -m command -a tail -n1 /etc/passwd
ansible dbservers -m user -a nametest01 stateabsent#删除用户test01ansible dbservers -a tail -n1 /etc/passwd
3.6 group模块 功能在远程主机进行用户组管理的模块
3.6.1 常用参数ansible <组/IP/all> -m group -a
name用户名必选参数
statepresent|absent创建账号或者删除账号present表示创建absent表示删除
systemyes|no是否为系统账号
gid:组id
3.6.2 举个例子ansible dbservers -m group -a namemysql gid306 systemyes#创建mysql组ansible dbservers -m user -a nametest01 uid306 systemyes groupmysql#将test01用户添加到mysql组中ansible dbservers -a id test01
3.7 copy模块 面试常问 功能从ansible服务器主控端复制文件到远程主机
注意srcfile 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
3.7.1 基本格式和常用参数#基本格式ansible < > -m copy -a src dest [owner ] [mode]
ansible dbservers -m copy -a src/etc/fstab dest/opt/fstab.bak ownerroot mode640ansible dbservers -a ls -l /optansible dbservers -a cat /opt/fstab.bak
ansible dbservers -m copy -a contenthelloworld dest/opt/hello.txt #将helloworld写入/opt/hello.txt文件中ansible dbservers -a cat /opt/hello.txt
3.8 file模块 功能在远程主机管理文件属性、创建软链接等
3.8.1 常用参数#基本格式ansible < > -m file -a
#修改文件的属主属组权限等ansible dbservers -m file -a ownertest01 groupmysql mode644 path/opt/fstab.bak
#软连接 statelinkansible dbservers -m file -a path/opt/fstab.link src/opt/fstab.bak statelink
#创建一个空文件,statetouchansible dbservers -m file -a path/opt/abc.txt statetouch#创建一个空目录,statedirectoryansible dbservers -m file -a path/data statedirectory
#删除一个文件,stateabsentansible dbservers -m file -a path/opt/abc.txt stateabsentansible dbservers -a removes/opt/abc.txt ls ./
3.9 hostname模块 功能用于管理远程主机上的主机名
#修改主机名ansible dbservers -m hostname -a namemysql01
3.10 ping模块 功能测试远程主机的连通性。
ansible all -m ping
3.11 yum 模块 功能在远程主机上安装与卸载软件包
ansible webservers -m yum -a namehttpd#安装服务
#卸载服务ansible webservers -m yum -a namehttpd stateabsent
3.12 service/systemd 模块 功能用于管理远程主机上的管理服务的运行状态。
#先安装服务ansible webservers -m yum -a namehttpd#启动httpd服务ansible webservers -m service -a enabledtrue namehttpd statestarted#查看web服务器httpd运行状态ansible webservers -a systemctl status httpd
3.13 script 模块 功能在远程主机执行shell脚本。
注意script模块不具有幂等性所以建议用剧本来执行。
#在本地写一个脚本 vim test.sh #!/bin/bash echo hello ansible from script > /opt/test2.txt、 chmod x test.sh #给脚本执行权限
ansible dbservers -m script -a /opt/test.sh #远程运行本地脚本 ansible dbservers -a cat /opt/test2.txt #查看生成的文件内容
3.14 mount 模块 功能在远程主机挂载目录/设备文件
mounted
、unmounted
或 absent
。opts指定挂载选项例如挂载选项或参数。 ansible dbservers -m mount -a src/dev/sr0 path/mnt statemounted fstypeiso9660#使用 Ansible 的 mount 模块将设备 /dev/sr0 的内容挂载到目标路径 /mnt。#文件系统类型为 iso9660并将该设备标记为已挂载状态
3.15 archive 模块 功能在远程主机压缩文件。
3.15.1 常用参数zip
、tar
、gz
或 bzip2
。默认为 tar
格式。remove指定是否在打包文件之后删除源目录或文件。可选值为 yes
或 no
。默认为 no
即不删除源目录或文件。 3.15.2 举个例子 ansible dbservers -m archive -a path/etc/yum.repos.d/ dest/opt/repo.zip formatzip
#remove参数的使用压缩后删除源文件ansible dbservers -m archive -a path/opt/test2.txt,/opt/123.txt dest/opt/abc123.tar.gz formatgz removeyes
3.16 unarchive 模块 功能将本地或远程主机的压缩包在远程主机解压缩 。
3.16.1 常用参数copy
参数。src指定要解压缩的打包文件路径可以是本地路径或远程路径。dest指定要将文件解压缩到的目标目录。creates指定一个文件路径如果该文件已经存在则不进行解压缩操作。remote_tmp用于制定远程节点上的临时目录。默认为 /tmp
。 #copy参数copy参数的可选值为 yes 或 no。默认为 yes即先将文件从控制节点复制到远程节点然后在远程节点上进行解压缩。如果已经将文件分发到了目标节点并想要提高效率可以将该值设置为 no。反效果的参数为 remote_src。
3.16.2 举个例子 #现在ansible主机建立压缩包tar cf test.tar.gz test.sh #将 ansible 主机的压缩文件拷贝到到远程主机并解压修改文件所属组和用户ansible dbservers -m unarchive -a src/opt/test.tar.gz dest/root copyyes
3.17 replace 模块 功能在远程主机修改文件内容 。
类似于sed命令主要也是基于正则进行匹配和替换。
3.17.1 常用参数#在db服务器的主机下创建测试文件vim /opt/test.txt11 22 33 44 55 66aa bb cc dd ee ff1a 2b 3c 4d 5e 6f
#匹配 33 并修改为 cccansible dbservers -m replace -a path/opt/test.txt regexp33 replacecc#查看ansible dbservers -a cat /opt/test.txt
#匹配到任意一个或多个开头的行增加注释ansible dbservers -m replace -a path/opt/test.txt regexp^(.*) replace#\1#取消注释ansible dbservers -m replace -a path/opt/test.txt regexp^#(.*) replace\1
#匹配以 a 开头的后面有一个或者多个字符的行并在前面添加 # 注释ansible dbservers -m replace -a path/opt/test.txt regexp^(a.*) replace#\1
3.18 setup 模块 功能使用facts组件获取远程主机的系统信息(facts信息)
ansible webservers -m setup#获取mysql组主机的facts信息ansible dbservers -m setup -a filter*ipv4 #使用filter可以筛选指定的facts信息
facts信息
主机的各种信息包括硬件、操作系统、网络等。
运行命令后会返回一个包含主机 facts 信息的 JSON 格式输出。