ANSIBLE基本模块

本文详细介绍了Ansible,一种基于Python的自动化工具,以其简单易用的YAML语法、模块化管理、SSH通信等特点。文章涵盖了Ansible的核心组件、安装环境设置、以及关键模块如command、shell、cron、user等的使用方法和实验示例。
摘要由CSDN通过智能技术生成

目录

一、ansible是什么

二、ansible的特点

三、ansible核心程序

四、实验:ansible部署

1.安装环境

2.ansible 命令行模块 

(1)command 模块

(2)shell 模块

(3)cron 模块

(4)user 模块

(5)group 模块

(6)copy 模块

(7)file 模块

(8)hostname 模块

(9)ping 模块

(10)yum 模块

(11)service/systemd 模块

(12)script 模块

(13)setup 模块

一、ansible是什么

        Ansible是一种自动化IT工具,用于管理和配置计算机系统、应用程序和网络设备等。它可以自动化部署、管理和编排复杂的IT应用程序和基础设施,提高IT效率和可靠性。Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块。

        Ansible使用SSH协议进行通信,不需要在目标主机上安装任何客户端软件或代理,只需要在控制节点上安装Ansible即可。这使得Ansible非常容易部署和维护,并且可以适用于各种不同的环境和操作系统。

二、ansible的特点

  1. 简单易用: Ansible使用YAML语言编写配置文件,易于阅读和编写,无需编写复杂的脚本或代码。

  2. 自动化配置管理: Ansible可以自动化配置和管理服务器、网络设备、云平台等,包括安装软件、修改配置文件、添加用户等操作。

  3. 基于模块化: Ansible使用模块化的方式来管理主机,每个模块都对应一个特定的任务,如文件操作、用户管理、软件安装等。

  4. 基于角色: Ansible使用角色的概念来组织和管理任务,将多个模块组合成一个角色,可以方便地复用和扩展。

  5. 安全可靠: Ansible使用SSH协议进行通信,支持加密和认证,可确保通信的安全性和可靠性。

三、ansible核心程序

Ansible是一个自动化工具,由以下核心程序组成:

  1. Ansible主控节点(Control Node): Ansible主控节点是执行Ansible命令和管理配置的机器。它可以是任何具有Python解释器和SSH连接功能的机器,通常是管理员的工作站或专用的管理服务器。

  2. Ansible模块(Modules): Ansible模块是执行具体任务的代码单元。它们可以在远程主机上执行命令、复制文件、安装软件等操作。Ansible提供了大量的内置模块,也支持编写自定义模块。

  3. Ansible插件(Plugins): Ansible插件是用于扩展Ansible的功能和定制行为的组件。它们可以用于添加新的模块源、变量解析器、库存源、回调插件等。

  4. Ansible剧本(Playbooks): Ansible剧本是使用YAML语言编写的自动化任务脚本。它们定义了一系列任务和配置项,描述了需要在远程主机上执行的操作步骤和顺序。

  5. Ansible配置文件(Ansible Configuration File): Ansible配置文件包含了Ansible的全局设置,如默认的SSH用户、库存文件位置、日志输出等。它可以用于定制Ansible的行为。

  6. Ansible库存文件(Inventory File): Ansible库存文件定义了要管理的远程主机和主机组。它可以是一个INI格式的文件,也可以是一个动态生成的脚本。

  7. Ansible变量(Variables): Ansible变量用于存储配置信息和参数化任务。它们可以在剧本中定义,并根据需要进行传递和替换。

这些核心程序共同工作,使得Ansible能够自动化执行各种IT任务,包括配置管理、应用部署、网络设备管理等。通过简单的语法和基于SSH的无代理通信,Ansible提供了一种简单而强大的方式来实现自动化。

四、实验:ansible部署

1.安装环境

管理端: 192.168.88.10        ansible                    
被管理端: 192.168.88.11                                
被管理端: 192.168.88.12                             

//管理端安装 ansible
yum install -y epel-release            //先安装 epel 源
yum install -y ansible

//ansible 目录结构
/etc/ansible/
├── ansible.cfg            #ansible的配置文件,一般无需修改
├── hosts                #ansible的主机清单,用于存储需要管理的远程主机的相关信息
└── roles/                #公共角色目录

//配置主机清单  
cd /etc/ansible 
vim hosts       
[webservers]            #配置组名
192.168.88.11            #组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)


[dbservers]
192.168.88.12

//配置密钥对验证
ssh-keygen -t rsa        #一路回车,使用免密登录
sshpass -p 'abc1234' ssh-copy-id root@192.168.88.11
sshpass -p 'abc1234' ssh-copy-id root@192.168.88.12  


2.ansible 命令行模块 


命令格式:ansible <组名> -m <模块> -a <参数列表>

ansible-doc -l                #列出所有已安装的模块,按q退出

(1)command 模块


//在远程主机执行命令,不支持管道,重定向等shell的特性。
ansible-doc -s command        #-s 列出指定模块的描述信息和操作动作

ansible 192.168.88.11 -m command -a 'date'        #指定 ip 执行 date
ansible webservers -m command -a 'date'            #指定组执行 date
ansible dbservers -m command -a 'date'       
ansible all -m command -a 'date'                #all 代表所有 hosts 主机
ansible all -a 'ls /'                            #如省略 -m 模块,则默认运行 command 模块

//常用的参数:
chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作

ansible all -m command -a "chdir=/home  ls ./"

(2)shell 模块


//在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)
ansible-doc -s shell

ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

(3)cron 模块


//在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron                #按 q 退出

//常用的参数:
minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称

ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'            #移除计划任务,假如该计划任务没有取名字,name=None即可

(4)user 模块


//用户管理的模块
ansible-doc -s user

//常用的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时,是否删除用户的家目录

ansible dbservers -m user -a 'name="test01"'                #创建用户test01
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="test01" state=absent'    #删除用户test01

(5)group 模块


//用户组管理的模块
ansible-doc -s group

ansible dbservers -m group -a 'name=mysql gid=306 system=yes'    #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql'    #将test01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'    

(6)copy 模块


//用于复制指定主机文件到远程主机的
ansible-doc -s copy

//常用的参数:
dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限 
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用

ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'

ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'  #将helloworld写入/opt/hello.txt文件中
ansible dbservers -a 'cat /opt/hello.txt' 

(7)file 模块


//设置文件属性
ansible-doc -s file

ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'    #修改文件的属主属组权限等
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'    #设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"            #创建一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"            #删除一个文件

(8)hostname 模块


//用于管理远程主机上的主机名
ansible dbservers -m hostname -a "name=mysql01"

(9)ping 模块


//检测远程主机的连通性
ansible all -m ping

(10)yum 模块


//在远程主机上安装与卸载软件包
ansible-doc -s yum

ansible webservers -m yum -a 'name=httpd'                    #安装服务
ansible webservers -m yum -a 'name=httpd state=absent'        #卸载服务

(11)service/systemd 模块


//用于管理远程主机上的管理服务的运行状态
ansible-doc -s service

//常用的参数:
name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动

ansible webservers -a 'systemctl status httpd'            #查看web服务器httpd运行状态
ansible webservers -m service -a 'enabled=true name=httpd state=started'            #启动httpd服务

(12)script 模块


//实现远程批量运行本地的 shell 脚本
ansible-doc -s script

vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt

chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

(13)setup 模块


//facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息
ansible-doc -s setup

ansible webservers -m setup                #获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以筛选指定的facts信息

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值