文章目录
- ansible简介
- ansible优点
- ansible的安装
- ansible的部署
- 构建ansible清单
- 定义ansible清单
- 默认清单
- 自定义清单
- 管理ansible配置文件
- 默认基本配置配置文件
- 为自定义的工作目录创建配置文件
- sudo权力下放
- ansible常用模块
- 运行临时命令 (adhoc模式)
ansible简介
ansible是新出现的自动化运维工具,能够实现批量系统配置、批量程序部署、批量运行命令等功能。减少运维人员工作量。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
ansible优点
1.跨平台支持
不仅可以再linux下部署,也可以再windows下部署。
2.可读性比较强的自动化工具:
ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境。
3.完美描述应用:
可以通过playbook完美描述我们要做的事情。
4.轻松管理版本控制:playbook是纯文本,可视作源代码
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码
8.减少人为错误
任务、play和playbook设计为具有幂等性,所以在运行playbook时,
如果目标主机处于正确状态,则不会进行任何更改。
ansible的安装
安装ansible的rpm包(依赖性为sshpass和phython3-jinjia2)
软件包可以在rpms或者pkgs下载。
1.在workstation上安装ansible,充当控制节点。
2.
2.查看ansible版本信息
ansible --version
3.使用setup模块验证python
ansible的部署
构建ansible清单
定义ansible清单
ansible清单:
定义ansible将要管理的一批主机,将这批主机写到一个清单里。ansible管理这批主机时会读取这个清单。
ansible清单的书写:
- 静态清单
每行一个,填写主机名或ip:
- 可以定义主机组:
- 注意,一台主机可以同时存在多个主机组。
- 定义嵌套组:
- 注意,包含主机组的主机组后必须跟:children。代表包所含主机组的父组。
- 通过范围简化主机规格可以指定主机名称或ip范围或者数字和字母范围:
语法:[start:end] - 代表192.168.0网段到192.168.5网段的所有主机。
- 验证清单
当前管理主机主机名:
可以使用ansible 管理主机主机名 --list-hosts
列出所管理的主机:
ansible workstation.westos.com --list-hosts ##查看当前主机所管理的主机
默认清单
默认清单:/etc/ansible/hosts
一般不使用,如果各个组的运维人员都使用此清单会造成混乱及造成误操作,不易管理。
若没有自己定义清单位置,默认使用此清单。
再此清单中定义主机:
列出所有受管主机:
ansible all --list-hosts
列出vebservers主机组的所有主机:
ansible vebservers --list-hosts
列出不在主机组里的所有主机:
ansible ungrouped --list-hosts
自定义清单
首先建立自定义的目录:mkdir /etc/ansible/test-inventory
在所建立的自定义目录建立清单:vim inventory
查看自定义清单受管的主机(自定义清单:inventory):
ansible all -i inventory --list-hosts
-i 指定清单。(须在清单所在目录执行)
列出自定义清单的未分组主机:
列出自定义清单中verbservers主机组中的主机:
ansible -i inventory vebservers --list-hosts
管理ansible配置文件
默认基本配置配置文件
ansible默认配置文件:/etc/ansible/ansible.cfg
默认信息:
inventory 指定清单
sudousr 默认以哪个身份去ssh连接
ask_pass 是否输入密码
权限提升:
配置ansible如何在受管主机上执行特权升级
默认配置文件是在无其他配置文件的情况下使用(优先级最低)。
所以我们在自定义目录还需要包含自定义的配置文件
~/.ansible.cfg 如果存在此配置并且当前工作目录中也没有ansible.cfg,~/.ansible.cfg 替代/etc/ansible/ansible.cfg
如果工作目录中含有ansible.cfg,则优先使用此配置文件。
为自定义的工作目录创建配置文件
在刚在创建的自定义工作目录中(test-inventory)创建配置文件ansible.cfg,查看此文件是否生效:
ansible all -i inventory --list-hosts -v
查看当前工作目录管理的所有主机,-v显示详细信息:
可以看到,此时使用的是/etc/ansible/test-inventory/ansible.cfg作为配置文件。对新建的配置文件进行配置:
sudo权力下放
使用超级用户在/etc/sudoer.d/下编辑kiosk文件为用户kiosk进行权力下放:
ansible常用模块
使用ansible-doc -l
查看ansible的所有模块:
模块非常多,常用的模块有以下模块 :
文件模块:
-copy:将本地文件复制到受管主机
-file:设置文件的权限和其他属性
-lineinfile:确保特定行是否在文件中
-synchronize:使用rsync同步内容
系统模块:
-firewalld:使用firewalld管理任意端口和服务
-reboot:重启
-service:管理服务
-user:添加、删除和管理用户账户
Net Tools模块:
-get_url:通过http、https、或者ftp下载文件
-nmcli:管理网络
-uri:与web服务交互
ping模块:测试连接可通性,没有参数。通的话返回pong。
command模块:command 命令模块,默认模块(可省略),用于在远程执行命令(不能使用变量),执行的命令不是shall处理,所以不能使用shall变量环境变量,所以不能执行重定向、传送等操作。
在远程主机执行hostname:
ansible vebservers -m command -a /usr/bin/hostname
也可以使用-o将结果输出成一行,方便sed awk进行统计。
当使用shall环境变量时可以使用shall模块。使用shell和command的区别:
补充:set命令是显示系统中已经存在的shell变量。
ansible使用shell模块输出的结果:
使用command模块输出的结果:
练习:给vebservers主机组的主机里/mnt/testfile更换内容
这里使用的为copy模块:
[root@workstation test-inventory]# ansible vebservers -m copy -a 'content="westoslinux\n" dest=/mnt/testfile'
可以看到,vebservers主机组包含的serverb.westos.com 成功替换
结果:
使用 ansible-doc 目标模块
可以获得目标模块的使用帮助:
ansible-doc ping
:
运行临时命令 (adhoc模式)
ansible的两个模式:
adhoc模式:单独命令行操作。
playbook模式:将命令行写在一块,类似于shell中脚本的模式
adhoc模式:
格式:ansible 执行主机 -m 模块 -a 参数 -i 清单
检查能否在受管主机上运行python模块:
ansible all -m ping
注意,ansible是通过ssh连接受管主机,所以应提前做好ansible主机于受管主机之间的免密连接。
练习:使用ansible修改apache默认发布页面(后边更新)