1、自动化运维的含义

1.手动运维时代

假设我们要在10台Linux服务器上安装一个nginx服务,手动如何操作?

第一步、ssh登陆NUM(1..n)服务器

第二步、输入对应服务器密码

第三步、安装yum install nginx

第四步、启动systemctl start nginx

第五步、退出登陆

循环操作n=10次

 

2、自动化运维时代

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_推送

 

 3.自动化运维工具给运维带来的好处

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_python_02

 

 2.Ansible 基础概述

1.什么是Ansible

Ansible 是python 中的一套模块,系统中的一套自动化工具,只需要使用 ssh 协议连接及可用为系统管理、自动化批量执行命令等任务。

2.Ansible优势

1、ansible不需要单独安装客户端,也不需要启动任何服务

2、ansible是python中的一套完整的自动化执行任务模块

3、ansible playbook,采用 yaml 语法配置,对于自动化任务执行一目了然

4、ansible 模块较多,对于自动化的场景支持较丰富

3.Ansible 架构

1、连接插件 connectior plugins 用于连接主机,用来连接被管理端

2、核心模块 core modules 连接主机实现操作,它依赖于具体的模块来做具体的事情

3、自定义模块 custom modules ,根据自己的需求编写具体的模块

4、插件plugins ,完成模块功能的补充

5、剧本 playbooks ,ansible 的配置文件,将多个任务定义在剧本中,由ansible自动执行

6、主机清单 inventor, 定义 ansible 需要操作主机的范围

最重要的一点是 ansible 是模块化的 它所有的操作都依赖于模块

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_推送_03

 

 4.Ansible 执行流程

1、Ansible 读取 playbook 剧本,剧本中会记录对哪些主机执行哪些任务。

2、首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。

3、其次Ansible 会通过连接插件连接对应的主机并下发对应的任务列表。

4、最后被管理的主机会将Ansible 发送过来的任务解析为本地Shell 命令执行。

 

3.Ansible 安装配置

1.Ansible 安装

[root@manager ~]# yum install ansible -y
--version    #ansible版本信息
-v               #显示详细信息
-i                #主机清单文件路径,默认是在/etc/ansible/hosts
-m              #使用的模块名称,默认使用command模块
-a                #使用的模块参数,模块的具体动作
-k                #提示输入ssh密码,而不使用基于ssh的密钥认证
-C                #模拟执行测试,但不会直的执行
-T                #执行命令的超时

 

2、Ansible 配置文件

#inventory      = /etc/ansible/hosts                  #主机列表配置文件
#library        = /usr/share/my_modules/              #库文件存放目录
#module_utils   = /usr/share/my_module_utils/    
#remote_tmp     = ~/.ansible/tmp                       #临时py文件存放在远程主机
#local_tmp      = ~/.ansible/tmp                       #本机的临时执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks          = 5                                    #默认并发数
#poll_interval  = 15
#sudo_user      = root                                 #默认sudo用户
#ask_sudo_pass = True                                  #每次执行是否询问sudo的ssh密码
#ask_pass      = True                                  #每次执行是否询问ssh 密码
#transport      = smart
#remote_port    = 22                                   #远程主机端口
#module_lang    = C
#module_set_locale = False    
host_key_checking = False                              #跳过检查主机指纹
log_path = /var/log/ansible.log                        #ansible日志

 

[root@manager ~]# ansible --version
ansible 2.9.3
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
[root@manager ~]#

 

ssh跳板机功能

要连接谁,就将自己的公钥推送至对端的服务器

Windows 实现免密钥  Linux/Mac免密钥

 

Aansible 自动化配置管理工具 

puppet、saltstack、Ansible

 

[root@manager ~]# vim /etc/ansible/hosts 

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

[backup]
172.26.73.200

[nfs]
172.26.73.197

[web]
172.26.73.198

 

[root@manager ~]# ansible -i /etc/ansible/hosts all -m command -a "df -h"
172.26.73.197 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        30G  1.8G   27G   7% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  464K  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
tmpfs           365M     0  365M   0% /run/user/0

172.26.73.198 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        30G  1.9G   27G   7% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  480K  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
tmpfs           365M     0  365M   0% /run/user/0

172.26.73.200 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        30G  1.8G   27G   7% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  464K  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
tmpfs           365M     0  365M   0% /run/user/0

[root@manager ~]# ansible -i /etc/ansible/hosts all -m command -a "w"
172.26.73.200 | CHANGED | rc=0 >>
 18:24:57 up 20 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.26.73.199    18:24    0.00s  0.07s  0.01s w

172.26.73.197 | CHANGED | rc=0 >>
 18:24:57 up 20 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.26.73.199    18:24    0.00s  0.06s  0.01s w

172.26.73.198 | CHANGED | rc=0 >>
 18:24:57 up 20 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.26.73.199    18:24    0.00s  0.07s  0.01s w

[root@manager ~]#

 

4.Ansible主机清单

/etc/ansiblehosts 是ansible 默认主机资产清单文件,用于定义被管理主机的认证信息,例如ssh登录用户名、密码以及 key相关信息。下面通过几个场景演示,我们如何配置 Inventory 文件

场景一、基于密码连接[root@manager ~]# cat /etc/ansible/hosts 

#方式一、主机+端口+密码
[backup]
172.26.73.200 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'

[nfs]
172.26.73.197 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
[web]
172.26.73.198 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'


#方式二、主机+端口+密码
[web]
web[1:2].exam.com ansible_ssh_pass='123456'

#方式三、主机+端口+密码
[web]
web[1:2].exam.com
[web:vars]
ansible_ssh_pass='123456'

 

场景二、基于密钥连接,需要先创建公钥和私钥,并下发公钥至被控端

[root@manager ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "root@172.26.73.197"
[root@manager ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "root@172.26.73.198"
[root@manager ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "root@172.26.73.200"

 

#方式一、主机+端口+密钥
[root@manager ~]# cat /etc/ansible/hosts 
[backup]
172.26.73.200
[nfs]
172.26.73.197
[web]
172.26.73.198

#方式二、别名+主机+端口+密钥
[group]
web ansible_ssh_host=10.26.73.199 ansible_ssh_port=22

 

场景三、主机组使用方式

1 #方式一、主机组变量+主机+密码
 2 [group_name1]
 3 172.26.73.197
 4 172.26.73.198
 5 [group_name1:vars]
 6 ansible_ssh_pass='123456'
 7 
 8 #方式二、主机组变量+主机+密钥
 9 [group_name2]
10 172.26.73.199
11 172.26.73.200
12 
13 #定义多组,多组汇总整合
14 #webservers组包括两个子组 [apapche,nginx]
15 [webservers:children]
16 [group_name1]
17 [group_name2]

 

[root@manager ~]# ansible all --list-host
  hosts (3):
    172.26.73.197
    172.26.73.200
    172.26.73.198

[root@manager ~]# ansible web --list-host
  hosts (1):
    172.26.73.198
[root@manager ~]#

 

5.Ansible Ad-Hoc

1.什么是ad-hoc 模式

ad-hoc模式简而言之就是“临时命令“,执行完即结束,并不会保存

 

2.ad-hoc模式的使用场景

比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等

 

3.ad-hoc模式的命令使用,ansible 'web' -m command -a 'df -h',含义如下图

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_推送_04

 

 

4.ad-hoc模式的常用模块如下:

command    #执行shell命令(不支持管道等特殊字条)

shell         # 执行shell命令

scripts      # 执行shell脚本

yum_repository  # 配置yum仓库

yum       # 安装软件

copy         # 变更配置文件

file         # 建立目录或文件

service      # 启动与停止服务

mount       # 挂载设备

cron       # 定时任务

 

5.ad-hoc结果返回

绿色:代表被管理端主机没有被修改

黄色:代表被管理端主机发现变更

红色:代表出现了故障,注意查看提示

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_Ansible_05

 

 

6.Ansible 常用模块

1.command 命令模块,不支持重定向或管道

#默认模块,执行命令

[root@manager ~]# ansible nfs -a w
172.26.73.197 | CHANGED | rc=0 >>
 17:55:04 up 2 min,  2 users,  load average: 0.11, 0.11, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    123.59.170.204   17:53   24.00s  0.00s  0.00s -bash
root     pts/1    172.26.73.199    17:55    0.00s  0.08s  0.01s w


[root@manager ~]# ansible nfs -a 'hostname'
172.26.73.197 | CHANGED | rc=0 >>
nfs

[root@manager ~]# ansible nfs -a 'ifconfig'
172.26.73.197 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.26.73.197  netmask 255.255.240.0  broadcast 172.26.79.255
        ether 00:16:3e:03:d4:25  txqueuelen 1000  (Ethernet)
        RX packets 1218  bytes 524655 (512.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1317  bytes 466073 (455.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 18  bytes 900 (900.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 18  bytes 900 (900.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@manager ~]# ansible nfs -m shell -a 'ifconfig|grep eth0' -f 50
172.26.73.197 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

[root@manager ~]#

 

2. script脚本模块

#编写脚本
[root@manager ~]#mkdir -p /server/scripts
[root@manager ~]# vim /server/scripts/yum.sh 

#!/usr/bin/bash
yum install -y iftop


#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行
[root@manager ~]# ansible nfs -m script -a "/server/scripts/yum.sh"

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_Ansible_06

 

 

3.yum 安装软件模块

[root@manager scripts]# ansible nfs -m yum -a "name=nfs-utils state=present enablerepo=epel"
name    #指定要安装的软件包名称,或者指定本地路径,或者一个URL地址
state    #指定使用yum的方法
    installed,present #安装软件包
    removed,absent    #移除软件我
    latest                #安装最新软件包
enablerepo        #指定软件包从哪个仓库获取
disablerepo        #除了某个仓库,其他都可以
download_only    #只下载不安装

copy
file
user
group
service
mount
cron
get_url
unarchive

 

4、copy文件拷贝模块

#推送文件模块

#推送文件模块
[root@manager scripts]# ansible nfs -m copy -a "src=/etc/hosts dest=/tmp/test.txt "

#在推送覆盖远端文件前,对远端已有文件进行备份,按照时间信息备份
[root@manager scripts]# ansible nfs -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup.


#直接向远端文件内容写入数据信息,并且会覆盖远端原有数据信息
[root@manager scripts]# ansible nfs -m copy -a "content='bgx' dest=/tmp/nfs"

 

copy 配置
  [root@manager scripts]# cat /etc/exports.template 
  /test 172.26.73.0/24(rw,sync,all_squash,anonuid=888anongid=888)

  [root@manager scripts]# ansible nfs -m copy -a "src=./exports.template dest=/etc/exports owner=root group=root mode=644 backup=yes"

src         #推送数据的源文件信息
dest        #推送数据的目标路径
backup      #对推送传输过去的文件,进行备份
content     #直接批量在被管理端文件中添加内容
group       #将本地文件推送到远端,指定文件属组信息
owner       #将本地文件推送到远端,指定文件属主信息
mode        #将本地文件推送到远端,指定文件权限信息

 

[root@manager ~]# vim exam.template
[root@manager ~]# 
[root@manager ~]# ansiable nfs -m copy -a "src=./exam.template dest=/etc/exam backup=yes"
-bash: ansiable: command not found
[root@manager ~]# ansible nfs -m copy -a "src=./exam.template dest=/etc/exam backup=yes"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "a357a8b826d0c8c72c43c6b1bcd4635746f3c9b1", 
    "dest": "/etc/exam", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d992c5c66f3f552851d055a82b28ed20", 
    "mode": "0644", 
    "owner": "root", 
    "size": 14, 
    "src": "/root/.ansible/tmp/ansible-tmp-1585733582.13-104519695776983/source", 
    "state": "fi

 

 

[root@manager ~]# ansible nfs -m copy -a "content='123' dest=/etc/exam"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "40bd001563085fc35165329ea1ff5c5ecbdbbeef", 
    "dest": "/etc/exam", 
    "gid": 888, 
    "group": "aaa", 
    "md5sum": "202cb962ac59075b964b07152d234b70", 
    "mode": "0644", 
    "owner": "root", 
    "size": 3, 
    "src": "/root/.ansible/tmp/ansible-tmp-1585822895.49-104726563305727/source", 
    "state": "file", 
    "uid": 0
}

======================================================================================

[root@nfs ~]# cat /etc/exam 
123
[root@nfs ~]#

 

5、file文件配置模块

[root@manager ~]# ansible nfs -m file -a "path=/emp/exam state=directory"

[root@manager ~]# ansible nfs -m file -a "path=/tmp/tt state=touch mode=555 owner=root group=root mode=644 backup=yes"

[root@manager ~]# ansible nfs -m file -a "src=/tmp/tt path=/tmp/tt_link state=link"


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

 

6、service 服务模块

[root@manager ~]# ansible nfs -m service -a "name=crond state=stopped enable=yes"

name        #定义要启动服务的名称
state        #指定服务状态
    started        #启动服务
    stopped        #停止服务
    restarted      #重启服务
    reloaded       #重载服务
enable             #开机自启

 

7、group组模块

[root@manager scripts]# ansible nfs -m group -a "name=aaa gid=888 state=present"
name           #指定创建的组名
gid            #指定组的gid
system         #创建系统用户,默认不创建
state
    absent     #移除远端主机的组
    present    #创建远端主机的组(默认)

 

[root@manager ~]# ansible nfs -m group -a "name=aaa gid=888 state=present"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 888, 
    "name": "aaa", 
    "state": "present", 
    "system": false
}

 

[root@manager ~]# ansible nfs -m copy -a "src=./exam.template dest=/etc/exam owner=root group=aaa mode=644 backup=yes"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "a357a8b826d0c8c72c43c6b1bcd4635746f3c9b1", 
    "dest": "/etc/exam", 
    "gid": 888, 
    "group": "aaa", 
    "mode": "0644", 
    "owner": "root", 
    "path": "/etc/exam", 
    "size": 14, 
    "state": "file", 
    "uid": 0
}

=================================================================================

nfsnobody:x:65534:
www:x:666:
aaa:x:888:
[root@nfs ~]# ll /etc/exam 
-rw-r--r-- 1 root root 14 Apr  1 17:47 /etc/exam
[root@nfs ~]# ll /etc/exam 
-rw-r--r-- 1 root aaa 14 Apr  1 17:47 /etc/exam
[root@nfs ~]#

 

user  创建用户

场景一
[root@manager ~]# ansible nfs -m user -a "name=aaa uid=888 group=aaa groups=www append=yes create_home=no shell=/sbin/nologin"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": false, 
    "group": 888, 
    "groups": "www", 
    "home": "/home/aaa", 
    "name": "aaa", 
    "shell": "/sbin/nologin", 
    "state": "present", 
    "system": false, 
    "uid": 888
}

 

场景二

[root@manager ~]# ansible all -i localhost, -m debug -a "msg={{ '1' | password_hash('sha512','mysecretsalt') }}"
localhost | SUCCESS => {
    "msg": "$6$mysecretsalt$47o4R/btNUBdeUe.eAV/RbdNcZM7vXgMWGhLsStZuSbzojBIhSKbrVC0UIFr4CLfLmusW6qmtgQ4SMhAFbcEl/"
}

[root@manager ~]# ansible nfs -m user -a 'name=qqq password=$6$mysecretsalt$47o4R/btNUBdeUe.eAV/RbdNcZM7vXgMWGhLsStZuSbzojBIhSKbrVC0UIFr4CLfLmusW6qmtgQ4SMhAFbcEl/ create_home=yes shell=/bin/bash'
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 1000, 
    "home": "/home/qqq", 
    "name": "qqq", 
    "password": "NOT_LOGGING_PASSWORD", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 1000
}
[root@manager ~]#

 

场景三、创建用户同时创建公钥和私钥

[root@manager ~]# ansible nfs -m user -a  'name=qqq generate_ssh_key=yes ssh_key_bits=2048 ssh_dey_file=.ssh/id_rsa'


user模块的使用方法

    uid                #指定用户的uid
    group             #指定用户组名称
    groups            #指定附加组名称
    append            #指定附加组需要使用的参数
    password            #给用户添加密码
    shell               #指定用户登录shell
    create_home         #是否创建家目录
    generate_ssh_key     #是否创建密钥对
    ssh_key_bits        #密钥对的加密长度
    ssh_key_file         #密钥存放的位置

 

file

[root@manager ~]# ansible nfs -m file -a "path=/test state=directory recurse=yes owner=aaa group=aaa mode=755"
172.26.73.197 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "gid": 888, 
    "group": "aaa", 
    "mode": "0755", 
    "owner": "aaa", 
    "path": "/test", 
    "size": 4096, 
    "state": "directory", 
    "uid": 888
}

 

directory

[root@manager ~]# ansible nfs -m file -a "path=/test state=directory recurse=yes owner=aaa group=aaa"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 888, 
    "group": "aaa", 
    "mode": "0755", 
    "owner": "aaa", 
    "path": "/test", 
    "size": 4096, 
    "state": "directory", 
    "uid": 888
}

 

目录

 

path    #指定远程主机目录或文件信息

recurse  #递归授权

mode    #设置文件或目录权限

owner    #设置文件或目录属主信息

group    #设置文件或目录属组信息

state

  directory  #在远端创建目录

  touch    #在远端创建文件

  link    #link 或 hard 表示创建链接文件

  absent    #表示删除文件或目录

 

 

 

service 服务

name    #定义要启动服务的名称

state    #指定服务状态

  started  #启动服务

  stopped  #停止服务

  restarted  #重启服务

  reloaded  #重载服务

enabled    #开机自启

args      #参数

重启服务
[root@manager ~]# ansible nfs -m service -a "name=nfs-server state=restarted enabled=yes"
172.26.73.197 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "enabled": true, 
    "name": "nfs-server", 
    "state": "started", 
   
[root@manager ~]#

  [root@manager ~]# ansible nfs -m service -a "name=nfs-server state=started enabled=yes"
  172.26.73.197 | SUCCESS => {
  "ansible_facts": {
  "discovered_interpreter_python": "/usr/bin/python"
  },
  "changed": false,
  "enabled": true,
  "name": "nfs-server",
  "state": "started",

 

9.mount 挂载模块

present  #开机挂载,仅将挂载配置写入 /etc/fstab

mounted  #挂载设备,并将配置写入 /etc/fstab

unmounted  #卸载设备,不会清除 /etc/fstab 写入的配置

absent  #卸载设备,会清理 /etc/fstab 写入的配置

[root@manager ~]# ansible web -m mount -a "path=/test src=172.26.73.197:/test fstype=nfs opts=defaults state=mounted"
172.26.73.198 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/test", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "172.26.73.197:/test"
}

[root@manager ~]# ansible web -m mount -a "path=/test src=172.26.73.197:/test fstype=nfs opts=defaults state=present"
172.26.73.198 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/test", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "172.26.73.197:/test"
}

[root@manager ~]# ansible web -m mount -a "path=/test src=172.26.73.197:/test fstype=nfs opts=defaults state=absent"
172.26.73.198 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/test", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "172.26.73.197:/test"
}

path    #挂载点

src    #挂载来源的设备

fstype    #挂载的数据类型

opts    #挂载的参数

state 

  mounted  #挂载设备,并将配置写入 /etc/fstab

  absent  #卸载设备,会清理 /etc/fstab写入的配置

  present  #开机挂载,仅将挂载配置写入 /etc/fstab

  unmounted  #卸载设备,不会清除 /etc/fstab 写入的配置

cron

get_url

 unarchive

 

10.  ansible查看帮助方法

[root@manager ~]# ansible-doc -l           #查看所有模块说明
[root@manager ~]# ansible-doc copy           #表示指定模块方法
[root@manager ~]# ansible-doc -s copy        #表示指定模块参数

 

unarchive

ansibleplaybook 读取文件里的参数信息 ansible playbook yum_Ansible_07

 

 

8, crond 定时任务模块

#正常使用crond 服务

[root@manager ~]# crontab -l
#!/bin/bash
#* * * * * /bin/sh /etc/ansible/playbook/files/push_data
[root@manager ~]#

 

# 使用ansible 添加一条定时任务

 

 

#设置定时任务注释信息,防止重复,name设定

 

#删除相应定时任务

 

#注释相应定时任务,使定时任务失效

 

[root@manager ~]# ansible nfs -m cron -a "name='Rsync Scripts' minute=00 hour01 day=* month=* weekday=* job='/usr/bin/bash /server/scripts/rsync.sh &>dev/null'"

 

name   添加定时任务注释

user  #指定定时任务写入到哪个用户下

minute  #分

hour  #时

day  #日

month  #月

weekday  #周

job  #任务

state  #状态

  present  #创建定时任务,默认

  absent  #删除定时任务

查看ansible 模块帮助文档
[root@manager ~]# ansible-doc cron
[root@manager ~]# ansible-doc -s yum
[root@manager ~]# ansible-doc get_url

 

yum_repository

get_url

安装、配置、启动、测试

 

rsync

nfs

web 挂载测试能写即可

脚本推送