针对podman REST API 的shell调用-1

简介: 针对podman REST API 的shell调用-1

兜兜转转,我们又回来继续看podman api,前2天我们大概复习了一下shell,我们决定使用shell来封装一下podman api接口,我们这次封装三个接口 info_ping/_images/json




为什么需要podman api


因为podman把轮子给造好了,方便运维/开发人员调用接口,总之把接口提供出来,避免我们造轮子,对此我们可以直接使用api调用podman即可。


我们为什么需要api呢? 假设我们在做一个自动化部署,期间要启动一个容器,如果没有api,我们应该如何做呢? 我们会直接去调用podman命令对吧,然后再根据输出,来判断成功与否,这样很笨重,且迁移起来麻烦(比如机器执行命令路径不一致),所以需要api,那我们来看下具体用法



开启podman api服务


podman可以套接字监听unixtcp

使用命令: podman system service开启podman api


参数

  • --time: 会话超时时间,单位为秒,默认为5秒
  • --log-level: 设置Log等级,这个是podman的语法,而非api
  • --cors: 设置CORS Headers(主要是跨域使用)





开启unix套接字


命令: podman --log-level=debug system service -t0 unix:///tmp/podman.sock

该命令含义为,开启debug在中断显示,且unix套接字文件在 /tmp/podman.sock

image.png



开启TCP套接字

命令: podman --log-level=debug system service -t0 tcp:127.0.0.1:8888

和上述类似,注意,我们将unix给更换为了tcp

image.png


如上,我们启动了podman apiunix套接字 和 tcp套接字


请求方法

假设我们使用curl请求获取版本信息


TCP方式请求版本信息

格式: /版本/libpod/info 其中版本信息只要是v开头

命令: curl -s http://127.0.0.1:8881/v3.0.0/libpod/info | jq '.version'

jq是linux格式化json工具


image.png



unix套接字方式请求版本信息

格式: d/版本/libpod/info 其中版本信息只要是v开头 ,只不过需要指定unix套接字文件

命令: curl -s --unix-socket /tmp/podman.sock http://d/v3.0.0/libpod/info | jq '.version'

image.png



podman 常规请求


请求方法


  • /info: 获取podman api信息
  • /_ping: 检测podman api状态
  • /_images/json: 获取podman images信息



检测podman状态

使用路由_ping可以检测podman状态,

例如

image.png

返回OK则代表podman正常的



获取podman api信息

使用理由/info可以获取podman api信息

例如

image.png


使用jq格式化为json

例如使用命令: curl -s http://127.0.0.1:8881/v3.0.0/info | jq

image.png


获取images信息

使用理由images/json可以获取podman images信息

例如

使用命令: curl -s http://127.0.0.1:8881/v3.0.0/images/json | jq


image.png



使用shell封装podman api


脚本运行之后效果

我们通过bash shell的方式,封装了podman api之后运行的效果


image.png

image.png

我们再来查看下podman images看看是否和上面对得上

image.png



脚本列表

我们将脚本按照模块给分开了,以方便解释脚本含义

image.png


  • main.sh脚本有有个函数为 main 是该程序的入口
  • podmanEvn.sh该脚本的一些配置变量
  • checkHealth.sh检查podman api是否存活
  • showVersion.sh显示出podman版本信息
  • images.sh 镜像操作,目前仅编写了列出镜像



配置变量


我们来看podmanEvn.sh的内容

全部定义为只读变量,报错了podman的版本信息(这个不重要),是使用tcp还是socket去连接podman api,以及podman api提供的路由信息

image.png


检查podman api是否存活

该函数如下,若请求结果为空,或者字符串不为"OK" ,则返回2(异常),否则返回0(正常)

image.png


显示podman版本信息

这个直接使用curl请求即可

image.png


显示image信息

查询images信息,我们先计算podman api返回了多少条记录,然后再循环取各个部分的信息,包括名称,id,创建时间,和大小

image.png



主函数


因为要使用别的文件的函数,所以需要引入,我们一般执行shell的方式有这么几种:


  • sh xxx.sh
  • ./ xxx.sh
  • . xxx.sh
  • source xxx.sh

其实,如上执行方案,可以归纳为2种,1. sh xxx.sh 2. source xxx.sh

那么有什么区别呢? 我们为什么要使用source,而非sh

因为,sh去执行的时候,是开启了一个子shell,当子子shell执行完毕后,数据不会引入到父shell中,而source就是在父shell中执行的,这就是为什么我们修改了环境变量,例如: ~/.bashrc的时候,会使用 .或者source去重新执行了


image.png



感悟


虽然shell编写脚本本身不难,其核心也就那么几行代码,但是我们为了脚本的健壮性,不那么容易崩,我们需要写大量的辅助语句,来判断这个语句是否执行成功等等。失败了之后如何操作等。我们后面再来补充其他api






相关文章
|
1月前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
3月前
|
JSON 中间件 API
开发REST API3-11
开发REST API3-11
|
3月前
|
JSON JavaScript API
编写REST API
编写REST API
66 2
|
2月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
61 0
|
4月前
|
XML 安全 API
REST 和 SOAP API 有什么区别?
【8月更文挑战第31天】
249 0
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
110 1
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
62 2
6种方法打造出色的Shell脚本
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
58 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
49 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
54 6