Ansible自动化安装部署及使用

目录

前言

一、环境概况

修改主机名(可选项)

二、安装部署

1.安装epel扩展源

2.安装Ansible

3.修改Ansible的hosts文件

4.生成密钥

三、Ansible模块使用介绍

Command模块

Shell模块

User模块

 Copy模块

File模块

Hostname模块

Yum模块

Service和System模块

Setup 模块


前言

Ansible 是一种开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它采用简单易懂的 YAML 语法和基于 SSH 协议的远程执行,能够实现快速、可靠的自动化配置和部署。

 Ansible 的一些主要特点和功能:

  1. 简单易用: Ansible 使用 YAML 格式的声明性语言,使得编写和阅读 Playbooks(Ansible 的配置文件)变得非常直观和易于理解。无需编写复杂的脚本或程序代码,就可以完成大部分配置和部署任务。

  2. 无代理架构: Ansible 采用基于 SSH 的无代理架构,不需要在目标主机上安装任何额外的代理或客户端软件。这简化了部署和管理过程,并提供了更强的安全性。

  3. 模块化: Ansible 提供了丰富的模块库,用于执行各种操作,如包管理、文件操作、服务管理、用户管理等。模块化的设计使得用户可以轻松地扩展和定制 Ansible,以满足特定的自动化需求。

  4. 剧本化: Ansible 使用 Playbooks 来描述配置和部署任务。Playbooks 是用 YAML 编写的文本文件,可以定义一系列任务和主机组,以及执行这些任务的顺序和条件。这使得用户可以将复杂的配置和部署过程分解为可管理的、可重用的剧本。

  5. 多平台支持: Ansible 可以在多种操作系统和云平台上运行,包括 Linux、Windows、macOS、VMware、AWS、Azure、Google Cloud 等。这使得 Ansible 成为一个通用的自动化工具,可用于管理多样化的 IT 环境。

  6. 可扩展性: Ansible 可以集成到现有的工具链和流程中,并与其他自动化和编排工具(如 Jenkins、Kubernetes)进行集成。此外,Ansible 还具有丰富的插件和扩展机制,可以根据需要进行功能定制和扩展。

一、环境概况

192.168.159.128   ------------> Ansible服务端(管理端)    

192.168.159.129   ------------> 客户端(受控端)

修改主机名(可选项)

修改Ansible服务端的主机名,客户端不修改

 hostnamectl set-hostname ansible.serverhostname ansible.serverreboot后永久生效

二、安装部署

1.安装epel扩展源

yum install -y epel-release	

2.安装Ansible

 yum install -y ansible

3.修改Ansible的hosts文件

cd /etc/ansible/
tree
.
├── ansible.cfg			#ansible的配置文件,默认即可
├── hosts				#ansible的主机清单,用于存储需要管理的远程主机的相关信息,需要编辑
└── roles/				#公共角色目录,默认即可


vim hosts#webservses行取消注释,添加被控端IP
[webservers]
## alpha.example.org
## beta.example.org
192.168.159.129
## 192.168.1.110

4.生成密钥

Ansible 的工作原理是通过 SSH 连接到远程主机,在目标主机上执行预定义的任务或命令,所以需要配置免密 

ssh-keygenssh-copy-id root@192.168.159.129

三、Ansible模块使用介绍

现在开始ansible就已经可以开始使用了 

  • 查看Ansible版本
[root@ansible ansible]# ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Jun 20 2023, 11:36:40) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[root@ansible ansible]#
  • 查看pingtelnet 模块的简要描述和摘要
ansible-doc -s ping
ansible-doc -s telnet

  • 用于查看有关 telnet 模块的文档,类似于man手册
ansible-doc telnet

Command模块

格式

ansible <hosts> -m command -a "<command>"

ansible webservers -m command -a "free -h"
ansible 192.168.159.129 -m command -a "free -h"
ansible all -m command -a "free -h"
ansible webservers -a "uname -a"

<hosts>可以使用以上三种方式指定

  • webservers:hosts配置文件中的【webservers】组执行某些命令
  • 实际IP:指定IP运行某些命令
  • all:代表所有hosts主机,包含hosts配置文件中的【dbservers】组

Shell模块

格式

ansible <hosts> -m shell -a "<command>"

ansible all -m shell -a "for i in {1..5}; do touch \$i.txt;done && ls -la *.txt"

1.上述示例当中的touch命令部分为什么在$符号前面要加上转义符?

ansible webservers -m shell -a "df -hT|grep '/$' | awk '{print $6}'"ansible webservers -m shell -a "df -hT|grep '/$' | awk '{print \$6}'"

2.上述示例当中的awk命令部分为什么在$符号前面要加上转义符?

解释:为了确保 $6 不被解释为命令行变量,而是作为字符串的一部分传递给远程主机执行,需要使用转义符 \ 进行转义。\$6 的目的是将 $6 这个字符串传递给远程主机而不被本地 Shell 解释为变量

所以正确写法是这样的:

ansible all -m shell -a "for i in {129,130}; do ping -c 1 192.168.159.\$i; done"

!!!错误写法示范:

User模块

格式

ansible <hosts> -m user -a "<options>"

<hosts>:           指定要管理用户的目标主机,可以是单个主机或者主机组的名称。
-m user:           通过 -m 参数指定要使用的模块为 user。
-a "<options>":    使用 -a 参数传递模块的选项。选项可以是创建用户、修改用户属性或删除用户等操作。user 模块的常用选项包括:name:            指定用户的名称。password:        指定用户的密码(已加密)。state:           指定用户的状态,present表示创建,absent表示删除。groups:          指定用户所属的组。shell:           指定用户的登录 Shell。system=yes|no:   是否为系统账号。uid:             用户uidmove_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动password:        用户的密码,建议使用加密后的字符串comment:         用户的注释信息remove=yes|no:   当state=absent时,是否删除用户的家目录comment:         指定用户的注释信息。
ansible webservers -m user -a 'name="wang" state=present password=123456 groups=root shell="/sbin/nologin"'
ansible webservers -m command -a 'grep "wang" /etc/shadow'

 Copy模块

格式:

ansible <hosts> -m copy -a "<options>"

<hosts>:               指定要复制文件的目标主机,可以是单个主机或者主机组的名称。
-m copy:               通过 -m 参数指定要使用的模块为 copy。
-a "<options>":        使用 -a 参数传递模块的选项。选项包括源文件路径、目标文件路径、权限等。copy 模块的常用选项包括:src:                指定源文件或目录的路径。可以是绝对路径或相对路径。dest:               指定目标文件或目录的路径。可以是绝对路径或相对路径。mode:               指定目标文件的权限模式,例如 0644。owner:              指定目标文件的所有者。group:              指定目标文件的所属组。backup:             指定是否创建备份文件。force:              指定是否强制复制,即使目标文件已经存在。
ansible webservers -m copy -a 'src="/root/shdir/xin.sh" dest="/root/xin_bak.sh" owner=root group=root mode=777'
ansible webservers -m shell -a "bash /root/xin_bak.sh"

File模块

格式:

ansible <hosts> -m file -a "<options>"

<hosts>:                 指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file:                 通过 -m 参数指定要使用的模块为 file。
-a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。file:                   模块的常用选项包括:path:                 指定要操作的文件或目录的路径。可以是绝对路径或相对路径。mode:                 指定文件的权限模式,例如 0644。owner:                指定文件的所有者。group:                指定文件的所属组。state:                指定文件的状态,可以是 file(文件存在)、directory(目录存在)或 absent(文件不存在)。recurse:              指定是否递归地应用更改到目录及其子目录。follow:               指定是否跟随符号链接进行更改。
ansible webservers -m file -a 'path="/root/xin_bak.sh" owner=root group=root mode=755 state=file'
ansible webservers -m command -a "ls -la /root/xin_bak.sh"

Hostname模块

格式:

ansible <hosts> -m copy -a "<options>"

ansible webservers -m hostname -a "name=test"
ansible webservers -m command -a "hostname"       

Yum模块

格式:

ansible <hosts> -m yum -a "name=<package_name> state=<state>"

<hosts>:                     指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file:                     通过 -m 参数指定要使用的模块为 file。
-a "<options>":              使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。yum:                        模块的常用选项包括:name:                     要安装的包的名字state:                    present(安装)、absent(卸载)或 latest(更新为最新版本)。update_cache:              是否刷新 YUM 缓存。默认情况下为 yes,表示会自动更新缓存。设置为 no 则不刷新缓存。  disable_gpg_check:         是否禁用 GPG 检查。默认为 no,表示会进行 GPG 检查。设置为 yes 则禁用 GPG 检查。enablerepo 和 disablerepo: 控制仓库的启用和禁用。可以指定要启用或禁用的仓库名称。多个仓库以逗 号分隔。installroot:               指定要安装软件包的根目录路径。conf_file:                 指定要使用的 YUM 配置文件路径。vars:                      用于传递额外的变量给 Ansible。
ansible webservers -m yum -a 'name=dnsmasq state=present'
ansible webservers -m shell -a "systemctl restart  dnsmasq && systemctl enable dnsmasq && systemctl status dnsmasq"

Service和System模块

格式:

ansible <hosts> -m service -a "name=<service name> enabled=<yes/no> state=<state>"

<hosts>:                       指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file:                       通过 -m 参数指定要使用的模块为 file。
-a "<options>":                使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。service:                      模块的常用选项包括:name:                      <服务名称>state:                     <服务状态>,started|stopped|restartedenabled:                   <是否自启动>,yes|nopattern:                   <进程匹配模式>.(点):               匹配任意单个字符。*:                     匹配前一个字符的零次或多次重复。+:                     匹配前一个字符的一次或多次重复。?:                     匹配前一个字符的零次或一次重复。^:                     匹配字符串的开始位置。$:                     匹配字符串的结束位置。[]:                    用于定义字符集,匹配其中的任意一个字符。():                    创建捕获组,用于分组匹配。sleep:                     <等待时间>timeout:                   <超时时间>runlevel:                  <运行级别>args:                      <额外参数>system:                       模块命令格式:name:                      <项名称>state:                     <系统状态>value:                     <要设置的值>,started|stopped|restartedenabled:                   <是否自动加载>,yes|noregenerate:                <是否重新生成>system_file:               <系统文件路径>runtime_file:              <运行时文件路径>config_file:               <配置文件路径>

Setup 模块

格式:

ansible <hosts> -m setup -a "name=<service name> enabled=<yes/no> state=<state>"

<hosts>:                       指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file:                       通过 -m 参数指定要使用的模块为 file。
-a "<options>":                使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。setup:                        模块的常用选项包括:gather_subset:              指定要收集的子集信息的列表。默认情况下,会收集所有可用的信息。可以使用 hardware, network, virtual, ohai, facter, ohai_timed, puppet, vagrant 或 all 来指定子集。fact_path:                  用于指定自定义信息(facts)路径的列表。Ansible 会搜索这些路径以查找自定义事实。filter:                     过滤已收集的信息(facts),仅返回匹配指定模式的结果。gather_timeout:             设置收集事实的超时时间,单位为秒。gather_timeout_multiplier:  用于调整超时时间的倍数,默认为 1。gather_timeout_retry:       在超时后重试的次数,默认为 1。cache_valid_time:           设置缓存的有效时间,单位为秒。fact_caching:               启用或禁用缓存功能,可以是 memory、jsonfile、json、yaml 或 text。

filter常用的过滤参数 

ansible_all_ipv4_addresses                  ipv4的所有地址
ansible_all_ipv6_addresses                  ipv6的所有地址
ansible_date_time                           获取到控制节点时间
ansible_default_ipv4                        默认的ipv4地址
ansible_distribution                        系统
ansible_distribution_major_version          系统的大版本
ansible_distribution_version                系统的版本号
ansible_domain                              系统所在的域
ansible_env                                 系统的环境变量
ansible_hostname                            系统的主机名
ansible_fqdn                                系统的全名
ansible_machine                             系统的架构
ansible_memory_mb                           系统的内存信息
ansible_os_family                           系统的家族
ansible_pkg_mgr                             系统的包管理工具
ansible_processor_cores                     系统的cpu的核数(每颗)
ansible_processor_count                     系统cpu的颗数
ansible_processor_vcpus                     系统cpu的总个数=cpu的颗数*CPU的核数
ansible_python                              系统上的python

 

ansible webservers -m setup -a "gather_subset=hardware"

ansible webservers -m setup -a "filter=*device_link*"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu重启后进入initramfs导致无法开机解决方案

今天&#xff0c;我的电脑意外关机&#xff0c;重新开机后打开了虚拟机。该虚拟机使用的是 Ubuntu 22.04 系统。但重启后&#xff0c;系统一直显示(initramfs):&#xff0c;导致无法正常启动。最后&#xff0c;在网上查找了一些解决方案&#xff0c;成功解决了这个开机问题。在…

圣杯布局/双飞翼布局/flex/grid等,实现CSS三栏自适应布局的几种方法

简介 三栏布局是网页设计中常用的布局&#xff0c;即网页中的内容被分为三块&#xff1a;左侧/中间/右侧。其中两侧部分宽度固定&#xff0c;中间部分宽度自适应的根据浏览器宽度撑满剩余空间。而三栏布局也有很多变形&#xff0c;比如两栏或者N栏布局&#xff0c;上中下三栏布…

Linux shell编程学习笔记21:用select in循环语句打造菜单

一、select in循环语句的功能 Linux shell脚本编程提供了select in语句&#xff0c;这是 Shell 独有的一种循环语句&#xff0c;非常适合终端&#xff08;Terminal&#xff09;这样的交互场景&#xff0c;它可以根据用户的设置显示出带编号的菜单&#xff0c;用户通过输入不同…

爱德华的台灯真的好用?爱德华、书客、好视力护眼台灯对比测评

如今孩子近视的比例越来越大&#xff0c;而且时间越来越提前&#xff0c;一些上小学的孩子开始近视佩戴眼镜。其实造成近视的原因不外乎作业坐姿不标准&#xff0c;学业时间太长缺少户外的运动&#xff0c;也包括可能灯光光源的问题造成对于视力的影响。如果希望孩子有一个较好…

3.26每日一题(线性非齐次的特解如何设)

1、非齐次方程有e的2x次幂&#xff1a;特解也有e的2x次幂 2、e的2x次幂前面有特殊的一元方程&#xff1a;特解要设为一般的特征方程&#xff08;axb&#xff09; 3、求线性齐次特征方程的特征根&#xff1b; 4、判断e的 rx 次幂中的 r 和特征根有没有重合的个数&#xff1a;…

【每日一题】数组中两个数的最大异或值

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希集合 其他语言python3 写在最后 Tag 【哈希集合】【位运算-异或和】【数组】【2023-11-04】 题目来源 421. 数组中两个数的最大异或值 题目解读 找出数组中两个数的最大异或结果。 解题思路 一看数据量达到了 …

Ubuntu20.04搭建RISC-V和qemu环境

1. 前言 risc-v是一个非常有潜力的指令集框架&#xff0c;最近对其产生了浓厚的兴趣&#xff0c;由于之前对于这方面的知识储备很少&#xff0c;在加上网上的教程都是点到为止&#xff0c;所以安装过程异常曲折。好在最后一步一步积累摸索&#xff0c;终于利用源码安装完成。看…

【中国知名企业高管团队】系列59:TCL

今天华研荟为大家介绍TCL公司的情况和创始人李东生先生的故事。 一、关于TCL TCL创立于1981年&#xff0c;前身为中国首批13家合资企业之一&#xff1a;TTK家庭电器(惠州)有限公司&#xff0c;该公司为中港合资企业&#xff0c;最初从事卡式录音磁带的生产制造&#xff0c;19…

基于单片机的超声波测距仪

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、本课题研究的主要内容二、超声波测距仪的整体方案2.2 超声波测距仪设计原理 三、超声波测距仪系统硬件电路的设计3.1 超声波测距仪的基本结构 四、 超声波测距仪系统的软件设计4.1 主程序软件设计仿真 五、结…

2019数二(二重积分的不等式问题)

注&#xff1a; 1、在相同积分区域内的积分比较大小&#xff1a;被积函数大的积分值大&#xff0c;被积函数小的积分值小 2、在区间[0&#xff0c;Π/2]上 &#xff1a;sinx < x < tanx

c面向对象编码风格(上)

面向对象和面向过程的基本概念 面向对象和面向过程是两种不同的编程范式&#xff0c;它们在软件开发中用于组织和设计代码的方式。 面向过程编程&#xff08;Procedural Programming&#xff09;是一种以过程&#xff08;函数、方法&#xff09;为核心的编程方式。在面向过程…

C语言查看各数据类型所占大小

编译器&#xff1a;VC2010 #include<stdio.h> int main() {printf("%d\n",sizeof(char));printf("%d\n",sizeof(short));printf("%d\n",sizeof(int));printf("%d\n",sizeof(long));printf("%d\n",sizeof(long long))…

【sql注入】sql关卡1~4

前言&#xff1a; 靶场自取 level-1 测试注入点 POC: 1,1,1,1"",1/1,1/0 》存在注入点 爆破 POC: id-1andextractvalue(1,concat(0x7e,user(),0x7e))-- level-2 尝试注入点 POC1:admin POC2:admin POC3:adminandsleep(3)-- POC4: adminandif(1,1,0)0-- POC…

最新 vie-vite框架下 jtopo安装使用

官方地址 官方源码 安装下载 1.官方好像都没有给git地址&#xff0c;尝试npm安装报错 2.找到1.0.5之前的版本npm i jtopo2&#xff0c;安装成功后使用报错&#xff0c;应该是版本冲突了 1.本地引入&#xff0c; 点击官方源码下载&#xff0c;需要jtopo_npm文件 2.引入到本…

Jetpack:030-Jetpack中的状态

文章目录 1. 概念介绍2. 使用方法2.1 可监听对象2.2 获取状态值2.3 修改状态值2.4 重组函数 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中网格布局相关的内容&#xff0c;本章回中主要 介绍状态。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff0…

【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群

搭建 Nacos 集群 架构 centos安装docker https://docs.docker.com/engine/install/centos/ 详细配置过程 MySql8 mysql数据库配置 数据库脚本 nacos/conf/nacos-mysql.sql Nacos2 application.properties 修改为mysql spring.datasource.platformmysqldb.num1 db.url…

【工具】Github统计代码行数工具推荐(VScode插件、兼容任何平台、不用下载安装包)

需求&#xff1a; 1&#xff09;被要求统计代码行数&#xff1b; 2&#xff09;不想打开Linux&#xff0c;懒得下载Windows版本GitStats&#xff1b; 3&#xff09;打开了Linux但也不记得find命令行怎么用&#xff1b; 4&#xff09;打开了Linux&#xff0c;装好了Gitstats但自…

wagtail的使用

文章目录 安装虚拟环境新建项目时指定虚拟环境打开已有项目添加虚拟环境 安装wagtail查看安装后的包 创建wagtail项目安装依赖迁移创建超级用户运行项目 管理工作台内容扩展首页的数据模型更新数据库修改模板页创建一个页面的过程 models中的基本字段templates字符型文本字段富…

汽车标定技术(四)--问题分析:多周期测量时上位机显示异常

目录 1.问题现象 2.数据流分析 ​​​​3.代码分析 3.1 AllocDAQ 3.2 AllocOdt 3.3 AllocOdtEntry 4.根因分析及解决方法 4.1 根因分析 4.2 解决方案 1.问题现象 在手撸XCP代码时&#xff0c; DAQ的实现是一大头痛的事情。最初单周期实现还好一点&#xff0c;特别是…

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

系列文章目录 文章目录 系列文章目录前言一、设置 Gazebo 仿真环境二、在 Gazebo 中模拟和控制机器人2.1 概述2.2 任务调度器2.3 感知和目标生成系统2.4 运动规划2.5 机械臂和关节控制系统 三、分配用于控制机器人的参数3.1 定义机器人模型和运动规划参数&#xff0c;3.2 定义机…