ansible批量管理服务

ansible批量管理

ansible优势

1.ansible无需单独安装客户端,也不需要启动任何服务
2.ansible是python中的一套完整的自动化执行任务模块
3.ansible playbook(剧本),采用yaml配置,对于自动化任务执行一目了然
4.ansible模块较多,对于自动化的场景比较丰富

image.png

管理机安装ansible

yum install -y ansible

1、查看ansible下的配置文件

[ root@m01 ~]# rpm -ql ansible|grep -v /usr/
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles

2、编辑主机配置清单

vim /etc/ansible/hosts
最后一行
创建一个主机清单,名称为oldboy
[oldboy]
172.16.1.31
172.16.1.41
172.16.1.7

3、使用ping检查

ansible oldboy -m ping
oldboy ---是主机清单的名称
-m ---表示使用什么模块

[root@m01 ~]# ansible oldboy -m ping
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"      \\pong表示通了
}
172.16.1.31 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"      \\pong表示通了
}
172.16.1.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"      \\pong表示通了
}

ansible模块

格式:ansible +主机清单+指定模块的参数+模块名称+执行命令的参数+命令
ansible oldboy -m command hostname -I
-m ---指定模块的参数
-a ---模块中的命令或参数

命令行中查询模块的参数

ansible-doc -s +模块名称

官网查询模块的应用

https://docs.ansible.com
网站中主要的单词
src source源
dest 目标
content 文件内容
state 状态

1、command模块

执行命令的模块
默认的模块:只能执行简单的命令。不支持特殊符号

2、shell模块

万能模块 支持特殊符号及正则表达式
可以执行命名或脚本

3、copy模块

推送文件的模块
src= 源 推送数据的全路径
dest= 目标 推送数据的目标路径
owner= 指定推送文件的所有者信息
group= 指定推送文件的用户组信息
mode= 指定推送文件的权限信息
backup= 对传送过去的数据进行备份
content= 批量在服务端文件内添加内容 先清空再增加 与src二选一
force=yes 强制覆盖 (默认为yes)
force=no 对端不存在该文件时才覆盖

4、script模块

先把脚本传送到远端再执行

5、yum模块

安装模块
name 指定要安装的软件包名称
state 要执行的yum动作 installed&present 安装软件包 lastet更新软件包

6、file模块

文件模块
path 指定远程主机目录或文件信息
recurse 递归授权
state directory 在远端创建目录
state touch 在远端创建文件
state absent 删除文件或目录
state link&hard 创建软连接或硬链接文件
mode 设置文件或目录权限
owner 设置文件或目录属主信息
group 设置文件或目录属组信息

6、service模块

开启 关闭 重启服务模块
name 指定服务名称
state started 启动服务
state stoped 停止服务
state restarte 重启服务
state reload 平滑重启
enabled:yes 让服务开机自启 no 默认disable

7、group模块

组模块
name 指定创建的组名
gid 指定组的gid
state absent 移除远端主机的组
state present 创建远端的组

8、user模块

用户模块
name 创建的用户名
uid 指定创建用户的uid
gid 指定创建用户的gid
group 指定用户组名称
groups 指定附加组名称
password 给用户添加密码
shell 指定用户登录shell
create_home 是否创建家目录

9、mount模块

挂载模块
src 目标路径
path 挂载路径
fstype 挂载类型
opts 挂载方式
state present 仅将挂载信息写入fstab
state mounted 挂载并将信息写入fstab
state umount 取消挂载
state absent 取消挂载并清除fstab内的挂载

10、cron模块

定时任务模块
minute=* hoour=* day=* month=* weekday=*
job 要执行的动作
minute=* 分
hour=* 时
day=* 日
month=* 月
weekday=* 周

ansible各模块使用案例

模块案例

推送 ansible all -m copy -a 'src=/etc/hostname dest=/tmp/'
查看 ansible all -a 'cat /tmp/hostname'

copy模块

推送文件模块

[root@m01 ~]# ansible all -m copy -a 'src=/etc/hostname dest=/tmp/'
172.16.1.31 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "f434396716e2c9aed47cfde87c491cce5a2c08fa", 
    "dest": "/tmp/hostname", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "318d7defb693a2eb0d4f1a7a96575a57", 
    "mode": "0644", 
    "owner": "root", 
    "size": 4, 
    "src": "/root/.ansible/tmp/ansible-tmp-1559017854.64-224769717508792/source", 
    "state": "file", 
    "uid": 0
}
...省略
[root@m01 ~]# ansible all -a 'cat /tmp/hostname'
172.16.1.31 | CHANGED | rc=0 >>
m01

172.16.1.41 | CHANGED | rc=0 >>
m01

172.16.1.7 | CHANGED | rc=0 >>
m01
[root@m01 ~]# ansible all -m copy -a 'src=/etc/hosts dest=/tmp/hostname backup=yes' 
172.16.1.31 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/tmp/hostname.8691.2019-05-28@12:41:13~", 
    "changed": true, 
    "checksum": "d2c63329a65fa8c2a390e468cf037e28e6796f0f", 
    "dest": "/tmp/hostname", 
    "gid": 0, 

script 模块

[root@m01 ~]# #ansible all  -m script  -a "/server/scripts/yum.sh"
[root@m01 ~]# ansible all -a 'rpm -qa ipvsadm'
 [WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because
yum, dnf or zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.

172.16.1.41 | CHANGED | rc=0 >>
ipvsadm-1.27-7.el7.x86_64

172.16.1.7 | CHANGED | rc=0 >>
ipvsadm-1.27-7.el7.x86_64

yum模块

ansible all   -m yum  -a 'name=sl state=present'

使用yum模块的格式为:‘name=命令 state=present或者install(表示动作)’

file模块

[root@m01 ~]# #ansible all -m file  -a 'path=/tmp/a/b/c/d/e/f/g   state=directory '
[root@m01 ~]# #ansible all -m file  -a 'path=/tmp/a/b/c/d/e/f/g/oldboy.txt   state=touch '
[root@m01 ~]# ansible all  -a 'tree  /tmp/ '

user模块

caiav 创建用户指定uid和gid 1111,不创建家目录也不允许登陆

groupadd -g 1111  caiav 
useradd -u 1111 -g caiav    -s /sbin/nologin  -M  caiav 

ansible all -m group  -a 'name=caiav gid=1111 state=present'
ansible all -m user  -a  'name=caiav uid=1111 group=caiav  shell=/sbin/nologin create_home=no '

cron模块

[root@m01 /etc/ansible]# vim cron.yml 
---
  - hosts: all
    tasks:
    - name: chuangjian dingshirenwu
      cron:
        name: sync time V2
        minute: "*/10"
        job: /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
        state: present

- hosts: all ---指定主机清单
注:开头缩进两个空格

tasks: ---指定工作内容
注:比- hosts还缩进两个空格

- name: ---指定要做的事儿的名字
注:比tasks还缩进两个空格

cron: ---模块名称
注:比- name还缩进两个空格

命令行执行定时任务

1.检查是否安装ntpdate

[09:32 root@m01 ~]# ansible all -a 'rpm -qa ntpdate'

2.每5分钟同步一次时间:

[09:34 root@m01 ~]# ansible all -m cron  -a 'name="sync time" minute="*/5" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1"'

3.再添加一个定时任务

[09:55 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1"'

4.把此定时任务删除:

[09:55 root@m01 ~]# ansible all -m cron -a 'name="guoav-date" state=absent'

查看一下

[09:56 root@m01 ~]# ansible all -a 'crontab -l'

5.再添加一个定时任务

[09:57 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1"'

6.给定时任务添加注释:

[10:00 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" disabled=yes'

查看一下

[10:00 root@m01 ~]# ansible all -a 'crontab -l'
172.16.1.31 | CHANGED | rc=0 >>
#Ansible: guoav-date
#*/30 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

7.取消注释:

[10:02 root@m01 ~]# ansible all -m cron  -a 'name="guoav-date" minute="*/30" job="/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" disabled=no'

查看一下

[10:02 root@m01 ~]# ansible all -a 'crontab -l'
172.16.1.7 | CHANGED | rc=0 >>
#Ansible: guoav-date
*/30 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

mount挂载模块

1.首先保证nfs01客户端的nfs服务开启
[10:12 root@nfs01 ~]# systemctl is-active rpcbind
active
[10:13 root@nfs01 ~]# systemctl is-active nfs
active
2.将/nfs共享目录挂载到web01服务端上
[10:09 root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs    172.16.1.0/24
/upload 172.16.1.0/24
[10:09 root@web01 ~]# mount -t nfs 172.16.1.31:/nfs/ /mnt/
[10:09 root@web01 ~]# df -h
Filesystem        Size  Used Avail Use% Mounted on
/dev/sda3          19G  1.7G   18G   9% /
devtmpfs          476M     0  476M   0% /dev
tmpfs             487M     0  487M   0% /dev/shm
tmpfs             487M  7.7M  479M   2% /run
tmpfs             487M     0  487M   0% /sys/fs/cgroup
/dev/sda1         197M  105M   93M  54% /boot
tmpfs              98M     0   98M   0% /run/user/0
172.16.1.31:/nfs   19G  1.7G   18G   9% /mnt
测试完把/mnt卸载掉:
umount /mnt
3.用ansible将/nfs挂载到web01上的/upload

1.查看挂载信息
2.挂载 state=mounted
3.查看

[10:27 root@m01 ~]# ansible 172.16.1.7 -a 'showmount -e 172.16.1.31'
172.16.1.7 | CHANGED | rc=0 >>
Export list for 172.16.1.31:
/nfs    172.16.1.0/24
/upload 172.16.1.0/24

[10:26 root@m01 ~]# ansible 172.16.1.7 -m mount -a 'fstype=nfs src=172.16.1.31:/nfs path=/upload state=mounted'
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/upload", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "172.16.1.31:/nfs"
}

[10:26 root@m01 ~]# ansible 172.16.1.7 -a 'df -h'
172.16.1.7 | CHANGED | rc=0 >>
Filesystem        Size  Used Avail Use% Mounted on
....
172.16.1.31:/nfs   19G  1.7G   18G   9% /upload
4.不挂载,只添加到fstab文件

state=present

[10:46 root@m01 ~]# ansible 172.16.1.7 -m mount -a 'fstype=nfs src=172.16.1.31:/date path=/tmp state=present'
5.卸载,会删除/etc/fstab

state=absent

[11:04 root@m01 ~]# ansible 172.16.1.7 -m mount -a ' src=172.16.1.31:/nfs path=/upload state=absent'

查看命令行的返回值是否执行成功

asnible的变量

一、实现变量调用的方法:

1.在nfs01 backup 创建/backup/lidao的目录 ,把 /etc/目录打包压缩到/backup/lidao目录下面 etc.tar.gz ,目录名存放在变量中

image
[09:55 root@m01 /etc/ansible]# vim vars.yml 
---
  - hosts: all
    vars:
      dir1: /backup/lidao
    tasks:
    - name: mkdir
      file:
        path: "{{ dir1 }}"
        state: directory
    - name: tar /etc
      archive:
        path: /etc
        dest: "{{ dir1 }}/etc.tar.gz"

image
image

二、变量注册

1.注册变量信息

[11:31 root@m01 /etc/ansible]# vim vars1.yml 
---
  - hosts: all
    tasks:
      - name: ip
        shell: hostname -I|awk '{print $NF}'
        register: ipaddr
      - name: print ip
        shell: echo {{ ipaddr.stdout }} >>/tmp/ip.txt

2.追加到文件中

image

3.查看追加过去的内容:

最后的一行是stdout_lines: [u172.16.1.31] 是我们要的内容

image

4.ansible的调试

需要用到叫register的内容
把/etc/打包备份到/backup/ip地址命名目录/etc-时间.tar.gz
(因为时间关系这里就打包/etc下的profile和hosts了)
ip是每台机器的内网ip
时间是当天的日期:年-月-日

image
[12:10 root@m01 /etc/ansible]# vim vars.yml 
---
  - hosts: all
    tasks:
    - name: ip
      shell: hostname -I|awk '{print $NF}'
      register: ipaddr
    - name: date
      shell: date +%F
      register: time

    - name: mkdir dir
      file:
        path: /backup/{{ ipaddr.stdout }}
        state: directory
    - name: tar /etc/profie && /etc/hosts
      archive:
        path: /etc
        dest: /backup/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz
    - name: mkdir xf-dir
      file:
        path: /backup/{{ ipaddr.stdout }}/tc-{{ time.stdout }}
        state: directory
    - name: tar xf
      unarchive:
        src: /backup/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz
        copy: no
        dest: /backup/{{ ipaddr.stdout }}/

三、内置变量

image
查看主机名:
[12:35 root@m01 /etc/ansible]# vim vars2.yml
---
  - hosts: all
    tasks:
      - name: 内置变量
        debug: msg={{ ansible_hostname }}

四、查看所有内置变量

用ansible_facts 内容太多可以筛选

[12:35 root@m01 /etc/ansible]# vim vars2.yml
---
  - hosts: all
    tasks:
      - name: 内置变量
        debug: msg={{ ansible_facts }}

循环的使用

---
- hosts: all
  remote_user: root
  tasks:
    - name: Installed Pkg
      yum: name={{ item }} state=present
      with_items:
        - wget
        - tree
        - lrzsz

判断的使用

[root@m01 ~]# vim 05.var.yaml
---
   - hosts: all
     tasks:
       - name: yum
         yum:
          name: tree
          state: installed
         when: (ansible_hostname == 'nfs01')

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

推荐阅读更多精彩内容