当前位置: 首页 > news >正文

云计算-OpenStack 运维开发实战:从 Restful API 到 Python SDK 全场景实现镜像上传、用户创建、云主机部署全流程

一、python-Restful Api 简介

Restful API 是一种软件架构风格,基于 HTTP 协议设计,通过统一的接口(如 URL 路径)和标准的 HTTP 方法(GET/POST/PUT/DELETE 等)实现资源(如数据、文件等)的操作,具有无状态、可缓存、客户端 - 服务器分离等特点。方法如下

  • 用 GET 请求获取资源(如查询数据)
  • 用 POST 请求创建资源(如新增数据)
  • 用 PUT 请求更新资源
  • 用 DELETE 请求删除资源

常用的库是 requests,它简化了 HTTP 请求的发送和响应处理。下面进行python调用openstack创建相应实例。

1.Python 运维开发:基于 OpenStack Restful API 实现镜像上传

使用 OpenStack all-in-one 镜像,创建 OpenStack Python 运维开发环境。云主机的用户/ 密码为:“root/Abc@1234”,OpenStack 的域名/账号/密码为:“demo/admin/000000”。 提示说明:python 脚本文件头建议加入“#encoding:utf-8”避免编码错误;测试脚本代 码用 python3 命令执行与测试。 在 controller 节点的/root 目录下创建 api_image_manager.py 脚本,编写 python 代码对接 OpenStack API,完成镜像的创建与上传。创建之前查询是否存在“同名镜像”,如果存在 先删除该镜像。

(1)创建镜像:要求在 OpenStack 私有云平台中上传镜像 cirros-0.3.4-x86_64-disk.img, 名字为 cirros001,disk_format 为 qcow2,container_format 为 bare。

(2)查询镜像:查询 cirros001 的详细信息,并以 json 格式文本输出到控制台。

1.执行 api_image_manager.py 脚本,成功创建镜像

    
 做之前镜像记得上传
 openstack image create --disk-format qcow2 --container-format bare --file /root/cirros-0.3.1-x86_64-
 --------------------------------------------
 #!/usr/bin/python3.6
 # cofing=utf-8
 import  json,requests
 url = "http://controller:9292/v2/images"
 token='gAAAAABkIlT50YY3ZGgskCUKJ6nMEgmsvgqgFwxUjGFLXEtC8bCaY2C1R1KtqQnrHMhCuNpKwNlxKIHb85ZpV9CIlPV5JYBzUaI13yMOImyDOhgOXVSgeEVslPOo_1cWMHp27Q4hVG53KVMczlbFluFIC9y9oJ4WRyb-KXGG46fXYyr'
 headers= {"Content-Type":"application/json",'X-Auth-Token':token}
 headers_img= {"Content-Type":"application/octet-stream",'X-Auth-Token':token}
 images = requests.get(url,headers=headers).json()
 for i in images['images']:
     if i['name']=='cirros001':
         delete = requests.delete(f"{url}/{i['id']}",headers=headers)
         print(delete)
 create = requests.post(url,data=json.dumps({"container_format": "bare", "disk_format": "qcow2", "name": "cirros001"}),headers=headers).json()
 put = requests.put(f"http://controller:9292{create['file']}",data=open("/root/cirros-0.3.4-x86_64-disk.img","rb"),headers=headers_img)
 print(put)
 print(create) [root@controller python]# chmod +x api_image_manager.py 
 [root@controller python]# ./api_image_manager.py 

2.python-usere使用Restful API创建用户

在提供的OpenStack私有云平台上,使用T版本的“openstack-python-dev”镜像创建1台云主机,云主机类型使用4vCPU/12G内存/100G硬盘。该主机中已经默认安装了所需的开发环境,登录默认账号密码为“root/Abc@1234”。使用python request库和OpenStack Restful APIs,在/root目录下,创建api_manager_identity.py文件,编写python代码,代码实现以下任务:

(1)首先实现查询用户,如果用户名称“user_demo”已经存在,先删除。

(2)如果不存在“user_demo”,创建该用户,密码设置为“1DY@2022”。

(3)创建完成后,查询该用户信息,查询的body部分内容控制台输出,同时json格式的输出到文件当前目录下的user_demo.js文件中,json格式要求indent=4。

 vi create_user.py
 ---------api_manager_identity.py--------------------------
 #!/usr/bin/python3.6
 # cofing=utf-8
 import  time,requests,json
 token = 'gAAAAABj-J00eE_MPHoIk_x179k3RsdJuvLaAITL8szIIdWq8o7g7bUuYly4HTEQtHZcp0_-tx-ehYIrsHJmoyESScPoBChGOYXrJAWD_pF0VGBslJuoxyuJwCMSY-iHkdtgxpdIrTP3EK2bJjDs2CjGosXARZQZsLh-47cAN1hXjOS0'
 headers = {"Content-Type": "application/json","X-Auth-Token":token}
 users = requests.get("http://controller:5000/v3/users",headers
http://www.dtcms.com/a/329180.html

相关文章:

  • OpenBMC 中命令模式的深度解析:从原理到实现
  • Flink中的窗口
  • HTML5 Canvas实现数组时钟代码,适用于wordpress侧边栏显示
  • 用 mock 把 ES 单元测试@elastic/elasticsearch-mock 上手
  • PyTorch基础(使用TensorFlow架构)
  • Nginx的SSL通配符证书自动续期
  • Python(二):MacBook安装 Python并运行第一个 Python 程序
  • docker搭建java运行环境(java或者springboot)
  • 项目五算:估算、概算、预算、结算、决算
  • 解决:nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module
  • 《张朝阳的物理课》,呼应当下物理学习的“思维转向”
  • react与vue的对比,来实现标签内部类似v-for循环,v-if等功能
  • Avalon-MM协议
  • python之---递归选择文件并生成新文件保持目录结构
  • 《工程封装》(Python)
  • 一键式商品信息获取:京东API返回值深度挖掘
  • Dynamsoft Capture Vision Crack
  • AWS Bedrock Claude模型费用深度分析:企业AI成本优化指南
  • 卫星轨道基础知识
  • ICCV 2025 | 4相机干掉480机位?CMU MonoFusion高斯泼溅重构4D人体!
  • LaTeX(排版系统)Texlive(环境)Vscode(编辑器)环境配置与安装
  • Pytest项目_day14(参数化、数据驱动)
  • duiLib 利用布局文件显示一个窗口并响应事件
  • C语言零基础第15讲:字符函数和字符串函数
  • ThinkPHP+Mysql 灵活用工小程序-技术深度解析与实践指南
  • 对线面试官之幂等和去重
  • 数据结构:用数组实现队列(Implementing Queue Using Array)
  • vue修改element的css属性
  • Docker端口映射完全指南:打通容器内外通信的关键技术
  • 如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录