ansible批量管理服务

一、ansible软件是什么?

1、ansible概念

  • ansible主要实现批量管理服务器,是基于python语言开发的自动化软件工具,基于SSH远程管理服务实现远程主机批量管理。
  • 串行批量管理:依次安装软件
  • 并行批量管理:同时进行安装软件

2、ansible软件作用

  • 批量管理系统服务
  • 批量管理服务部署
  • 批量分发数据信息
  • 批量采集数据信息

3、ansible软件意义

  • 提高工作效率
  • 提高工作准确度
  • 较少维护成本
  • 较少重复性工作

4、ansible软件特点

  • 管理端不需要启动服务程序
  • 管理端不需要编写配置文件
  • 受控制端不需要安装软件程序
  • 受控制端不需要启动服务程序
  • 服务程序管理操作模块多
  • 利用剧本编写来实现自动化

二、ansible软件功能组成

1、ansible主机清单inventory

2、ansible模块功能Module index

3、ansible剧本编写Playbook

4、ansible网络模块Network Module

三、ansible软件安装配置

1、yum install -y ansible

2、确认秘钥分发完成

测试:ssh 172.16.1.7 hostname
秘钥分发脚本

 for ip in {7,31,41}
    do 
       echo "=============== fenfa pub_key with 172.16.1.$ip =============== "
       sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
       if [ $? -eq 0 ]
       then
          echo "公钥信息分发成功 [ok]"  
          echo ""         
       else
          echo "公钥信息分发失败 [failed]"
          echo ""
       fi
    done

秘钥检查 脚本

#!/bin/bash
    for ip in {7,31,41}
    do 
       echo "=============== check pub_key with 172.16.1.$ip =============== "
       ssh 172.16.1.$ip hostname >/dev/null
       if [ $? -eq 0 ]
       then
          echo "分发测试检查成功 [ok]"  
          echo ""         
       else
          echo "公钥测试检查失败 [failed]"
          echo ""
       fi
    done

3、确认epel源更新完成

4、配置目录

/etc/ansible/ansible.cfg 默认配置文件,添加及时生效
/etc/ansible/hosts 主机清单,定义可以管理的主机
/etc/ansible/roles 角色目录,规范化配置

5、ansible常用两个命令

/usr/bin/ansible
/usr/bin/ansible-playbook

6、ansible软件主机清单配置

①简单配置

vim /etc/ansible/hosts
172.16.1.7
172.16.1.31
172.16.1.41
[root@guanli ~]# ansible 172.16.1.7 -m  command -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01

②分组配置

vim /etc/ansible/hosts
[web]
172.16.1.7
[nfs]
172.16.1.31
172.16.1.41
[root@guanli ~]# ansible nfs -m  command -a "hostname"
172.16.1.31 | CHANGED | rc=0 >>
nfs01

172.16.1.41 | CHANGED | rc=0 >>
backup

③符号匹配配置

vim /etc/ansible/hosts
[web]
172.16.1.7
[nfs]
172.16.1.[30:40]
172.16.1.[1:100]
[root@guanli ~]# ansible all -m  command -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01

172.16.1.31 | CHANGED | rc=0 >>
nfs01

172.16.1.41 | CHANGED | rc=0 >>
backup

④配置特殊变量信息

vim /etc/ansible/hosts
[web]
172.16.1.7 ansible_user=root ansible_password=123456 ansible_port=22
[nfs]
172.16.1.[30:40]
172.16.1.[1:100]

⑤嵌入式方式配置

vim /etc/ansible/hosts
[rsync:children]
rsync_server
rsync_client

[rsync_server]
172.16.1.41

[rsync_client]
172.16.1.7
172.16.1.31

[nfs_server]
172.16.1.31
[root@guanli ~]# ansible rsync -m  command -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01

172.16.1.31 | CHANGED | rc=0 >>
nfs01

172.16.1.41 | CHANGED | rc=0 >>
backup

⑥嵌入变量配置

vim /etc/ansible/hosts
[rsync:children]
rsync_server
rsync_client

[rsync_server]
172.16.1.41

[rsync_client]
172.16.1.7
172.16.1.31

[rsync_client:vars]
ansible_user=root
ansible_password=123456
ansible_port=22
[root@guanli ~]# ansible rsync_client -m  command -a "hostname"
172.16.1.31 | CHANGED | rc=0 >>
nfs01

172.16.1.7 | CHANGED | rc=0 >>
web01

7、ansible管理多台主机命令

语法格式
ansible 主机信息 -m 指定使用模块 -a 指定完成动作 "执行的命令"

四、ansible软件应用方法

1、模块

常用模块

①command(默认)

批量管理远程节点执行命令模块,一些特殊符号未能识别(参考官网)。

  • creates 创建目录,目录存在,不执行
  • removes 如果不存在 不执行
  • chdir 在执行命令操作前进行切换目录
[root@guanli ~]# ansible jzyue  -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01

②shell(万能模块)

  • creates 创建目录,目录存在,不执行
  • removes 如果不存在 不执行
  • chdir 在执行命令操作前进行切换目录

③copy

作用1:将管理端主机数据文件分发给被管理端
作用2:将被管理端目录中的数据移动到其他目录

  • src:将管理端什么数据进行分发
  • dest:将数据分发到远程主机什么路径中
  • owner:传输文件之后修改文件属主权限
  • group:传输文件后修改文件属组权限
  • mode:直接修改文件权限位(12位)
ansible 172.16.1.7 -m copy -a "src=/etc/hosts dest=/tmp owner=oldboy group=oldboy mode=666"
  • backup:分发传输之前将源文件按时间进行备份
  • remote_src:备份远程主机文件,no为管理端找数据进行分发,yes为被管理端找数据进行分发。
ansible 172.16.1.7 -m copy -a "dest=/etc/hosts src=/tmp/hosts.bak owner=oldboy group=oldboy mode=666 remote_src=yes"
  • content:在分发文件时创建简单信息
ansible 172.16.1.7 -m copy -a "content='oldboy123' dest=/tmp/oldboy.txt  mode=600"

④fetch

将远程数据进行拉取文件

  • src:远程主机数据信息
  • dest:本地保存数据的路径

⑤file

修改文件属性信息,用于创建数据信息(文件 目录 链接文件 删除数据)

  • path:指定处理的文件数据路径
  • owner:传输文件之后修改文件属主权限
  • group:传输文件后修改文件属组权限
  • mode:直接修改文件权限位(12位)
  • state:创建文件、目录、硬链接、软链接、删除数据信息
创建文件
[root@guanli ~]# ansible 172.16.1.7 -m file -a "path=/tmp/test.txt state=touch"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/tmp/test.txt", 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "state": "file", 
    "uid": 0
}
创建目录
[root@guanli ~]# ansible 172.16.1.7 -m file -a "path=/tmp/dir state=directory"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/tmp/dir", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}
创建软连接
[root@guanli ~]# ansible 172.16.1.7 -m file -a "src=/tmp/test.txt path=/tmp/testsoftlink  state=link"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/tmp/testsoftlink", 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "size": 13, 
    "src": "/tmp/test.txt", 
    "state": "link", 
    "uid": 0
}
创建硬链接
[root@guanli ~]# ansible 172.16.1.7 -m file -a "src=/tmp/test.txt path=/tmp/testhardlink  state=hard"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/tmp/testhardlink", 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "src": "/tmp/test.txt", 
    "state": "hard", 
    "uid": 0
}
删除数据信息
[root@guanli ~]# ansible 172.16.1.7 -m file -a "path=/tmp/testsoftlink  state=absent"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/tmp/testsoftlink", 
    "state": "absent"
}
删除目录
[root@guanli ~]# ansible 172.16.1.7 -m file -a "path=/tmp/dir  state=absent"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/tmp/dir", 
    "state": "absent"
}
[root@guanli ~]# ansible jzyue -m file -a "path=/tmp/dir{1..3}  state=absent"
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/tmp/dir{1..3}", 
    "state": "absent"
}

⑥script

批量执行脚本信息,需完成以下两步:

  • 编写脚本
  • 批量运行脚本
[root@guanli scrips]# ansible jzyue -m script -a "/server/scrips/yum.sh"

⑦yum

批量部署软件程序

  • name:指定安装软件名称
  • state:安装和卸载程序
[root@guanli scrips]# ansible jzyue -m yum -a "name=htop state=installed"
172.16.1.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "htop-2.2.0-3.el7.x86_64 providing htop is already installed"
    ]
}

⑧service

批量管理服务运行状态

  • name:指定服务名称
  • state:指定参数started restarted reload stopped
  • enabled:设置开机是否自动运行,yes启动,no不启动。

⑨cron

批量设置定时任务

  • name:定义任务注释信息
  • minute:分钟信息
  • hour:小时信息
  • day:日期信息
  • month:表示月份信息
  • weekday:表示星期信息
  • job:定义任务信息
  • state:present创建定时任务,absent删除定时任务。
创建定时任务
[root@guanli ~]# ansible jzyue -m cron -a "name='date sync' minute=*/5 job='ntpdate ntp1.aliyun.com &>dev/null' "
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "date sync"
    ]
}
删除定时任务
[root@guanli ~]# ansible jzyue -m cron -a "name='date sync' state=absent  "
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}

⑩user

批量创建用户模块

  • name:指定用户名称
  • uid:指定用户uid信息
  • group:指定那个主要组
  • groups:指定那个附属组
  • password:指定用户密码信息(必须为密文信息)
  • shell:指定用户shell信息/sbin/nologin
  • create_home:no不创建家目录 yes创建家目录
创建用户:
ansible 172.16.1.7 -m user -a "name=oldgirl uid=777 group=oldboy groups=oldboy666 shell=/sbin/nologin create_home=no"
    
删除用户:
ansible 172.16.1.7 -m user -a "name=oldgirl state=absent"
    
设置用户密码信息:
ansible 172.16.1.7 -m user -a 'name=oldgirl password="$6$oldboy123$W3jkmkkVTr.9UStm4S50RT2uIEjB/4GEtaAeVCSZ..uWVN1YGxHvluss9JVfAPV0gSJoGn1qAfxGyttIsTjcz0"'

小提示:创建密文密码的两种方法
方法1:利用ansible模块功能
方法2:利用python模块功能

①①mount

挂载模块

  • src:指定需要被挂载的存储数据信息,分区或共享目录。
  • path:挂载点目录信息
  • fstype:文件类型
  • state:mounted(临时和永久挂载) 、present(永久挂载)、 unmounted(临时卸载) 、absent(临时和永久卸载,挂载目录也会删除)

①②ping

①③setup

①④debug

①⑤mysql(相关模块)

①⑥unarchive

相关模块目前有将近三千个,如需要更深入的了解其它模块,请参考官网。

小提示:ansibile输出结果颜色定义:绿色代表命令执行成功,没有对远程主机做任何修改。黄色代表命令执行成功,大部分情况表示对远程主机做了更改。红色代表命令执行失败。粉色代表警告或是建议。蓝色代表显示命令或剧本执行的过程。
小提示:可通过ansible-doc -s +模块名 进行查看帮助信息。

2、剧本

剧本作用

  • 将多个模块功能进行整合
  • 重复工作简单化
  • 实现批量管理特殊需求

如何编写剧本

角色信息+任务信息
hosts:表示角色信息
tasks:表示任务信息

剧本编写规范

pythonyaml格式
①缩进:两个空格表示一个缩进关系
②冒号:创建键值对信息(key--value),冒号后面必须有空格,例:age: 18
冒号结尾或注释信息不需要有空格。
③列表:相同的信息出现多次,多个列表使用短横线空格。

编写角色信息

编写剧本信息

测试剧本

执行剧本

五、ansible自动部署rsync服务

  - hosts: rsync_server
      tasks:
        - name: 01:安装部署软件
          yum: name=rsync state=installed 
        - name: 02:分发配置文件
          copy: src=./rsyncd.conf dest=/etc/rsyncd.conf
        - name: 03:创建虚拟用户
          user: name=rsync shell=/sbin/nologin create_home=no
        - name: 04:创建备份目录
          file: path=/backup state=directory owner=rsync group=rsync
        - name: 05:创建密码文件
          copy: content='rsync_backup:oldboy123' dest=/etc/rsync.password  mode=600
        - name: 06:启动服务程序
          service: name=rsyncd state=started enabled=yes
    
    - hosts: rsync_client
      tasks:
        - name: 01:创建密码文件
          copy: content='oldboy123' dest=/etc/rsync.password mode=600

六、ansible扩展配置说明

1、剧本编写设置变量

①在剧本中设置变量

- hosts: 172.16.1.7
  vars:
    dir_info: /etc/
    dest_file: hosts_bak
  tasks:
    - name: 传输文件
      copy: src={{ dir_info }}hosts  dest={{ dir_info  }}{{ dest_file }}

②在命令行指定变量

- hosts: 172.16.1.7
  tasks:
    - name: 传输文件
      copy: src={{ dir_info }}hosts  dest={{ dir_info  }}{{ dest_file }}
ansible-playbook -e dir_info=/etc/ -e dest_file=hosts_bak test_变量功能.yaml

③在主机清单中指定

[rsync_client]
172.16.1.7
172.16.1.31
[rsync_client:vars]
dir_info=/etc/
dest_file=hosts_bak

- hosts: 172.16.1.7
  tasks:
    - name: 传输文件
      copy: src={{ dir_info }}hosts  dest={{ dir_info  }}{{ dest_file }}

2、剧本编写注册信息

- hosts: 172.16.1.7
  tasks:
    - name: 启动SSH
      service: name=sshd state=started
    - name: 检查SSH
      shell: netstat -lntup|grep 22
      register: port_info
    - name: 显示SSH端口
      debug: msg={{ port_info.stdout_lines }}

3、剧本编写循环功能

4、剧本编写判断功能

5、剧本编写忽略错误功能

6、剧本编写标签功能

7、剧本编写忽略采集功能

8、剧本编写触发功能

9、剧本编写汇总功能

七、ansible剧本角色配置

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容