linux自动化运维之ansible实战

news2024/11/27 10:22:09

ansible基础介绍

优点

- 相比于saltatack和puppet,没有客户端,更轻量级

- 只是一个工具,可以很容易实现分布式拓展

- 更强的远程执行命令

特点

- 模块化

- 支持自定义模块,可以用任何语言编写模块

- 基于python语言实现

- 部署简单,基于python和ssh,agentless,无需代理

- 安全

安装

yum安装

首先安装epel源:yum install epel-release -y

下载ansible:yum install ansible

ansible目录结构

[root@bogon ansible]# tree . ├── ansible.cfg ├── hosts └── roles └── role_httpd.yml

ansible.cfg:主配置文件,一般无需更改

hosts:主机清单,添加主机

roles:存放角色的目录

img编辑

上面共有三个分组,使用时写上组名,一般格式为:ansible [组名] -m [模块名] -a [命令]

ansible执行过程

1 加载自己的配置文件,默认/etc/ansible/ansible.cfg

2 加载自己的模块,如commond

3 通过ansible将对应的模块或者命令生成.py文件,并将文件传输到远程服务器

4 给文件增加x权限

5 执行并返回结果

6 删除文件,退出

./elasticsearch

执行结果

黄色:执行成功并且有修改

绿色:执行成功,没有改变

红色:执行失败

ansible模块介绍

commond
默认模块,不支持特殊符号,不支持变量
ansible test -m ping 
[root@bogon ~]# ansible test -m ping
192.168.199.155 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.199.150 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
代表执行成功,没有任何改变
ansible test -a "systemctl status nginx"
#查看test组中主机的nginx运行情况
shell
用shell执行命令,支持特殊符号,重定向符号,变量等操作
[root@bogon ~]# ansible test -m shell  -a "echo 'helloddd' >> /data/a.txt"
192.168.199.155 | CHANGED | rc=0 >>
​
192.168.199.150 | CHANGED | rc=0 >>
​
这里使用commond模块显示黄色且没有报错,但是a.txt文件没有发生改变
[root@bogon ~]# ansible test   -a "echo 'hellodaad' >> /data/a.txt"
192.168.199.155 | CHANGED | rc=0 >>
hellodaad >> /data/a.txt
192.168.199.150 | CHANGED | rc=0 >>
hellodaad >> /data/a.txt
[root@bogon ~]# ansible test -m shell  -a "echo 'helloddd' >> /data/a.txt"
192.168.199.155 | CHANGED | rc=0 >>
​
192.168.199.150 | CHANGED | rc=0 >>
​
​
使用shell模块后修改成功
[root@bogon data]# cat a.txt
hello
helloddd
​
script
在远端主机执行本地脚本
在远端执行本地nginx.sh脚本,判断远端主机的nginx服务是否启动

creates表示如果远端主机上有指定的问价,则不执行后面的脚本,如果没有,则执行指定的脚本,如图远端主机都有a.txt文件,所以不执行nginx.sh脚本

copy
从本地主机复制文件到远端主机
src 本地文件路径
dest    目标主机路径
mode    设置权限
backup  备份源文件
#把本地的/opt/test.txt文件复制到远端/opt/test.txt中
[root@bogon opt]# ansible test -m copy -a "src=/opt/test.txt dest=/opt/test.txt"
​
#把本地问价中的指定内容复制到远端主机的文件中,内容带上''(单引号)
ansible test -m copy -a "content='6 删除文件' dest=/opt/test.txt"
fetch
与copy相反,从远端主机复制文件到本地主机
从远端主机中的复制文件到本地,生成以远端IP为名称的文件夹
[root@bogon opt]# ansible test -m fetch -a "src=/data/a.txt  dest=/opt/"
#结果为
[root@bogon opt]# cat 192.168.199.150/data/a.txt
hello
helloddd
file
设置文件属性
path 要设置的文件路径
recurse 递归
state状态:absent(删除) touch(创建) directory(指定创建的是目录)
#在远端主机/opt/创建c.txt文件
[root@bogon opt]# ansible test -m file -a "path=/opt/c.txt state=touch"
#在远端主机/opt/创建/data/目录
[root@bogon opt]# ansible test -m file -a "path=/opt/data/ state=directory"
#在远端主机上床架软链接
[root@bogon opt]# ansible test -m file -a "src=/data/a.txt dest=/data/link-a.txt state=link"
​
unarchive
copy=no将远程主机上的压缩包压缩到指定目录下
copy=yes将本地主机上的压缩包传到远端主机上并解压
src 源路径
dest 目标路径
mode 权限
#copy=no,在远端主机上解压压缩包到指定目录下
[root@bogon opt]# ansible test -m unarchive -a "src=/data/test.tar.gz dest=/opt/ copy=no"
#copy=yes 把本地的压缩文件床送到远端主机并解压
[root@bogon opt]# ansible test -m unarchive -a "src=/opt/test.tar.gz dest=/opt/rh/ "
​
archive
将远程主机下的文件路径打包
format 打包格式
owner 指定所属者
path: 指定路径
dest: 指定目标文件
#把远程目录下的文件或者目录打包到指定目录下
[root@bogon opt]# ansible test -m archive -a "path=/opt/data/ dest=/opt/a.tar.bz2"
Cron
主要修改,添加,删除主机的crontab定时任务
在远端主机上新建定时任务
[root@bogon ~]# ansible test -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 192.168.199.149 &>/dev/null' name="hahha" "
删除任务
ansible websrvs -m cron -a 'state=absent name=hahha'
yum
在远端执行yum操作
present 下载
absent  删除
在远端主机上安装httpd服务
ansible websrvs -m yum -a 'name=httpd state=present' 安装

service
功能:实现远程管理服务的生命周期
enabled #开机启动 yes|no
name #服务名称,必选项
runlevel #运行级别
state
started
stopped
restarted
reloaded
重启nginx服务
[root@bogon ~]# ansible test -m service  -a "name=nginx state=reloaded"
停止nginx服务
ansible test -m service -a "name=nginx state=stopped"
stystemd
与service类似
User
User:管理用户
# 关键参数
group # 属组
groups # 附加组
home # 设置家目录
name # 用户名
remove # 删除用户并删除用户的家目录
shell # 用户登录后的shell
system # 系统用户
uid # 用户的id
state #创建或删除
shell #制定用户shell环境
创建用户(自动创建用户组)
ansible test -m user -a "name=test1"
setup
用于收集远端主机的信息,如cpu,内存,磁盘
获取远端主机名
[root@bogon ~]# ansible test -m setup -a "filter=ansible_fqdn"
过滤信息
[root@bogon ~]# ansible test -m setup -a "filter=*mb"

firewalld
远程管理目标主机的防火墙
开启端口443并且设置为开机启动
[root@bogon ~]# ansible test -m firewalld -a 'port=443/tcp permanent=no state=enabled'

ansible-playbook

将多个任务写在一个.yml结尾的文件中,使用ansible-playbiik执行

例一:在远端开mysql服务
[root@bogon ~]# cat test1.yml
---
- hosts: test
  remote_user: root

  tasks:
    - name: start  mysql service
      service: name=mysqld state=started

hosts
playbook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,须事先定义在主机清单中。相当于test组
remote_user
可用于Host和task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户

在远端主机上执行任务时时切换到指定用户(用户必须存在且对文件具有一定权限)
[root@bogon ~]# cat test1.yml
---
- hosts: test
  become: yes
  become_user: test2

  tasks:
    - name:  add fiile
      command: echo "h" >> /opt/a.txt
task列表和action组件
task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量
[root@bogon ~]# cat test3.yml
---
- hosts: test
  remote_user: root

  tasks:
    - name: install httpd
      yum: name=httpd state=present
案例
利用ansible-playboo在远端上安装nginx
[root@bogon ~]# cat test2.yml
---
- hosts: test
  remote_user: root
  tasks:
    - name: add group nginx
      user: name=nginx state=present
    - name: add user nginx
      user: name=nginx state=present group=nginx
    - name: Install Nginx
      yum: name=nginx state=present
    - name: web page
      copy: src=files/index.html dest=/usr/share/nginx/html/index.html
    - name: Start Nginx
      service: name=nginx state=started
变量的使用
定义:
	variable=value

通过{{ variable_name }} 调用变量,且变量名前后必须有空格,有时用"{{variable_name }}”才生效
    ansible-playbook –e 选项指定
    ansible-playbook test.yml -e "hosts=www user=xingyun"

系统变量
    主机名相关变量:

        ansible_hostname: 目标主机的短主机名。
        ansible_fqdn: 目标主机的完全限定域名(Fully Qualified Domain Name, FQDN)。
        ansible_nodename: 与 ansible_hostname 类似,提供主机名。
    操作系统和平台信息:

        ansible_os_family: 提供操作系统的家族名称,如Debian、RedHat、Windows等。
        ansible_distribution: 操作系统的具体发行版名称,如Ubuntu、CentOS等。
        ansible_distribution_version: 操作系统发行版的具体版本号。
        ansible_architecture: 主机的架构,如"x86_64"或"arm64"。
    网络信息:

        ansible_default_ipv4.address: 默认第一块网卡的IPv4地址。
        ansible_all_ipv4_addresses: 包含主机所有IPv4地址的列表。
        ansible_all_ipv6_addresses: 包含主机所有IPv6地址的列表。
    用户和组信息:

        ansible_users: 列出目标主机的所有用户账户信息。
        ansible_env.HOME: 当前用户的家目录。
    文件和目录信息:

        ansible_selinux_python_present: 指示目标主机上是否安装了用于SELinux操作的python库。
        服务状态信息:

	使用ansible_service_mgr可以得知目标主机使用的服务管理器类型,如'systemd'、'sysvinit'等。

#使用系统变量新建一个以本地用户名命名的文文件
[root@bogon ~]# cat test1.yml
---
- hosts: test
  remote_user: root
  tasks:
    - name:  add a new file named by user
      file: path=/opt/{{ ansible_nodename }}.txt state=touch


自定义变量
	在主机清单中定义变量
	port是局部变量,port=82是组中的全局变量
	[test]
    192.168.199.150 port=81
    192.168.199.155
    [test:vars]
    port=82
    
    命令行指定变量(优先级最高)
    [root@bogon ~]# ansible-playbook port=83 test1.yml
	
	在yml文件中定义变量
	[root@bogon ~]# cat test3.yml
    ---
    - hosts: test
      remote_user: root
      vars:
        - name1: httpd
        - name2: nginx

      tasks:
        - name: install httpd
          yum: name={{ name1 }} state=present
        - name: install nginx
          yum: name={{ name2 }} state=present
变量的优先级:命令行中的-e > playbook中定义的变量 > 主机清单中定义的变量
模板templates
模板是一个文本文件,可以做为生成文件的模版,并且模板文件中还可嵌套jinja语法
template功能:可以根据和参考模块文件,动态生成相类似的配置文件
template文件必须存放于templates目录下,且命名为 .j2 结尾
yaml/yml 文件需和templates目录平级,目录结构如下示例:
./
├── temnginx.yml
└── templates
└── nginx.conf.j2

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

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

相关文章

深度学习实战73-基于多模态CLIP模型的实战项目,CLIP模型的架构介绍与代码实现

大家好,我是微学AI,今天给大家介绍一下深度学习实战73-基于多模态CLIP模型的实战项目,CLIP模型的架构介绍与代码实现。多模态CLIP(Contrastive Language-Image Pre-training)模型是一种深度学习模型,其核心设计理念是通过大规模的对比学习训练,实现图像与文本之间的跨模…

前端调试工具之Chrome Elements、Network、Sources、TimeLine调试

常用的调试工具有Chrome浏览器的调试工具,火狐浏览器的Firebug插件调试工具,IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速,功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrome 浏览器&#xff0c…

便携式气象站是什么

TH-BQX5便携式气象站是一种用于应对突发天气灾害和紧急情况的便携式气象监测设备。它通常包括气温、湿度、气压、风速、风向和降水量等关键气象要素的测量功能,能够快速准确地记录这些气象参数。此外,一些高级的便携式气象站还具备预警功能,当…

阿里云学习笔记

1、什么是IaaS,PaaS和SaaS? IaaS、PaaS 和 SaaS 是云计算服务的三种主要模式,它们分别代表了不同的服务层级,按照由低到高的抽象程度排序如下: IaaS (Infrastructure as a Service) 基础设施即服务 提供的是底层的计…

Three.js——创建场景、渲染三维对象、添加灯光、添加阴影、添加雾化

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

早起的“鸟儿”有虫吃:如何在 App 运行的极早期执行代码?

功能需求 在某些开发场景中,我们希望能够在 App 运行时尽早执行一段代码,不求最早但求更早! 如上图所示,我们将会讨论在 App 生命早期运行代码的 5 种方法,小伙伴们可能会大吃一惊:applicationDidFinishLaunching 之类的方法竟然是最晚得到执行的! 在本篇博文中,您将…

mysql高阶之(视图)

目录 视图概念 视图概念 视图是基于一个或多个表的SQL查询结果的虚拟表。视图并不实际存储数据,而是保存了查询的定义。当你查询视图时,数据库引擎会按照视图的定义执行底层的SQL查询。 (一)视图作用 视图的主要作用时一张表或多…

Mysql故障和优化

一、MySQL故障 二、MySQL优化 1.硬件优化: 2.数据库设计与规划 1.提前估计数据量,使用什么存储引擎 2.数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性 3.增加多台服务器,以达到稳定、高效的效果。主从同步、…

Python中的相关规则:注释,参数,模块和包

Python中的相关规则:注释,参数,模块和包 注释参数模块包(package)数据类型其他一些编写代码小技巧 注释 crtl/注释,多行注释(三对单引号或双引号):多行注释一般放在文件开头,标明整个…

Linux之实现Apache服务器监控、数据库定时备份及通过使用Shell脚本发送邮件

目录 一、Apache服务器监控 为什么要用到服务监控? 实现Apache服务器监控 二、数据库备份 为什么要用到数据库备份? 实现数据库备份 三、Shell脚本发送邮件 为什么要用使用Shell脚本发送邮件? 实现Shell脚本发送邮件 一、Apache服务器…

算法——所有可能的真二叉树:递归

. - 力扣(LeetCode) 思路:递归。因为要是真二叉树,节点树必为奇数个。 对于左子树和右子树分别递归构造,左子树从1开始一直到n-2,右子树从n-2开始一直到1; 然后使用数组接受左右子树构造出来的…

Annaconda的替代品miniforge!

用了多年的Annaconda竟然要收费了(个人不收费,企业收费,但个人电脑在企业IP下,还是被警告了),只能用miniforge 全面替换了! 一、卸载anaconda windows下卸载, 设置 -> 应用和功…

STM32之HAL开发——SPI写Flash源码

SPI通信收发原理框图(F1系列) SPI 初始化结构体详解 typedef struct { uint32_t Mode; /* 设置 SPI 的主/从机端模式 */ uint32_t Direction; /* 设置 SPI 的单双向模式 */ uint32_t DataSize; /* 设置 SPI 的数据帧长度,可选 8/16 位 */ u…

vscode连接服务器步骤

一 、下载vscode 下载vscode 在官网(https://code.visualstudio.com/)下载VsCode安装vscode 放到自己想安装的盘,最好不要C盘安装中文插件 安装完成后后下角会有提示说重启,点击重启就行。 4. 设置自动保存 点击右上角的文件—…

红杉资本:2024年关于AI的4大预测

四大预测 预测一:Copilot 将逐渐向 AI Agent 转变。 2024 年,AI 将从辅助人类的 Copilot 转变为真正能替代一些人类工作的Agent。AI 将更像是一个同事,而不仅仅是一个工具,这点在软件工程、客服等行业已经初步显现。 预测二&…

快速入门Linux,Linux岗位有哪些?(一)

文章目录 Linux与Linux运维操作系统?操作系统图解 认识LinuxLinux受欢迎的原因什么是Linux运维Linux运维岗位Linux运维岗位职责Linux运维架构师岗位职责Linux运维职业发展路线计算机硬件分类运维人员的三大核心职责 运维人员工作(服务器)什么…

【自我提升】一、Hyperledger Fabric 概念梳理

写在前面:最近因为业务需要,开始学习Hyperledger Fabric了,做java全栈工程师可真难搞。现在算是啥类型的都在涉及了,现在这个技术啥都不懂,就先开个学习专栏,记录记录。顺带也给各位道友参考参考。 目录 …

crypto-聪明的小

如图 暗示为栅栏密码 差行输入得到flag

【Android Studio3.5.2安装以及错误错误解决】

前言 下面是博主在安装Android studio时遇到的一些问题,并且花费很长时间寻找解决方法,经过了血和泪的教训下面将自己在安装过程中遇到的查看的资料贴出来(感谢各位大佬的文章帮助本闲狗解答疑惑,此处贴出原文链接,如…

用python,将有道词典中的生词导入扇贝单词

我试过有道词典和扇贝单词,个人感觉扇贝单词记忆功能非常好用,但是扇贝单词没有pc版,而有道在这方面就做的很好。博主平时都是用有道查生词,那有没有办法将有道词典中的生词导入扇贝中呢?下面的过程看上去很复杂&#…