Ansible安装配置及基础模块介绍

一、Ansible概念介绍

1、Ansible概念

ansible就是一款运用==Python语言开发==的自动化运维工具,==基于SSH协议==实现批量系统配置、批量程序部署、批量运行命令等功能 。ansible不用配置配置文件,无需启动任何服务,不需要单独安装客户端。

Ansible组成结构:

  • Ansible

    Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。

  • Ansible Playbook

是任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,==yaml格式==。

  • Inventory

    Ansible管理主机的清单,默认是==/etc/ansible/hosts==文件。

  • Modules

    Ansible执行命令的功能模块,截止现在2.9版本共有3387个模块,==还可以自定义模块==。

  • Plugins

    插件,模块功能的补充,常有连接类型插件、循环插件、变量插件、过滤插件、插件功能用的较少。

  • API

    提供给第三方程序调用的应用程序编程接口。

2、学习使用Ansible方法

==官方文档==(推荐)、系统帮助文档(ansible-doc 模块名称)、网上博客文档等三种方式

二、Ansible安装流程

1、安装软件

yum -y install ansible

2、编写Inventory文件(管理主机清单)

(1)基于密码口令连接

vim /etc/ansible/hosts
#方法一:主机+端口+用户密码
[web]
172.16.1.7 ansible_port=22 ansible_user=root ansible_password='123456'
172.16.1.8 ansible_port=22 ansible_user=root ansible_password='123456'
172.16.1.9 ansible_port=22 ansible_user=root ansible_password=123456'

#方法二:主机+用户密码
[web]
172.16.1.[7:9] ansible_user=root ansible_password='123456'

#方法三:主机+用户密码
[web]
172.16.1.[7:9]
[web:vars]                          #主机组变量
ansible_password='123456'

(2)基于密钥连接

ssh-keygen      #ansible主机创建密钥
for i in {7..9}; do ssh-copy-id -i 172.16.1.$1; done        #批量分发公钥

vim /etc/ansible/hosts
[web]
172.16.1.[7:9]

3、测试SSH连接是否正常

ssh 172.16.1.7

三、Ansible命令介绍

1、Ansible命令格式说明

Ansible安装配置及基础模块介绍_第1张图片

2、示例

ansible web -m ping         #指定主机组执行命令
ansible 172.16.1.7,172.16.1.9 -m ping       #指定多台主机执行命令
ansible all -m ping         #指定所有主机执行命令

四、Ansible常用模块介绍

1、查看模块帮助命令Ansible-doc

# ansible-doc -h
Usage: ansible-doc [-l|-F|-s] [options] [-t  ] [plugin]
-j  以json格式显示所有模块信息
-l  列出所有的模块
-s  查看模块常用参数
#命令后直接跟模块名,显示模块所有信息

2、command模块

ansible默认的模块,注意:shell中的=="<", ">", "|", ";", "&","$"==等特殊字符不能在command模块中使用,如果需要使用,则用shell模块 。==command模块中命令别名失效。==

[root@m01 ~ 11:35:43]# ansible web -m command -a "ls -ld /etc"
172.16.1.7 | CHANGED | rc=0 >>
drwxr-xr-x. 89 root root 8192 Jul 23 20:27 /etc

[root@m01 ~ 11:35:51]# ansible web -a "ls -ld /etc"
172.16.1.7 | CHANGED | rc=0 >>
drwxr-xr-x. 89 root root 8192 Jul 23 20:27 /etc
[root@m01 ~ 11:40:09]# ansible web -a "ifconfig eth0|grep '10.0.0.7'"
172.16.1.7 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

3、shell模块

Ansible万能模块,专门用来执行shell命令的模块,和command模块参数基本一样,都有chdir、creates、removes等参数。==shell模块不具备状态监测功能,会重复执行==

[root@m01 ~ 11:40:30]# ansible web -m shell -a "ifconfig eth0|grep '10.0.0.7'"
172.16.1.7 | CHANGED | rc=0 >>
        inet 10.0.0.7  netmask 255.255.255.0  broadcast 10.0.0.255

4、copy模块

用于管理端复制文件到远程主机,并可以设置权限、属组、属主等

(1)示例

1)推送文件到远程主机,并修改权限、属组、属主

[root@m01 ~ 12:09:21]# ansible web -m copy -a "src=/tmp/1.txt dest=/tmp mode=0600 owner=www group=www" 
172.16.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp/1.txt", 
    "gid": 1001, 
    "group": "www", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0600", 
    "owner": "www", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1595650245.49-7981-38715120566747/source", 
    "state": "file", 
    "uid": 1001
}

2)添加内容到远程主机文件,并提前生成备份文件

[root@m01 ~ 12:10:46]# ansible web -m copy -a "content='zhenhao' dest=/tmp/1.txt backup=yes"

(2)模块参数

src     #指定管理端被推送的文件
dest    #指定推送到客户端哪儿
mode    #指定推送到客户端文件的权限设置
owner   #指定推送到客户端文件的属主设置
group   #指定推送到客户端文件的属组设置
backup  #对推送到客户端的文件进行备份
content #添加内容到客户端文件里

5、file模块

用于对远程主机文件的处理,创建,删除,权限控制等

(1)示例

1)远程主机创建目录并修改权限

[root@m01 ~ 16:49:19]# ansible web -m file -a "path=/tmp/oldboy state=directory mode=0744 owner=www group=www"

2)远程主机创建文件

[root@m01 ~ 16:54:24]# ansible web -m file -a "path=/tmp/2.txt state=touch"

3)远程主机创建软链接文件

[root@m01 ~ 16:55:10]# ansible web -m file -a "src=/tmp/2.txt path=/tmp/hh state=link"

4)远程主机删除文件

[root@m01 ~ 16:56:45]# ansible web -m file -a "path=/tmp/1.txt state=absent"

5)递归修改目录及子目录权限

[root@m01 ~ 17:00:38]# ansible web -m file -a "path=/tmp/oldboy state=directory recurse=yes mode=0600"

(2)模块参数

src                 #指定链接的文件路径
path                #要管理设置的文件路径
mode                #指定远程主机文件的权限
owner               #指定远程主机文件的属主
group               #指定远程主机文件的属组
recurse             #递归修改目录及子目录权限
state:
    absent          #删除文件及目录
    directory       #递归创建或修改目录
    file            #默认为文件,但如果文件不存在,不会创建文件
    hard            #创建或修改硬链接
    link            #创建或修改软链接
    touch           #创建文件

6、script模块

用于在远程主机上执行脚本的模块,且远程主机上无需脚本

(1)示例

[root@m01 ~ 17:15:31]# cat >/tmp/hostname.sh <<'EOF'
> #!/bin/bash
> echo $(hostname)
> EOF
[root@m01 ~ 17:29:49]# ansible web -m script -a "/tmp/hostname.sh"

7、cron模块

用于在远程主机上设置定时任务

(1)示例

1)创建定时任务

[root@m01 ~ 17:30:14]# ansible web -m cron -a "job='echo $(hostname)' minute=*/5 name=hostname"

2)注释定时任务(==只能注释ansible创建的定时任务==)

[root@m01 ~ 17:41:28]# ansible web -m cron -a "name=hostname disabled=yes job='echo $(hostname)'"

3)删除定时任务(==只能删除ansible创建的定时任务==)

[root@m01 ~ 17:41:54]# ansible web -m cron -a "name=hostname state=absent"

(2)模块参数

minute              #多少分钟
hour                #多少小时
day                 #多少日
month               #多少月
weekday             #多少周
job                 #执行的定时任务命令
name                #设置的定时任务名称
disabled            #对设置的定时任务进行注释
state:
    absent          #删除设置的定时任务

8、user模块

用于对远程主机用户的管理,用户的创建、删除、家目录、属组等设置

(1)示例

1)创建系统用户

[root@m01 ~ 17:43:48]# ansible web -m user -a "uid=2020 group=www shell=/sbin/nologin name=www create_home=no"

2)删除用户

[root@m01 ~ 17:43:48]# ansible web -m user -a "name=www state=absent"

3)删除用户及家目录

[root@m01 ~ 18:09:19]# ansible web -m user -a "name=hostname state=absent remove=yes"

(2)模块参数

create_home:
    no                  #不创建家目录
group                   #指定用户的用户组名称
home                    #指定用户家目录的路径
name                    #用户的名称
remove:
    yes                 #移除用户家目录
shell                   #指定用户shell解释器路径
state:
    absent              #删除用户
uid                     #设置用户uid

9、group模块

用于对远程主机用户组的管理

(1)示例

1)创建用户组

[root@m01 ~ 18:10:52]# ansible web -m group -a "gid=2020 name=www"

2)删除用户组

[root@m01 ~ 18:10:52]# ansible web -m group -a "name=www state=absent"

(2)模块参数

gid         #指定用户组GID
name        #指定用户组名称
state:
    absent  #删除用户组

10、yum模块

用于对远程主机软件包的管理,下载、安装、卸载、升级等操作

(1)示例

1)安装软件

[root@m01 ~ 18:31:01]# ansible web -m yum -a "name=htop state=installed"

2)卸载软件

[root@m01 ~ 18:31:01]# ansible web -m yum -a "name=htop state=removed"

(2)模块参数

name            #指定软件包的名称
state:   
    installed, present  #安装软件包(两者任选其一都可以)
    removed, absent     #卸载软件包
    latest              #安装最新软件包
list:
    installed   #列出所有已安装的软件包
    updates     #列出所有可以更新的软件包
    repos       #列出所有的yum仓库

11、systemd模块

服务模块,用于对远程主机服务进行管理,服务的启动、关闭、开机自启等 ,==和service模块效果一样==

(1)示例

1)开启服务

[root@m01 ~ 18:31:01]# ansible web -m systemd -a "name=nginx state=started"

2)停止服务

[root@m01 ~ 18:31:01]# ansible web -m systemd -a "name=nginx state=stopped"

3)关闭开机自启服务

[root@m01 ~ 18:44:42]# ansible web -m systemd -a "name=nginx enabled=no"

4)开启开机自启服务

[root@m01 ~ 18:46:34]# ansible web -m systemd -a "name=nginx state=started enabled=yes"

(2)模块参数

enabled:
    no              #默认,关闭开机自启
    yes             #开启开机自启
name                #服务名称
state:
    reloaded        #重新加载服务
    restarted       #重启服务
    started         #开启服务
    stopped         #停止服务

12、mount模块

用于管理远程主机挂载相关操作

(1)示例

1)挂载NFS目录,并写入fstab文件

[root@m01 ~ 19:15:31]# ansible web -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs opts=defaults state=mounted"

2)卸载挂载目录,并删除写入fstab的配置

[root@m01 ~ 19:16:13]# ansible web -m mount -a "path=/mnt state=unmounted"

(2)模块参数

fstype          #指定挂载系统文件类型
opts            #指定挂载其他参数设置
path            #挂载点路径
src             #需要挂载的设备路径
state:
    absent      #卸载挂载点并删除写入fstab配置
    mounted     #进行挂载并写入fstab配置
    present     #只写入fstab配置,不挂载
    unmounted   #只卸载挂载点,不删除写入fstab配置
    remounted   #强制重新挂载

13、unarchive模块

用于解压压缩包到远程主机,或在远程主机上解压压缩包

(1)示例

[root@m01 ~ 19:19:05]# ansible 172.16.1.31 -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/"

(2)模块参数

src     #指定需要解压的压缩包路径
dest    #指定解压到哪儿
remote_src:
    yes     #指定压缩包在远程主机上

14、archive模块

用于打包文件到远程主机,或在远程主机上进行打包文件

(1)示例

[root@m01 ~ 19:16:13]# ansible 172.16.1.31 -m archive -a "path=/var/log/message dest=/tmp/log.tar.gz format=gz force_archive=true"

(2)模块参数

force_archive:
    yes             #强制进行压缩存档
format:         #指定压缩格式,默认gz
    bz2
    gz
    tar
    xz
    zip
path            #需要压缩的文件
dest            #压缩包名
remove:         #压缩存档后,删除压缩源文件
    no
    yes

15、fetch模块

用于从远程主机上面拉取文件,拉取下来的内容会保留目录结构,一般情况用在收集远程主机的日志文件等

(1)示例

[root@m01 ~ 20:00:59]# ansible web -m fetch -a "src=/tmp/2.txt dest=/tmp"

(2)模块参数

src         #指定拉取的文件路径
dest        #拉取到本地哪儿
#默认会已管理节点地址创建一个目录,并存放在内

16、setup模块

获取远程主机信息

(1)示例

[root@m01 ~ 20:04:16]# ansible web -m setup

你可能感兴趣的:(Ansible安装配置及基础模块介绍)