针对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






相关文章
|
3天前
|
安全 Java API
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)
22 0
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
|
26天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
19 3
|
3月前
|
JSON 缓存 API
title: 深入理解REST API设计的最佳实践
title: 深入理解REST API设计的最佳实践
36 0
|
4月前
|
分布式计算 Hadoop Java
[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS
[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS
54 1
|
4月前
|
分布式计算 Hadoop API
✨[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
✨[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
61 1
|
6月前
|
XML 安全 API
Rest API 开发分享
Rest API 开发分享
x3d
|
JSON API PHP
禅道 Rest API 开发
在老的 PHP 系统中使用 PHP 5.3以后的库 所谓老的系统,是指没有使用PHP 5.3以上命名空间(namespace)特性编码的系统。 但是,只要你的系统运行在 PHP 5.3及以上的环境,在你的老系统中,是可以使用这些基于新特性如命名空间编码的库或代码的。
x3d
1780 0
|
14天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
21天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
1月前
|
安全 算法 API
产品经理必备知识——API接口
前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过一部手机就可以实现衣食住行的方方面面,比如:在家购物、远程控制家电、自动驾驶等等,背后都离不开我们今天要聊的API接口。