前言
当下有许多的运维自动化工具( 配置管理 ),例如:Ansible、SaltStack、Puppet、Fabric 等。
Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建。
Ansible 特点:
- 部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作。
- 默认使用 SSH(Secure Shell)协议对设备进行管理。
- 主从集中化管理。
- 配置简单、功能强大、扩展性强。
- 支持 API 及自定义模块,可通过 Python 轻松扩展。
- 通过 Playbooks 来定制强大的配置、状态管理。
- 对云计算平台、大数据都有很好的支持。
- 提供一个功能强大、操作性强的 Web 管理界面和 REST API 接口 —- AWX 平台。
Ansible 与 SaltStack:
- 最大的区别是 Ansible 无需在被监控主机部署任何客户端代理,默认通过 SSH 通道进行远程命令执行或下发配置。
- 相同点是都具备功能强大、灵活的系统管理、状态配置,都使用 YAML 格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、大数据都有很好的支持。
1 安装ansible
2 配置ansible
2.1 SSH秘钥认证
2.2 添加被管理主机
2.3 测试ansible
3 hosts主机文件
4 ansible常用模块
4.1 远程命令模块(command / script / shell)
4.1.1 command
command 作为 Ansible 的默认模块,可以运行远程权限范围所有的 shell 命令,不支持管道符。
4.1.2 script
4.1.3 shell
shell模块基本和command相同,但是shell支持管道符
4.2 copy模块
实现主控端向目标主机拷贝文件,类似于 scp 功能
4.3 stat模块
获取远程文件状态信息,atime/ctime/mtime/md5/uid/gid 等信息
4.4 get_url
实现在远程主机下载指定 URL 到本地,支持 sha256sum 文件校验
4.5 yum
软件包管理
4.6 corn
远程主机 crontab 配置
4.7 mount
远程主机分区挂载
4.8 service
远程主机系统服务管理
4.9 user
远程主机用户管理
5 ansible-playbook 详解
5.1 YAML语法
- YAML的语法和其他高阶语言类似并且可以简单表达清单、散列表、标量等数据结构。(列表用横杆表示,键值对用冒 分割,键值对里又可以嵌套另外的键值对)
- YAML文件扩展名通常为.yaml或者.yml。下面为示例
- 一定要对齐,只能使用空格
5.2 核心组件
- tasks:任务
- variables:变量
- templates:模板
- handlers:处理器
- roles:角色
5.3 playbook简单示例
5.3.1 第一个示例
hosts 定义单个主机或组,vars定义变量,remote_user定义执行命令的远程用户,tasks定义执行哪些命令,handlers定义调用哪些处理器
vars(变量):
变量命名: 字母数字下划线组成,只能以字母开头
变量种类:
facts(内置变量)
由远程主机发回的主机属性信息,这些信息被保存在ansible变量当中
例如:ansible 192.168.238.170 -m setup 来获取远程主机上的属性信息,这些属性信息保存在facts中
通过命令行传递
通过命令行传递:ansible-playbook test.yml –extra-vars “host=www user=tom“(如果剧本中已有此处定义的变量则会被覆盖)
通过roles传递
主机变量
在/etc/ansible/hosts中定义
组变量
hosts :
/etc/abible/hosts 中指定的远程主机,并用指定的属性进行连接
5.3.2 第二个示例
- 在playbook中调用变量的方式为{{ variable }}
- when语句用来条件测试
- ansible_os_family 是facts中内置的属性信息 ansible_os_family的信息可以使用ansible all -m setup | grep ansible_os_family 查看
- 在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表
5.3.3 第三个示例
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!