Linux下ansible使用

一、ansible的功能和意义

1、功能

1
2
3
4
5
ansible批量功能 ----------------------> 并行<br>
   01. 可以实现批量系统操作配置
   02. 可以实现批量软件服务部署
   03. 可以实现批量文件数据分发
   04. 可以实现批量系统信息收集

  

2、意义

1
2
3
4
01. 提高工作的效率
02. 提高工作准确度
03. 减少维护的成本
04. 减少重复性工作    

  

二、ansible的特点

1
2
3
1. 没有配置文件(不需要配置)
2. 不需要启动服务
3. 客户端不需要部署任务

  

三、ansible和相似的软件对比

和ansible相似的软件:saltstack

saltstack也是自动化批量管理软件。

但是saltstack比较复杂,软件服务比较重。

 

四、ansible安装

yum安装(需要epel源):

1
yum -y install epel-release
1
yum install -y ansible

 

五、ansible基本使用(默认是以root用户执行,但是基于ssh连接操作要多次输入密码,为方便可以使用基于ssh密钥方式进行认证)

1、ansible主要配置文件

1
2
3
(1) ansible应用程序的主配置文件:/etc/ansible/ansible.cfg
 
(2) Host Inventory定义管控主机:/etc/ansible/hosts

  

2、ansible应用程序命令

1
2
3
4
ansible-doc 命令:获取模块列表,及模块使用格式;
 
ansible-doc -l:获取模块列表
ansible-doc -s  module_name:获取指定模块的使用信息

 

 

ansible的命令格式可以理解为(ansible还有很多参数):

1
ansible     主机信息(IP 主机组 all ...)    -m    (模块名)command     -a      "操作动作"

 

 3、ansible执行命令返回信息的颜色的含义

(1)绿色:执行成功

(2)黄色:执行成功并且状态发生了改变

(3)红色:执行失败

提示:可以在ansible.cfg中进行定制颜色的设定

 

六、ansible主机清单功能模块(指定可以管理哪些主机)

1、主机清单配置方式:

方式1:直接把IP写在配置文件中

方式2:指定分组

1
2
3
4
5
6
[oldboy]
172.16.1.41
172.16.1.31
 
[oldgirl]
172.16.1.7

  

方式3:支持主机名符号匹配配置

1
2
3
[oldboy]
172.16.1.[1:50]
web[01:03]

  

方式4:支持内置变量信息配置

1
2
3
4
5
[oldboy]
172.16.1.7  ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
 
[oldboy]
172.16.1.7  ansible_user=root ansible_password=123456 ansible_port=22

  

方式5:支持特殊变量信息配置 (剧本)

1
2
3
4
5
6
7
[oldboy]
172.16.1.7
 
[oldboy:vars]
ansible_user=root
ansible_password=123456
ansible_port=22

  

方式6:嵌入式配置方法

1
2
3
4
5
6
7
8
9
[backup:children]
backupclient
backupserver
 
[backupclient]
172.16.1.7  ansible_user=root ansible_password=123456
172.16.1.31
[backupserver]
172.16.1.41

 

2、ansible命令指定管理的主机方式

ansible命令后面指定要管理的主机,all表示主机清单里面的全部主机,也可指定主机清单里面的分组名等。

 

 

七、ansible的模块使用(以下列举的是一些常用的模块)

1、ping模块

 

 

2、command模块 :命令模块=========在目标主机执行命令

参数:

1
2
3
4
chdir:    在执行命令前,先切换目录信息
creates:  判断一个文件是否存在,如果存在,后面命令被跳过(不执行)
removes:  判断一个文件是否存在,如果存在,后面命令就执行
free_form:在使用command模块时候必须输入一个合法的linux命令

  

基本用法:

1
2
3
4
5
6
7
8
9
[root@m01 ansible]# ansible backup -m command -a "hostname"
    172.16.1.31 | CHANGED | rc=0 >>
    nfs01
     
    172.16.1.41 | CHANGED | rc=0 >>
    backup
     
    172.16.1.7 | CHANGED | rc=0 >>
    web01

  

特殊用法:

1
2
3
4
5
6
7
8
9
10
chdir 参数:
[root@m01 ansible]# ansible backup -m command -a "chdir=/tmp pwd"
    172.16.1.31 | CHANGED | rc=0 >>
    /tmp
     
    172.16.1.7 | CHANGED | rc=0 >>
    /tmp
     
    172.16.1.41 | CHANGED | rc=0 >>
    /tmp

 

 

1
2
3
4
5
6
7
8
creates 参数:
[root@m01 tmp]# ansible backup -m command -a "creates=/etc/oldboy.txt touch /opt/oldboy.txt"
    172.16.1.41 | CHANGED | rc=0 >>
     
    172.16.1.7 | SUCCESS | rc=0 >>
    skipped, since /etc/oldboy.txt exists
     
    172.16.1.31 | CHANGED | rc=0 >>

 

  

3、shell模块:万能模块==========在目标主机执行命令

 

1
2
3
4
5
6
chdir:    在执行命令前,先切换目录信息
creates:  判断一个文件是否存在,如果存在,后面命令被跳过(不执行)
removes:  判断一个文件是否存在,如果存在,后面命令就执行
free_form:在使用command模块时候必须输入一个合法的linux命令
可以识别一些特殊字符  < > | ; $<br>
提示:shell模块虽然是万能模块,但最好选择专业的模块完成专业事情

 

  

例如:

1
ansible backup -m shell -a "rpm -qa iftop"

  

4、script模块:命令模块==========执行脚本

例如:

1
ansible backup -m script -a "/server/scripts/yum.sh"

  

5、copy模块:=============批量分发文件

作用:

1
2
3
01. 分发文件数据信息     从管理端 -- 被管理端
02. 修改文件权限属性信息 
03. 移动远程主机数据信息 被管理端 -- /tmp/oldboy.txt --- /opt/

  

1
2
3
4
5
6
7
8
9
参数:
    src: 指定要推送的数据信息
    dest:指定数据保存在远程主机什么目录中
    mode:修改文件权限信息
    owner:修改文件属主信息
    group:修改文件属组信息
    backup: 分发文件数据时,会对源文件进行备份
    remote_src: 复制远程主机文件到其他路径,或者进行远程主机数据备份
    content:  直接编辑文件内容

基本用法:

1
ansible backup -m copy -a "src=/etc/hosts dest=/etc/"

  

特殊用法:

传输文件时,修改文件权限:

1
ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.bak mode=600 owner=oldboy666 group=oldboy666"

分发文件时,对源文件进行备份:

1
ansible backup -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"

远程主机文件进行复制备份(便于批量还原):

1
ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.backup  remote_src=yes"

批量还原:

1
ansible backup -m copy -a "src=/etc/hosts.backup dest=/etc/hosts  remote_src=yes"

直接编辑文件信息,并且进行批量分发:

1
ansible backupclient -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"

 

6、fetch模块:===================批量拉取文件

1
ansible 172.16.1.7 -m fetch -a "src=/etc/oldgirl.txt dest=/tmp"

  

7、file模块:

作用:

01. 修改文件权限信息

02. 创建数据信息/删除数据信息

 

基本用法:修改文件权限

 

1
ansible 172.16.1.7 -m file -a "path=/etc/oldgirl.txt mode=666 owner=oldboy666 group=oldboy666"

 

  

特殊用法:创建数据信息

1
2
3
4
5
6
7
参数:state
    absent       -- 删除数据信息
    directory    -- 创建目录
    file
    hard         -- 创建硬链接
    link         -- 创建软链接
    touch        -- 创建文件

 

创建文件:

1
ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy.txt state=touch"

  

创建目录:

1
ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir state=directory"

  

删除文件数据:

1
ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir/oldboy_soft_link  state=absent"

  

 

 

8、cron模块:定时任务模块=========批量添加设置定时任务信息

1
2
3
4
5
6
参数:
    minute  hour   day   month  weekday  --- 时间参数
    job     -- 指定定时任务信息
    name    -- 添加注释信息
    state   -- absent 删除定时任务 present 添加定时任务
    disabled   -- 注释定时任务 yes  取消定时任务注释 no

  

每隔5分钟,时间同步:

 

1
ansible backup -m cron -a "name='date ntpdate crond02'  minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"

 

  

批量删除定时任务信息:

1
ansible backup -m cron -a "name='date ntpdate crond' state=absent"

  

批量注释定时任务信息:

1
ansible backup -m cron -a "name='date ntpdate crond'  minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"

  

9、yum模块:批量下载安装软件

1
2
3
参数:
    name:  指定软件名称
    state: 指定动作信息  installed

  

1
ansible backup -m yum -a "name=nmap state=installed"

  

10、service模块:管理服务状态模块

作用:批量启动/停止服务程序  设置服务是否开机自动启动

 

 

1
2
3
4
参数:
name:   定义服务名称
state:  是否启动 started 停止 stopped 重启 restarted 平滑重启 reloaded
enabled:设置服务是否开机自动启动

 

  

1
2
3
ansible backup -m service -a "name=firewalld state=started enabled=yes"
 
ansible backup -m service -a "name=firewalld state=stopped enabled=no"

  

11、user模块:用户管理

1
2
3
4
5
6
7
8
参数
    name  创建的用户名称
    uid   指定用户的uid信息
    group    指定属于主要组
    groups   指定属于哪个附属组
    password 设置用户密码信息???
    shell    指定登录方式 /bin/bash  /sbin/nologin
    create_home:

  

创建虚拟用户:

1
ansible backup -m user -a "name=Alex uid=250 group=root groups=oldboy shell=/sbin/nologin create_home=no"

  

12、mount模块:挂载

1
2
3
4
5
6
7
8
9
参数:
src:需要挂载存储设备信息
path: 挂载点路径信息
fstype:挂载类型信息
state:挂载操作(mounted present)/卸载操作(unmounted absent)
mounted:可以实现立即挂载  永久开机自动挂载
present:永久开机自动挂载
unmounted:可以实现立即卸载
absent:可以实现立即卸载  永久卸载

  

批量挂载:

1
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"

  

 

八、ansible剧本

1、具体的编写规范

(1)python yaml 语法规范

(2)规范位置

1
2
3
mkdir /etc/ansible/ansible_playbook
 
vim /etc/ansible/ansible_playbook/test.yaml

(3)语法规范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
规则一:缩进
 
yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键  
 
  
 
规则二:冒号
 
CMD="echo"
 
    yaml:
 
    mykey:
 
每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
 
 
 
规则三:短横线
 
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的

 

2、剧本的执行方式

(1)检查剧本的语法

1
ansible-playbook --syntax-check test.yaml

(2)剧本模拟执行

1
ansible-playbook -C test.yaml

(3)正式执行剧本

1
ansible-playbook  test.yaml

 

3、ansible剧本的编写

 

 

 

 

 

posted @   映辉  阅读(649)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示