针对podman REST API 的shell调用-2

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

昨天我们对 拉取镜像创建容器启动容器列出容器停止容器删除容器删除镜像 ,今天我们来封装到shell小工具中,关于掘金文章所提及的shell部分,我也放在了gitee上面: gitee.com/pdudo/podma…



接上一篇


问题描述


上一章,我们模拟创建容器,使用sockettcp得到的结果不一样,晚上的时候,我仔细对比了一下,找到问题了,是我参数写错了。


我昨天请求的url

curl -X POST -H 'Content-Type: application/json' -d @postFiles.json http://127.0.0.1:8881/v3.0.0/libpod/containers/create

实际上我们应该请求的url

curl -X POST -H 'Content-Type: application/json' -d @postFiles.json http://127.0.0.1:8881/v3.0.0/containers/create

这。。。我是比较诧异的,为啥v3.0.0/libpod/containers/create不报错。。。


我甚至怀疑到了是我podman 版本问题,昨天差点就搞虚拟机装centos 8,准备尝试下podman 4.0了。哎,总之,找到了问题就好,这个问题耽搁了好久,好,既然找到了问题,那么我们看看,到底是为啥子呢?



追根溯源


这个,恐怕得找源码了,我们找找看

由于有路由信息,所以很好找,一下子就找到了


podman git地址: github.com/containers/…

我把调用的东西给单独摘出来

libpod/container/create


image.png


container/create

image.png



额,看了一下,感情,前面版本号加不加都可以呀,2个路由都指向一个函数,一个是前面有版本号的,我们写的v3.0.0尝试了一下,果然如此。。。

image.png


VersionedPath函数

image.png


问题确认


我们将上述路由信息抽象出来大概是这样的

r.HandleFunc(VersionedPath("/libpod/containers/create"),s.APIHandler(libpod.CreateContainer)).Methods(http.*MethodPost*)

r.HandleFunc(VersionedPath("/containers/create"),s.APIHandler(compat.CreateContainer)).Methods(http.*MethodPost*)


发现,是调用的函数不一样


我们使用/libpod/containers/create调用的是libpod.CreateContainer

我们使用/containers/create调用的是 compat.CreateContainer

我们目前猜测,/libpod/containers/create读取不到配置,应该是我们json写错了


那问题点就是这2个参数引起的,我们再看

我们查看路由读取json文件的详细结构体

我们根据上述找到的路由信息,点点路径找找看

/containers/create

image.png

image.png


image.png


image.png


/libpod/containers/create

image.png

image.png

image.png

image.png




验证猜想


可以看到,libpod/containers/create使用的是portmappings来规划对应端口的

我们修改一下json文件格式

修改后如下

image.png


再次尝试利用podman api新建容器


image.png



问题结论


额。。。 发现可以了,总结一下2个接口,理清了过后,再反过来看,大概是这样的

podman为了兼容docker

所以路由信息为VersionedPath("/containers/create")或者/containers/create,当然你可以去看docker api然后使用如上2个接口中的其中一个进行调用


然后podman自己也搞了一个独立的api接口,那便是 VersionedPath("/libpod/containers/create"),它所使用的的json数据文件是不兼容docker的,然后现在比较纠结的是,podman api使用的人还是太少了,找东西好难呀,所以我们写shell小工具的时候,还是以兼容docker为准。



shell小工具完善

由于创建容器过于复杂,本次shell小工具不会包含启动容器相关,后面会单独列一期来讲述容器创建相关


镜像拉取

我们先确保镜像为空

image.png


拉取镜像路由为: /v3.0.0/libpod/images/pull?reference=镜像名称,所以我们根据该命令写出镜像拉取脚本

完善env配置文件

我们新增 declare -r PULLIMAGES="images/pull?reference="

image.png


我们修改main函数,新增拉取镜像操作

新增帮助项 5.拉取镜像


image.png


新增case函数信息

5) pullImages

image.png


好了,框架新增完毕,我们开始来写pullImages函数

image.png



尝试使用脚本安装镜像

image.png



删除镜像


我们删除容器使用的协议为 DELETE ,urllibpod/images/镜像名称


我们来尝试一下

我们还是和上面一样,把删除镜像的架子搭建好

配置脚本中增加 declare -r DELIMAGES="images"

main.sh脚本中新增 删除参数为6 且调用函数 delImages


删除镜像函数

image.png


测试删除镜像函数

image.png





总结


今天对于学习podman而言干了2件事情


  • 确认了Podman api2种调用方式

其一为 兼容docker调用的 ,其二为 podman专门调用的,通过看源码,我们可以发现其实podman api对我们请求的版本要求没有限制,只要以v开头即可


  • shell小工具继续完善

其二为 shell小工具加入了镜像拉取 和 镜像删除 的方法,通过上面的脚本,我们可印证之前的结论,那就是shell核心语句其实就那么一两句,但是为了脚本的健壮性,我们需要写大量的语句来“辅助”它执行


相关文章
|
1天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
1天前
|
缓存 前端开发 API
构建可扩展的API:REST vs GraphQL
【5月更文挑战第14天】在API设计中,REST和GraphQL是两种主要的架构风格。REST基于HTTP协议,强调资源的无状态性和客户端-服务器模型,适合简单CRUD操作。而GraphQL提供更灵活的数据查询,允许客户端精确指定需求,减少HTTP请求和数据冗余,适合复杂场景和高性能需求。选择时要考虑项目需求、技术栈、性能和团队经验。
|
1天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之在DataWorks同步数据时,遇到乱码问题,该怎么解决(rest api数据源)
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 0
|
1天前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
1天前
|
JSON JavaScript API
访问REST API:在Vue中消费和管理远程数据
【4月更文挑战第23天】本文探讨了在Vue应用中高效访问REST API的方法,包括选择合适的API、使用Axios或Fetch发送请求、封装API服务、处理响应和数据、错误管理及性能优化。关键点在于创建服务层封装请求,使用计算属性和方法处理数据,以及实施错误处理和性能提升策略。通过这些最佳实践,开发者能更好地管理和消费远程数据,构建出动态、响应式的Vue应用。
|
缓存 JSON 前端开发
GraphQL与REST:两种API架构
在过去十年中,REST已经成为Web API的设计标准,提供了一些很棒的想法,例如无状态服务器和对资源的结构化访问,可以去这里详细了解REST API。但是,REST API已经显示出太不灵活,无法满足访问客户端快速变化的需求。
435 0
GraphQL与REST:两种API架构
|
缓存 前端开发 Java
|
1天前
|
安全 API 开发者
智能体-Agent能力升级!新增Assistant API & Tools API服务接口
ModelScope-Agent是一个交互式创作空间,它支持LLM(Language Model)的扩展能力,例如工具调用(function calling)和知识检索(knowledge retrieval)。它已经对相关接口进行了开源,以提供更原子化的应用LLM能力。用户可以通过Modelscope-Agent上的不同代理(agent),结合自定义的LLM配置和消息,调用这些能力。
|
1天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
1天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
24 1