一, Ansible 简介
Ansible 基于 Python 语言开发, 集合了众多优秀运维工具的优点, 实现了批量运行命令, 部署程序, 配置系统等功能.
二, 安装部署 Ansible 服务
Ansible 自动化运维环境由控制主机与被管理主机组成, 由于 Ansible 是基于 SSH 协议进行通信的, 所以控制主机安装 Ansible 软件后不需要重启或允许任何程序, 被管理主机也不需要安装和运行任何应用程序.
Ansible 案例环境
角色 | ip 地址 | 组名 |
---|---|---|
控制主机 | 192.168.174.209 | |
被管理主机 1 | 192.168.174.208 | webservers |
被管理主机 2 | 192.168.174.142 | dbservers |
1. 在控制主机上安装 epel 源
yum install -y epel-release
2. 使用 yum 命令安装 Ansible
yum install -y ansible
3. 安装 tree, 展示 ansible 树状结构
yum install tree -y
4. 查看树状结构
- tree /etc/ansible/
- /etc/ansible/
- ansible.cfg #ansible 的配置文件
- hosts #ansible 的主仓库, 用于存储需要管理的远程主机的相关信息
- roles #角色
5. 配置主机清单
vim /etc/ansible/hosts
插入被管理主机的组名, 及 ip 地址
- [webservers]
- 192.168.174.208
- [dbservers]
- 192.168.174.142
6. 设置 SSH 无密码登录
ssh-keygen -t rsa #基于 ssh 密钥的连接
在使用 ssh-keygen 产生一对密钥后, 在家目录会产生一个隐藏文件夹. ssh, 进入. ssh 目录下, 使用 ssh-copy-id 来下发生成的密钥.
- ssh-copy-id root@192.168.174.208 #配置密钥对验证
- ssh-copy-id root@192.168.174.142
7. 使用免交互代理
- ssh-agent bash
- ssh-add
8. 使用 ansible 命令测试是否安装成功
- [root@promote .ssh]# ansible all -a 'date' // 查看两台被管理主机的时间
- 192.168.174.142 | SUCCESS | rc=0>>
2018 年 08 月 01 日 星期三 20:55:39 CST
192.168.174.208 | SUCCESS | rc=0>>
2018 年 08 月 01 日 星期三 20:55:39 CST
以上 ansible 的环境部署就完成了.
三, Ansible 基础命令的应用
Ansible 可以使用命令方式进行自动化管理, 其基本语法为:
- ansible <host-pattern> [-m module_name] [-a args]
- <host-pattern > 被管理的主机的 ip 或组号
[-m module_name] 要使用的哪些模块
[-a args] 模块特有的参数
Ansible 自带了很多的模块进行对管理主机的各种任务管理. 首先来了解一下 Ansible 常用的一些模块.
1.command 模块
Ansible 管理工具使用 - m 选项指定使用的模块, 默认使用的是 command 模块.
(1) 使用 ip 地址指定运行的主机
- [root@promote .ssh]# ansible 192.168.174.208 -m command -a 'date'
- 192.168.174.208 | SUCCESS | rc=0>>
2018 年 08 月 01 日 星期三 21:21:18 CST
(2) 使用被管理主机中的分类运行
- [root@promote .ssh]# ansible webservers -m command -a 'date'
- 192.168.174.208 | SUCCESS | rc=0>>
2018 年 08 月 01 日 星期三 21:22:38 CST
(3) 在所有被管理主机上运行
- [root@promote .ssh]# ansible all -m command -a 'date'
- 192.168.174.142 | SUCCESS | rc=0>>
2018 年 08 月 01 日 星期三 21:23:28 CST
192.168.174.208 | SUCCESS | rc=0>>
2018 年 08 月 01 日 星期三 21:23:28 CST
2.cron 模块
即自定义任务计划模块, 用于管理被管理主机的任务计划. cron 有两种状态 (state):present 表示添加 (可以省略),absent 表示移除.
(1) 添加任务计划
ansible webservers -m cron -a 'minute="*/1"job="/bin/echo heihei name="test cron job"'
(2) 移除任务计划
移除任务计划是按照指定的任务计划名来执行的, 因此必须指定被移除任务计划的名字 name, 假如该计划任务没有取名字, name=None 即可
ansible webservers -m cron -a 'name="test cron job"state=absent'
3.user 模块
用于创建新用户和更改, 删除已存在的用户. 用 name 指定创建的用户的名称.
(1) 创建用户
- [root@promote .ssh]# ansible webservers -m user -a 'name=zhangsan'
- 192.168.174.208 | SUCCESS => {
- "changed": true,
- "comment": "",
- "create_home": true,
- "group": 1000,
- "home": "/home/zhangsan",
- "name": "zhangsan",
- "shell": "/bin/bash",
- "state": "present",
- "system": false,
- "uid": 1000
- }
(2) 查看用户是否创建成功
- [root@promote .ssh]# ansible webservers -a 'tail -1 /etc/passwd'
- 192.168.174.208 | SUCCESS | rc=0>>
- zhangsan:x:1000:1000::/home/zhangsan:/bin/bash
4.group 模块
用于对用户组的管理
- # 创建 mysql 组, 并将 zhangsan 用户添加到 mysql 组
- [root@promote .ssh]# ansible webservers -m group -a 'name=mysql gid=306 system=yes'
- 192.168.174.208 | SUCCESS => {
- "changed": true,
- "gid": 306,
- "name": "mysql",
- "state": "present",
- "system": true
- }
- [root@promote .ssh]# ansible webservers -m user -a 'name=zhangsan uid=307 system=yes group=mysql'
- 192.168.174.208 | SUCCESS => {
- "append": false,
- "changed": true,
- "comment": "",
- "group": 306,
- "home": "/home/zhangsan",
- "move_home": false,
- "name": "zhangsan",
- "shell": "/bin/bash",
- "state": "present",
- "uid": 307
- }
5.copy 模块
实现文件的复制和批量下发文件
- # 将本地文件 / etc/fstab 复制到被管理主机的 / opt 下, 取名 fstab.bk, 并将所有者设置为 root, 权限设置为 666
- [root@promote .ssh]# ansible webservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bk owner=root mode=666'
- 192.168.174.208 | SUCCESS => {
- "changed": true,
- "checksum": "6fb776f669de8f65b92aa2d6975f29d14860e8a9",
- "dest": "/opt/fstab.bk",
- "gid": 0,
- "group": "root",
- "md5sum": "7f37c08e599574ebb0f41f2f92a54f20",
- "mode": "0666",
- "owner": "root",
- "secontext": "system_u:object_r:usr_t:s0",
- "size": 465,
- "src": "/root/.ansible/tmp/ansible-tmp-1533132004.58-223000841853605/source",
- "state": "file",
- "uid": 0
- }
- [root@promote .ssh]# ansible webservers -a 'ls -l /opt'
- 192.168.174.208 | SUCCESS | rc=0>>
总用量 4
-rw-rw-rw-. 1 root root 465 8 月 1 22:00 fstab.bk
drwxr-xr-x. 2 root root 6 3 月 26 2015 rh
6.file 模块
用于设置被管理主机的文件属性
- # 设置 / opt/fstab.bk 的所属主为 mysql, 所属组为 mysql, 权限为 644
- [root@promote .ssh]# ansible webservers -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.bk'
- 192.168.174.208 | SUCCESS => {
- "changed": true,
- "gid": 306,
- "group": "mysql",
- "mode": "0644",
- "owner": "mysql",
- "path": "/opt/fstab.bk",
- "secontext": "system_u:object_r:usr_t:s0",
- "size": 465,
- "state": "file",
- "uid": 306
- }
- [root@promote .ssh]# ansible webservers -a 'ls -l /opt'
- 192.168.174.208 | SUCCESS | rc=0>>
总用量 4
-rw-r--r--. 1 mysql mysql 465 8 月 1 22:00 fstab.bk
drwxr-xr-x. 2 root root 6 3 月 26 2015 rh
7.ping 模块
检测指定被管理主机的连通性
- [root@promote .ssh]# ansible webservers -m ping
- 192.168.174.208 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
8.yum 模块
负责在被管理主机上安装与卸载软件包
[root@promote .ssh]# ansible webservers -m yum -a 'name=httpd'
9.service 模块
控制管理服务的运行状态
- # 启动 http 的服务并设置为开机自启
- [root@promote .ssh]# ansible webservers -m service -a 'enabled=true name=httpd state=started'
10.shell 模块
Ansible 中的 shell 模块可以在被管理主机上运行命令
使用无交互方式给 zhangsan 用户设置密码
- [root@promote .ssh]# ansible webservers -m shell -a 'echo abc123 | passwd --stdin zhangsan'
- 192.168.174.208 | SUCCESS | rc=0>>
更改用户 zhangsan 的密码 .
passwd: 所有的身份验证令牌已经成功更新.
11.script 模块
将本地脚本复制到被管理主机上进行运行
- # 编写本机脚本 test.sh, 复制到被管理主机上进行运行
- [root@promote .ssh]# vim test.sh
- #!/bin/bash
- echo "this is test script">/opt/fstab.bk
- [root@promote .ssh]# chmod +x test.sh #给脚本添加可执行权限
- [root@promote .ssh]# ansible webservers -m script -a 'test.sh'
- 192.168.174.208 | SUCCESS => {
- "changed": true,
- "rc": 0,
- "stderr": "Shared connection to 192.168.174.208 closed.\r\n",
- "stderr_lines": [
- "Shared connection to 192.168.174.208 closed."
- ],
- "stdout": "",
- "stdout_lines": []
- }
- [root@promote .ssh]# ansible webservers -a 'cat /opt/fstab.bk'
- 192.168.174.208 | SUCCESS | rc=0>>
- this is test script
12.setup 模块
用于模块收集, 查看被管理主机的 facts.
[root@promote .ssh]# ansible webservers -m setup
来源: http://www.bubuko.com/infodetail-2710446.html