ansible自动化之路

  1. ansible  描述

Python语言是运维人员必须会的语言
Ansible是一个基于Python开发的自动化运维工具
其功能实现基于SSH远程连接服务
Ansible可以实现批量系统配置、批量软件部署、文件拷贝、批量运行命令等功能

2 . 部署流程

受控主机部署:
yum install libselinux-python -y
管理端部署:
yum install ansible -y

3.配置文件

[root@m01 ~]# cd /etc/ansible/
[root@m01 ansible]# ll
total 60
-rw-r--r-- 1 root root  1016 Jun  2 05:49 2017-09-01hosts
-rw-r--r-- 1 root root 18066 Jun  2 05:49 ansible.cfg
-rw-r--r-- 1 root root 18066 Jun  2 05:49 ansible.cfg.bak
drwxr-xr-x 2 root root  4096 Sep 12 17:51 ansible-playbook
drwxr-xr-x 4 root root  4096 Sep  2 17:52 conf
-rw-r--r-- 1 root root  1118 Sep 11 21:58 hosts
drwxr-xr-x 2 root root  4096 Jun  2 05:49 roles
[root@m01 ansible]# vim hosts 
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
# If you have multiple hosts following a pattern you can specify
# them like this:
## www[001:006].example.com
# Ex 3: A collection of database servers in the 'dbservers' group
## [dbservers]
## 
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
# Here's another example of host ranges, this time there are no
# leading 0s:
## db-[99:101]-node.example.com
[oldboy]
172.16.1.41
172.16.1.31 
172.16.1.8
172.16.1.81

4. ansible官方文档地址

http://docs.ansible.com/ansible/intro_installation.html 
http://www.ansible.com.cn/ 
http://docs.ansible.com/modules_by_category.html 
http://www.ansible.cn/docs/

5 命令说明

a 小例子:
[root@m01 ansible]# ansible oldboy -m command -a 'hostname'
172.16.1.31 | SUCCESS | rc=0 >>
nfs01
172.16.1.8 | SUCCESS | rc=0 >>
web01
172.16.1.41 | SUCCESS | rc=0 >>
backup
b 命令格式
nsible  oldboy  -m command   -a "hostname"
 命令    主机组    指定模块       要执行的命令

查下命令,执行ansible命令后,没有发生改变,会显示绿色
执行ansible命令,发生配置改变时,表示黄色
执行ansible命令,出现异常表示红色

6  模块说明

(1)shell
shell模块--是万能模块,支持正则或特殊符号信息
比如:
ansible oldboy -m shell -a "ls -l /etc/*"
##########################################
先定义一个简单脚本:
[root@web01 scripts]# cat yum.sh
#!/bin/bash
yum install -y htop
脚本分发并给脚本执行权限:
ansible oldboy -m copy -a "src=/server/scripts/yum.sh dest=/server/scripts/ mode=655"
远程批量执行脚本
ansible oldboy -m shell -a "sh /server/scripts/yum.sh"
(2)执行脚本模块script
利用script模块在远程执行本地脚本
ansible oldboy -m script -a "/server/scripts/yum.sh"   
注:需要使用绝对路径方式执行脚本
(3)yum模块
ansible oldboy -m yum -a "name=htop state=installed"
注:
name=htop 指定安装软件包的名称
state=installed 指定安装动作
(4)service模块
控制服务的状态信息,比如重启、停止等。
ansible oldboy -m service -a "name=crond state=stopped enabled=no"
检查:
ansible oldboy -m shell -a "/etc/init.d/crond status"
ansible oldboy -m shell -a "chkconfig --list|grep cron"
##########################################################
state状态选择:running,started,stopped,restarted,reloaded
enabled开机自启动,yes或no
(6)file模块
创建软连接
ansible oldboy -m file -a "src=/etc/hosts dest=/tmp/hosts state=link"
参数:
owner 定义文件/目录属组
group 定义文件/目录属主
mode  定义文件/目录权限
PATH 定义文件/目录路径
dest 在远端创建文件或目录
sate
    directory 如果目录不存在就创建目录
    file   即使文件不存在,也不会被创建
    link   创建软链接
    hard   创建硬链接
    touch  创建文件
    absent 删除目录、文件或取消链接文件
(6)cron模块-定时任务模块
批量创建定时任务--每天凌晨0点整执行yum.sh脚本
ansible oldboy -m cron -a 'name=install_htop minute=0 hour=0 job="/bin/sh /server/scripts/yum.sh &>/dev/null"'
#批量删除定时任务
ansible oldboy -m cron -a 'state=absent name=install_htop minute=0 hour=0 job="/bin/sh /server/scripts/yum.sh &>/dev/null"'
#注释cron任务
ansible oldboy -m cron -a 'name=install_htop minute=0 hour=0 job="/bin/sh /server/scripts/yum.sh &>/dev/null" disabled=yes'
#启用被注释的cron任务
ansible oldboy -m cron -a 'name=install_htop minute=0 hour=0 job="/bin/sh /server/scripts/yum.sh &>/dev/null" disabled=no'
name 定义一个cron任务名称。如果不指定名称的话,ansible命令执行多次,会多次追加
state=absent 删除计划任务
disabled   注释crontab
job     指定任务
minute  分钟,0-59
hour    小时,0-23
day     日, 1-31
month   月, 1-12
weekday  周, 0-6
(7)ping模块
[root@web01 ~]# ansible all -m ping
172.16.1.41 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
注:如果ping正确,则返回结果“pong”
(9)copy模块 (拷贝文件)
示例:
ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/host_oldboy backup=yes"
ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/host_oldboy owner=oldboy group=oldboy mode=600"
参数:
backup 文件复制之前,如果目标存在,则先进行备份,再进行拷贝覆盖
owner=oldboy   定义用户属主(注意:指定的用户需要存在,否则报错)
group=oldboy 定义用户属组
mode=600  定义文件权限权限
示例:
ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/a/b/c/ backup=yes"
其中“/tmp/a/b/c/”目录可以没有,ansible可以自动创建。
但是,不能在没有的目录下重命名,比如:
[错误的命令,仅用于示范]
ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/a/b/c/new_hosts backup=yes"

7 .查看ansible帮助信息

ansible-doc -s shell  查看指定模块用法
ansible-doc -l    列出所有模块

8 .基于密码方式实现ansible管理

我们上面所有的操作均是基于密钥的管理
如果个别服务器不希望通过密钥来访问,那ansible如何管理呢?
vim /etc/ansible/hosts 
172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456
意思是:ansible管理这台31服务器时,使用ssh的root用户登录
那么有人可能又说了,密码写在文档里,很不安全,怎么办?
vim /etc/ansible/hosts 
172.16.1.31 ansible_ssh_user=root
这样定义,然后在执行ansible命令的时候,密码自己输入

9 .ANSIBLE 剧本(PLAYBOOKS)功能

剧本格式:
### 剧本的开头,可以不写
- hosts:空格 all       #此处all表示所有主机,也可以指定主机模块名称
  tasks:
  - 模块: 要执行的命令
用于ansible/saltstack编写剧本所使用的语言格式:pyYAML
定义剧本
创建剧本存放目录
[root@web01 ~]# mkdir /etc/ansible/ansible_playbook
[root@web01 ansible_playbook]# vim cron.yml
- hosts: all
  tasks:
  - cron: name=install_htop minute=0 hour=0 job="/bin/sh /server/scripts/yum.sh  /dev/null"
#执行剧本
ansible-playbook cron.yml
剧本格式检查命令
ansible-playbook --syntax-check cron.yml
模拟执行剧本
ansible-playbook -C cron.yml
多任务剧本–编写–不同主机多任务
# more tasks
- hosts: 172.16.1.41
  tasks:
    - name: cron task
      cron: name=install_htop minute=0 hour=0 job="/bin/sh /server/scripts/yum.sh /dev/null"
    - name: hostname task
      shell: echo $HOSTNAME >>/tmp/hostname.txt
      
- hosts: 172.16.1.31
  tasks:
    - name: yum install nfs-utils task
      shell: yum install -y nfs-utils rpcbind
注:- name前面共计4个空格

10 剧本编写模式

剧本编写方式
01 多主机单任务编写方式
02 多主机多任务编写方式
03 不同主机多任务编写方式
环境测试
要求利用ansible剧本安装rsync服务器
01. 重新克隆两台主机,一台作为rsync服务端 -台作为rsync客户端
02. 利用ansible管理主机(编写剧本),部署rsync服务端,与rsync客户端
03. rsync客户端主机不需分发公钥文件,实现ansible管理
剧本参考:
# command play-book
- hosts: 172.16.1.41
  tasks:
    - name: step01:install rsync
      yum: name=rsync state=installed
    - name: step02:edit rsync conf file
      copy: src=/etc/ansible/conf/rsync_conf/rsyncd.conf dest=/etc/
    - name: step03:create rsync user
      shell: userdel -r rsync && useradd rsync -s /sbin/nologin -M
    - name: step04:create auth file
      copy: src=/etc/ansible/conf/rsync_conf/rsync.password dest=/etc/ mode=600
    - name: step05:create backup dir
      file: dest=/backup state=directory owner=rsync group=rsync
    - name: step06:boot rsync server
      shell: rsync --daemon
- hosts: 172.16.1.31
  tasks:
    - name: step01:set auth info
      shell: export RSYNC_PASSWORD=oldboy123   #注:ansible定义环境变量不生效,此行无效
    - name: step02:create auth file
      copy: src=/etc/ansible/conf/rsync_conf/rsync_client.password dest=/etc/rsync.password mode=600

     


打赏 支付宝打赏 微信打赏

最后编辑于:2017/09/09作者: 富华运维空间

相关推荐

发表评论

动态鼠标蜘蛛网特效