ansible all -m copy -a ‘content=“hello westos”\n dest=/etc/motd’ -u student --become@[TOC](目录)
1. ansible的介绍
ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具 。它具有基于Python开发,集合了众多运维工具 (puppet、chef、func、fabric) 的优点,实现了 批量系统配置、批量程序部署、批量运行命令等功能。
2. ansible的优点
1.跨平台支持
2.人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
3.完美描述应用:playbook
4.轻松管理版本控制:playbook是纯文本,可视作源代码
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码
8.减少人为错误
3. ansible的安装
1.在workstation上安装ansible,充当控制节点
yum install -y ansible
2.查看ansible版本信息
ansible --version
3.使用setup模块验证python
4. 构建 ansible 清单
清单:
定义了 ansible 将要管理的一批主机。清单就是我们的主机清单,里面保存的是一些 ansible 需要连接管理的主机列表
4.1 静态清单
注意: 一台主机可以存在于多个主机组
4.2 定义嵌套组
ansible 主机清单可以包含多个主机组构成的组
4.3 通过范围简化主机规格
可以指定主机名称或 ip 范围或者数字和字母范围
- 语法:
4.4 验证清单
4.5 默认清单位置:
/etc/ansible/hosts
4.6 动态清单
可以从开源社区的脚本中获取
5. 管理 ansible 配置文件
5.1 ansible程序结构
配置文件目录 | /etc/ansible/ |
---|---|
执行文件目录 | /usr/bin/ |
Lib库依赖目录 | /usr/lib/pythonX.X/site-packages/ansible/ |
Help文档目录 | /usr/share/doc/ansible-X.X.X/ |
Man文档目录 | /usr/share/man/man1/ |
5.2 配置文件:
/etc/ansible/ansible.cfg | 基本配置文件,如果找不到其他配置文件时可使用 |
---|---|
~/.ansible.cfg | 如果存在此配置并且当前工作目录中也没有 ansible.cfg,此 文件替代/etc/ansible/ansible.cfg |
./ansible.cfg | 执行 ansible 命令的目录中如果有 ansible.cfg,就用它,不 使用上面两个(推荐使用,上面两个不常用) |
5.3 显示使用的配置文件
5.4 管理配置文件中的设置:
[defaults] | 部分设置 ansible 操作的默认值 |
---|---|
[privilege_escalation] | 配置 ansible 如何在受管主机上执行特权升级 |
vim /root/deploy-inventory/ansible.cfg
5.4 使用 sudo 进行权限下放
使用超级用户编辑文件:
6.运行临时命令
使用临时命令可以快速测试和更改,无需编写 playbook
6.1 格式:
ansible host-pattern -m module [-a ‘module arguments’] [-i inventory]
6. 2 检查能否在受管主机上运行python 模块
6.3 使用临时命令通过模块执行任务
6.4.ansible 模块
- 1.文件模块:
-copy | 将本地文件复制到受管主机 |
---|---|
-file | 设置文件的权限和其他属性 |
-lineinfile | 确保特定行是否在文件中 |
-synchronize | 使用 rsync 同步内容 |
- 2.系统模块
-firewalld | 使用 firewalld 管理任意端口和服务 |
---|---|
-reboot | 重启 |
-service | 管理服务 |
-user | 添加、删除和管理用户账户 |
- 3.Net Tools 模块
-get_url | 通过 http、https、或者 ftp 下载文件 |
---|---|
-nmcli | 管理网络 |
-uri | 与 web 服务交互 |
7. 实验
1.使用 user 模块确保 student 用户存在于servera.lab.example.com 且 uid 为 1000
- 注意:
command 模块允许执行远程命令,但这些命令不是 shell 处理,所以无法访问 shell 环 境变量,所以不能执行重定向、传送等操作’
2.使用 shell 和 command 的区别
3. 使用 command 模块执行临时命令
4.使用 copy 模块
- 1.首先使用 student 用户,因为 student 用户没有写权限,会失败
- 2.使用特权升级
注意:
此处使用特权升级需要先编辑 /etc/sudoers.d/student 文件
- 参数解释:
-m | 指定模块 |
---|---|
-a | 指定块命令,content=" "指定添加信息\n换行,dest=/etc/motd添加信息路径 |
-u | 指定受管主机登录时的用户身份 |
-k | 表示输入密码(已经做过免密登录的可以不适用此参数) |
–become | 超级用户身份登录 |