image

image

#获取token 方法 /usr/lib/python2.7/site-packages/glance/common/auth.py 199行

import json
import requests


def auth():
    auth_url = 'http://11.0.1.100:5000/v3/auth/tokens'
    auth_body = {
        "auth": {
            "identity": {
                "methods": ["password"],
                "password": {
                    "user": {
                        "name": 'admin',
                        "domain": {"name": "demo"},
                        "password": '000000'
                    }
                }
            },
            "scope": {
                "project": {
                    "name": 'admin',
                    "domain": {
                        "name": "demo"
                    }
                }
            }
        }
    }

    headers = {'Content-Type': 'application/json'}
    headers['X-Auth-Token'] = requests.post(auth_url, headers=headers, data=json.dumps(auth_body)).headers['X-Subject-Token']
    return headers


headers = auth()
image_url = 'http://11.0.1.100:9292/v2/images'
name = 'cirros2'

# 删除同名镜像
res = requests.get(image_url, headers=headers)
images = res.json()['images']
for image in images:
    if image['name'] == name:
        delete_url = f"{image_url}/{image['id']}"
        requests.delete(delete_url, headers=headers)
        print("相同镜像已经删除")
        break

# 创建新镜像
image_body = {"min_disk": 20, "container_format": "bare", "min_ram": 1024, "disk_format": "qcow2", "name": name}
res = requests.post(image_url, data=json.dumps(image_body), headers=headers)
print(json.dumps(res.json(),indent=4))

if res.status_code == 201:
    image_id = res.json()['id']
    image_put_url = f"{image_url}/{image_id}/file"
    headers["Content-Type"] = "application/octet-stream"
    res=requests.put(image_put_url, data=open('/root/cirros-0.3.4-x86_64-disk.img', 'rb').read(), headers=headers)
    if res.status_code == 204:
        print(f"镜像创建成功\n镜像ID为:{image_id}")
        image_info= requests.get(f'{image_url}/{image_id}',headers=headers).json()
        print(json.dumps(image_info,indent=4))
        with open(f"{name}.json",'w') as f:
            json.dump(image_info, f, indent=4)
    else:
        print(f"上传镜像文件失败, 状态码为{res.status_code}")