Ansible基于Python语言开发,集合了众多优秀运维工具的优势,实现了批量运行命令、部署程序、配置系统等功能。mysql
Ansible自动化运维环境由控制主机与被管理主机组成,因为Ansible是基于SSH协议进行通讯的,因此控制主机安装Ansible软件后不须要重启或容许任何程序,被管理主机也不须要安装和运行任何应用程序。web
Ansible案例环境sql
角色 | ip地址 | 组名 |
---|---|---|
控制主机 | 192.168.174.209 | |
被管理主机1 | 192.168.174.208 | webservers |
被管理主机2 | 192.168.174.142 | dbservers |
yum install -y epel-release
2.使用yum命令安装Ansibleshell
yum install -y ansible
3.安装tree,展现ansible树状结构vim
yum install tree -y
4.查看树状结构bash
tree /etc/ansible/ /etc/ansible/ ├── ansible.cfg #ansible的配置文件 ├── hosts #ansible的主仓库,用于存储须要管理的远程主机的相关信息 └── roles #角色
5.配置主机清单app
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
ssh-copy-id root@192.168.174.208 #配置密钥对验证 ssh-copy-id root@192.168.174.142
7.使用免交互代理ide
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 <host-pattern> [-m module_name] [-a args]
<host-pattern>被管理的主机的ip或组号
[-m module_name]要使用的哪些模块
[-a args]模块特有的参数
Ansible自带了不少的模块进行对管理主机的各类任务管理。首先来了解一下Ansible经常使用的一些模块。
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
即自定义任务计划模块,用于管理被管理主机的任务计划。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'
用于建立新用户和更改、删除已存在的用户。用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
用于对用户组的管理
#建立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 }
实现文件的复制和批量下发文件
#将本地文件/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
用于设置被管理主机的文件属性
#设置/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
检测指定被管理主机的连通性
[root@promote .ssh]# ansible webservers -m ping 192.168.174.208 | SUCCESS => { "changed": false, "ping": "pong" }
负责在被管理主机上安装与卸载软件包
[root@promote .ssh]# ansible webservers -m yum -a 'name=httpd'
控制管理服务的运行状态
#启动http的服务并设置为开机自启 [root@promote .ssh]# ansible webservers -m service -a 'enabled=true name=httpd state=started'
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:全部的身份验证令牌已经成功更新。
将本地脚本复制到被管理主机上进行运行
#编写本机脚本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
用于模块收集、查看被管理主机的facts。
[root@promote .ssh]# ansible webservers -m setup