ZStack - 創建物理機

/ 前言 /

       在ZStack的API中, 大多數的API返回的是一個任務結果查詢地址, 此時我們就需要根據這個地址輪訓去查詢任務狀態及結果

{ 
	"location": "http://localhost:8080/v1/api-jobs/967a26b7431c49c0b1d50d709ef1aef3" 
}

       我們知道ZStack中有管理節點計算節點的概念, 創建物理機其實就是將已有的計算節點添加到管理節點中, 方便後續操作

/ API /

創建物理機
  • API名稱

    添加KVM主機(AddKVMHost)

  • 請求方式

    POST zstack/v1/hosts/kvm

  • curl示例

    curl -H "Content-Type: application/json" \
    -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \
    -X POST -d '{"params":{"username":"userName","password":"password","sshPort":"22","name ":"newHost","managementIp":"127.0.0.1","clusterUuid":"9adf394ca46432afb1218d220bf2925e "}}' \
    http://localhost:8080/zstack/v1/hosts/kvm
    
  • 返回示例

    {"inventory": {
    	"zoneUuid": "d4160c59319c4642832e666514364a79", 
    	"name": "example",
    	"uuid": "479e88bab7a647e3b066a724c8bb3b82", 
    	"clusterUuid": "42ade59801804602b9986b42fd103d1c", 
    	"description": "example",
    	"managementIp": "192.168.0.1",
    	"hypervisorType": "KVM",
    	"state": "Enabled",
    	"status": "Connected",
    	"totalCpuCapacity": 4.0,
    	"availableCpuCapacity": 2.0,
    	"totalMemoryCapacity": 4.0, 
    	"availableMemoryCapacity": 4.0
    }}
    

/ 代碼 /

ZStack中, 大多數的API在調用後返回的是

user_name = 'admin'
user_password='password'
host = 'http://localhost:8080/'


# 創建物理機
def create_host(cluster_uuid, session_uuid):
	# 需要注意的是managementIp這個參數必須是當前已有結算節點的ip地址, 且管理節點可以ping通該ip
    content = {
        "params": {
            "username": "root",
            "password": "password",
            "name": "Host",
            "sshPort": 22,
            "managementIp": "192.168.0.100",
            "clusterUuid": cluster_uuid,
            "hostType": "kvm",
            "description": "host_des"
        }
    }
    data = json.dumps(content)
    url = host + 'zstack/v1/hosts/kvm'
    headers = {"Content-Type": "application/json", "Authorization": "OAuth " + session_uuid}
    response = requests.post(url, data, headers=headers)
    host_uuid = deal_response(response, True)
    if host_uuid:
        return host_uuid


# 處理返回數據
def deal_response(response, is_return):
    if response:
        rsp = json.loads(response.text)
        if rsp:
            print('rsp : {%s}' % rsp)
            json_str = query_until_done(rsp)
            if json_str:
                if not json_str.has_key('error'):
                    if is_return:
                        return json_str['inventory']['uuid']
                    else:
                        return True
    return False


# 輪詢查詢API結果
def query_until_done(rsp):
	# 截取任務id, 替換請求地址
        if rsp.has_key('location'):
        location = rsp['location']
        job_uuid = location.split('/')[-1]
        if job_uuid:
            while True:
                url = host + "zstack/v1/api-jobs/" + location.split('/')[-1]
                response = requests.get(url)
                text = response.text
                print(text)
                if text != '{}':
                    print('url : {%s}' % url)
                    return json.loads(text)


if __name__ == '__main__':
	session_uuid = login()
	if session_uuid:
		 # 創建區域
        zone_uuid = create_zone(session_uuid)
        if zone_uuid:
            # 創建集羣
            cluster_uuid = create_clusters(session_uuid, zone_uuid)
            if cluster_uuid:
            	# 創建物理機
                host_uuid = create_host(cluster_uuid, session_uuid)

/ ZStack全流程相關博文鏈接 /

ZStack - 登錄

ZStack - 創建區域、集羣

ZStack - 創建物理機

ZStack - 創建主存儲

ZStack - 創建2層3層網絡

ZStack - 創建雲主機計算規格

ZStack - 創建鏡像

ZStack - 創建雲主機計算規格

ZStack - 創建雲主機

ZStack - 全流程代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章