Ansible-基础模块

发布时间:2024年01月19日

目录

一?Ansible概述

1.Ansible是什么

2.为什么要学Ansible(特点)

二 Ansible的架构及运行机制

1.Ansible的架构

2.Ansible的运行机制

三 Ansible环境安装部署

1.控制节点安装ansible

2.Ansible目录结构

3.Ansible 命令行模块

(1)?command 模块

?(2)shell模块

(3)cron 模块

?(4)user模块

?(5)group模块

(6)copy模块


一?Ansible概述

1.Ansible是什么

Ansible是一个基于Python开发的配置管理和应用部署工具,可以用于自动化部署、配置和管理计算机系统。它以简单性、可读性和灵活性为设计理念,使用SSH协议进行通信,并且不需要在被管理的计算机上安装任何额外的客户端软件。

2.为什么要学Ansible(特点)

  • 自动化部署和配置管理:Ansible使得软件部署和配置变得简单且可重复。通过编写Ansible脚本,可以定义和描述所需的系统配置,并自动应用到多台计算机上。这可以大大减少手动操作的时间和错误,并提高系统的一致性和可靠性。

  • 简单易学:相比其他自动化工具,Ansible的学习曲线相对较低。它采用基于文本的配置语言(YAML)和简单的任务模块,易于理解和编写。

  • 平台无关性:Ansible是基于SSH协议进行通信的,因此可以在各种不同的操作系统和云平台上运行。

  • 扩展性和灵活性:Ansible具有丰富的模块库和插件生态系统,可以满足各种不同场景下的自动化需求。

  • 社区支持和广泛应用:Ansible拥有庞大的开源社区支持,并且得到了广泛的应用。无论是小型项目还是大型企业环境,Ansible都被广泛使用于系统管理、应用部署、配置管理等方面。


二 Ansible的架构及运行机制

1.Ansible的架构

在Ansible中,数据的流向可以概括为以下几个部分:

  • 控制节点到被控制节点:控制节点是运行Ansible的主机,它通过SSH协议与被控制节点建立连接。控制节点将任务和命令发送到被控制节点,并接收执行结果。

  • 主机清单到控制节点:主机清单文件列出了被控制节点的连接信息,包括主机名或IP地址、SSH用户名和密码等。控制节点读取主机清单文件,获取被控制节点的信息,以便建立与被控制节点的连接。

  • Playbook到控制节点和被控制节点:Playbook是一个YAML文件,定义了自动化流程、任务和主机清单的组合。控制节点读取Playbook文件,解析其中的任务和主机清单信息,并将任务和命令发送到相应的被控制节点。

  • 模块和插件的数据传输:Ansible使用各种模块和插件来实现不同的任务。数据在控制节点和被控制节点之间通过SSH协议传输。例如,当执行文件复制任务时,控制节点将文件发送到被控制节点,或者从被控制节点获取文件。

总体上,数据从控制节点流向被控制节点,包括命令、任务、文件等。控制节点负责解析和发送数据,而被控制节点负责执行任务并返回执行结果。这种数据流向使得Ansible可以实现自动化管理和配置的目标主机。

2.Ansible的运行机制

Ansible的运行机制是基于控制节点和被控制节点之间的通信,控制节点是运行Ansible的主机,被控制节点是需要管理和配置的目标计算机,主机清单文件列出了所有被控制节点的连接信息,模块定义了要执行的任务,Playbook定义了整个自动化流程,Ansible通过SSH协议连接到被控制节点,并在每个节点上依次执行相应的任务。Ansible的运行机制简单高效,适用于大规模环境和复杂的自动化需求。


三 Ansible环境安装部署

控制节点192.168.27.30? ? ? ? ? ? ? ? ????????????????????????????????ansible
被控制节点192.168.27.40
被控制节点192.168.27.50

1.控制节点安装ansible

(1)安装epel源、ansible

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

(2)配置主机清单

cd /etc/ansible 

?vim hosts ? ? ??

[webservers]        #配置组名
192.168.27.10       #组里包含的被控制的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)

[dbservers]
192.168.27.20

(3)配置密钥对验证

ssh-keygen -t rsa		#一路回车,使用免密登录
sshpass -p '123456' ssh-copy-id root@192.168.27.10
sshpass -p '123456' ssh-copy-id root@192.168.27.20 

2.Ansible目录结构

/etc/ansible/? ? ? ? ? ? ? ? ? ??
├── ansible.cfg? ? ? ? ?
├── hosts? ? ? ? ? ? ??
└── roles/? ? ? ? ? ? ? ?

  • /etc/ansible/:默认的Ansible配置文件和相关文件存放目录。
  • ansible.cfg:Ansible的配置文件,用于配置一些全局参数,例如SSH连接参数、默认的远程用户等。这个文件一般无需手动修改,除非需要特别定制Ansible的行为。
  • hosts:Ansible的主机清单文件,用于存储需要管理的远程主机的相关信息,例如主机名、IP地址、SSH用户名和密码等。这个文件是必需的,因为Ansible需要知道要连接哪些主机,并在这些主机上执行任务。
  • roles/:Ansible的角色目录,用于存放可重用的Playbook代码和任务模板。一个角色可以包含多个任务和变量,可以被多个Playbook共享和复用。角色目录结构包括tasks、handlers、templates、files、vars、defaults、meta等子目录,用于组织和管理角色的不同部分。

3.Ansible 命令行模块

(1)?command 模块

在远程主机执行命令,不支持管道,重定向等shell的特性。

ansible-doc -s command        #-s 列出指定模块的描述信息和操作动作

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

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

常用的参数:

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

?(2)shell模块

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

ansible dbservers -m shell -a 'echo 123456| passwd --stdin work'

(3)cron 模块

在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。

ansible-doc -s cron				#按 q 退出

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即可

常用的参数:

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

?(4)user模块

用户管理的模块

ansible-doc -s user

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

常用的参数:

  • 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时,是否删除用户的家目录

?(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=work01 uid=306 system=yes group=mysql'	
#将work01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id work01'    

(6)copy模块

用于复制指定主机文件到远程主机的。

ansible-doc -s copy

常用的参数:

  • dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容。
  • src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录。
  • mode:指出复制时,目标文件的权限 。
  • owner:指出复制时,目标文件的属主。
  • group:指出复制时,目标文件的属组。
  • content:指出复制到目标主机上的内容,不能与src一起使用。
文章来源:https://blog.csdn.net/qq_64441401/article/details/135679194
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。