如下为批量替换,如单台需自行修改

# coding: utf-8
import os
import requests
import json
import sys

simulator_token_file = "simulator_token.txt"
iam_url = "https://iam.myhuaweicloud.com/v3/auth/tokens"

#endpoint: https://developer.huaweicloud.com/endpoint?all
#西南-贵阳一
project_name = "cn-southwest-2"
endpoint = "ecs.cn-southwest-2.myhuaweicloud.com"
project_id = "xxxxxxxxx"
os_init_password = "xxxxxxxxx"
IAMDomain = "xxxxxx"
IAMUser = "xxxxxxx"
IAMPassword = "xxxxxx"

headers = {
    'Content-Type': 'application/json;charset=utf8'
}

def Get_token():  
    body = {
        "auth": {
            "identity": {
                "methods": [
                    "password"
                ],
                "password": {
                    "user": {
                        "domain": {
                            "name": IAMDomain
                        },
                        "name": IAMUser,
                        "password": IAMPassword
                    }
                }
            },
            "scope": {
                "project": {
                    "name": project_name
                }
            }
        }
    }
    response = requests.post(iam_url, headers=headers, json=body)
    response_header = response.headers
    #print(response_header)
    # 获取所有头部的键值对
    #for key, value in response_header.items():
    #    print(key, value) 
    # 获取特定头部的值,  获取token
    x_auth_token = response_header.get("X-Subject-Token")
    #print(x_auth_token)
    with open(simulator_token_file, 'w') as f:
        f.write(x_auth_token)
    #print(response.text)

def Check_token():
    file_path = 'simulator_token.txt'
    # 检查文件是否存在
    if not os.path.exists(file_path):
    # 如果文件不存在,则创建文件
        with open(file_path, 'w') as file:
            file.write('token')
    while True:
        with open('simulator_token.txt', 'r') as file:
            simulator_token = file.readline().strip()
    
        headers = {
            'Content-Type': 'application/json;charset=utf8',
            'X-Auth-Token': simulator_token,
            'X-Subject-Token': simulator_token
        }
        re_token = requests.get(iam_url, headers=headers)
        if re_token is not None and re_token.status_code == 200:
            #print(re_token.text)
            print("----------------当前token有效,无需重新获取-------------------")
            return simulator_token
            break
        else:
            print("---------------token过期,重新获取token-------------")
            Get_token()

def Change_os_image(os_id, x_auth_token):
    headers = {'X-Auth-Token': x_auth_token }
    #切换操作系统:https://support.huaweicloud.com/api-ecs/ecs_02_0204.html
    url_change_os_image = "https://" + endpoint + "/v1/" + project_id + "/cloudservers/" + os_id + "/changeos"

    # 获取镜像id:https://support.huaweicloud.com/api-ims/ims_03_0702.html
    # 新的镜像 id
    # ensp-pro0705 image_id:       3e3be9d9-9b86-42f6-bebd-ce3841f6695a
    # ensp-pro240409 image_id:     562d2622-e6fd-4b85-a544-c1e7aba5a124
    
    # ensp-pro0705
    #new_image_id = "3e3be9d9-9b86-42f6-bebd-ce3841f6695a"
    # ensp-pro240409
    new_image_id = "562d2622-e6fd-4b85-a544-c1e7aba5a124"
    params_chage_os_image = {
        "os-change": {
            "adminpass": os_init_password, 
            "userid": "b42eccb1f2a6469ba8c0484e0e8c76f8", 
            "imageid": new_image_id,
            "mode": "withStopServer"
        }
    }
    re_change_os_name = requests.post(url_change_os_image, headers=headers, json=params_chage_os_image)
    print(re_change_os_name.text)

def Os_list():
    url = "https://" + endpoint + "/v1/" + project_id + "/cloudservers/detail"
    x_auth_token = Check_token()
    headers = {'X-Auth-Token': x_auth_token }
    payload = {'offset': '1', 'limit': '100'}

    response = requests.get(url, headers=headers, params=payload)
    if response is not None and response.status_code == 200:
        #print(response.text)
        os_name_all = json.loads(response.text)["servers"]
        os_name_num = len(os_name_all)
        #print(os_name_num)
        for i in range(os_name_num):
            os_name = os_name_all[i]["name"]
            os_id = os_name_all[i]["id"]
            image_name = os_name_all[i]["metadata"]["image_name"]
            image_id = os_name_all[i]["image"]["id"]
            #print(os_name + ": "  + os_id + " " + image_name + " " "image_id:       " + image_id)

            if os_name == "ensp-add3-0019" and os_id == "cb84b15c-0424-410e-88eb-120cac50898c":
            # 批量替换镜像ensp-pro0705的os为 ensp-pro240409
            #if image_name == "ensp-pro0705":
                print(os_name + ": "  + os_id + " " + image_name + " " "image_id:       " + image_id)
                Change_os_image(os_id, x_auth_token)

    else:
        print("获取os列表失败")
        

if __name__ == '__main__':
    Os_list()