func resourceAliCloudOssBucketWebsiteCreate()

in alicloud/resource_alicloud_oss_bucket_website.go [445:827]


func resourceAliCloudOssBucketWebsiteCreate(d *schema.ResourceData, meta interface{}) error {

	client := meta.(*connectivity.AliyunClient)

	action := fmt.Sprintf("/?website")
	var request map[string]interface{}
	var response map[string]interface{}
	query := make(map[string]*string)
	body := make(map[string]interface{})
	hostMap := make(map[string]*string)
	var err error
	request = make(map[string]interface{})
	hostMap["bucket"] = StringPointer(d.Get("bucket").(string))

	objectDataLocalMap := make(map[string]interface{})

	if v := d.Get("index_document"); !IsNil(v) {
		indexDocument := make(map[string]interface{})
		suffix1, _ := jsonpath.Get("$[0].suffix", d.Get("index_document"))
		if suffix1 != nil && suffix1 != "" {
			indexDocument["Suffix"] = suffix1
		}
		supportSubDir1, _ := jsonpath.Get("$[0].support_sub_dir", d.Get("index_document"))
		if supportSubDir1 != nil && supportSubDir1 != "" {
			indexDocument["SupportSubDir"] = supportSubDir1
		}
		type1, _ := jsonpath.Get("$[0].type", d.Get("index_document"))
		if type1 != nil && type1 != "" {
			indexDocument["Type"] = type1
		}

		objectDataLocalMap["IndexDocument"] = indexDocument
	}

	if v := d.Get("error_document"); !IsNil(v) {
		errorDocument := make(map[string]interface{})
		httpStatus1, _ := jsonpath.Get("$[0].http_status", d.Get("error_document"))
		if httpStatus1 != nil && httpStatus1 != "" {
			errorDocument["HttpStatus"] = httpStatus1
		}
		key1, _ := jsonpath.Get("$[0].key", d.Get("error_document"))
		if key1 != nil && key1 != "" {
			errorDocument["Key"] = key1
		}

		objectDataLocalMap["ErrorDocument"] = errorDocument
	}

	if v := d.Get("routing_rules"); !IsNil(v) {
		routingRules := make(map[string]interface{})
		if v, ok := d.GetOk("routing_rules"); ok {
			localData, err := jsonpath.Get("$[0].routing_rule", v)
			if err != nil {
				localData = make([]interface{}, 0)
			}
			localMaps := make([]interface{}, 0)
			for _, dataLoop := range localData.([]interface{}) {
				dataLoopTmp := make(map[string]interface{})
				if dataLoop != nil {
					dataLoopTmp = dataLoop.(map[string]interface{})
				}
				dataLoopMap := make(map[string]interface{})
				dataLoopMap["RuleNumber"] = dataLoopTmp["rule_number"]
				localData1 := make(map[string]interface{})
				keyPrefixEquals1, _ := jsonpath.Get("$[0].key_prefix_equals", dataLoopTmp["condition"])
				if keyPrefixEquals1 != nil && keyPrefixEquals1 != "" {
					localData1["KeyPrefixEquals"] = keyPrefixEquals1
				}
				keySuffixEquals1, _ := jsonpath.Get("$[0].key_suffix_equals", dataLoopTmp["condition"])
				if keySuffixEquals1 != nil && keySuffixEquals1 != "" {
					localData1["KeySuffixEquals"] = keySuffixEquals1
				}
				httpErrorCodeReturnedEquals1, _ := jsonpath.Get("$[0].http_error_code_returned_equals", dataLoopTmp["condition"])
				if httpErrorCodeReturnedEquals1 != nil && httpErrorCodeReturnedEquals1 != "" {
					localData1["HttpErrorCodeReturnedEquals"] = httpErrorCodeReturnedEquals1
				}
				if v, ok := dataLoopTmp["condition"]; ok {
					localData2, err := jsonpath.Get("$[0].include_headers", v)
					if err != nil {
						localData2 = make([]interface{}, 0)
					}
					localMaps2 := make([]interface{}, 0)
					for _, dataLoop2 := range localData2.([]interface{}) {
						dataLoop2Tmp := make(map[string]interface{})
						if dataLoop2 != nil {
							dataLoop2Tmp = dataLoop2.(map[string]interface{})
						}
						dataLoop2Map := make(map[string]interface{})
						dataLoop2Map["Key"] = dataLoop2Tmp["key"]
						dataLoop2Map["Equals"] = dataLoop2Tmp["equals"]
						dataLoop2Map["StartsWith"] = dataLoop2Tmp["starts_with"]
						dataLoop2Map["EndsWith"] = dataLoop2Tmp["ends_with"]
						localMaps2 = append(localMaps2, dataLoop2Map)
					}
					localData1["IncludeHeader"] = localMaps2
				}

				dataLoopMap["Condition"] = localData1
				localData3 := make(map[string]interface{})
				redirectType1, _ := jsonpath.Get("$[0].redirect_type", dataLoopTmp["redirect"])
				if redirectType1 != nil && redirectType1 != "" {
					localData3["RedirectType"] = redirectType1
				}
				passQueryString1, _ := jsonpath.Get("$[0].pass_query_string", dataLoopTmp["redirect"])
				if passQueryString1 != nil && passQueryString1 != "" {
					localData3["PassQueryString"] = passQueryString1
				}
				mirrorUrl, _ := jsonpath.Get("$[0].mirror_url", dataLoopTmp["redirect"])
				if mirrorUrl != nil && mirrorUrl != "" {
					localData3["MirrorURL"] = mirrorUrl
				}
				mirrorSni, _ := jsonpath.Get("$[0].mirror_sni", dataLoopTmp["redirect"])
				if mirrorSni != nil && mirrorSni != "" {
					localData3["MirrorSNI"] = mirrorSni
				}
				mirrorPassQueryString1, _ := jsonpath.Get("$[0].mirror_pass_query_string", dataLoopTmp["redirect"])
				if mirrorPassQueryString1 != nil && mirrorPassQueryString1 != "" {
					localData3["MirrorPassQueryString"] = mirrorPassQueryString1
				}
				mirrorFollowRedirect1, _ := jsonpath.Get("$[0].mirror_follow_redirect", dataLoopTmp["redirect"])
				if mirrorFollowRedirect1 != nil && mirrorFollowRedirect1 != "" {
					localData3["MirrorFollowRedirect"] = mirrorFollowRedirect1
				}
				mirrorCheckMd51, _ := jsonpath.Get("$[0].mirror_check_md5", dataLoopTmp["redirect"])
				if mirrorCheckMd51 != nil && mirrorCheckMd51 != "" {
					localData3["MirrorCheckMd5"] = mirrorCheckMd51
				}
				mirrorHeaders := make(map[string]interface{})
				passAll1, _ := jsonpath.Get("$[0].mirror_headers[0].pass_all", dataLoopTmp["redirect"])
				if passAll1 != nil && passAll1 != "" {
					mirrorHeaders["PassAll"] = passAll1
				}
				pass1, _ := jsonpath.Get("$[0].mirror_headers[0].pass", dataLoopTmp["redirect"])
				if pass1 != nil && pass1 != "" {
					mirrorHeaders["Pass"] = pass1
				}
				remove1, _ := jsonpath.Get("$[0].mirror_headers[0].remove", dataLoopTmp["redirect"])
				if remove1 != nil && remove1 != "" {
					mirrorHeaders["Remove"] = remove1
				}
				if v, ok := dataLoopTmp["redirect"]; ok {
					localData4, err := jsonpath.Get("$[0].mirror_headers[0].set", v)
					if err != nil {
						localData4 = make([]interface{}, 0)
					}
					localMaps4 := make([]interface{}, 0)
					for _, dataLoop4 := range localData4.([]interface{}) {
						dataLoop4Tmp := make(map[string]interface{})
						if dataLoop4 != nil {
							dataLoop4Tmp = dataLoop4.(map[string]interface{})
						}
						dataLoop4Map := make(map[string]interface{})
						dataLoop4Map["Value"] = dataLoop4Tmp["value"]
						dataLoop4Map["Key"] = dataLoop4Tmp["key"]
						localMaps4 = append(localMaps4, dataLoop4Map)
					}
					mirrorHeaders["Set"] = localMaps4
				}

				localData3["MirrorHeaders"] = mirrorHeaders
				protocol1, _ := jsonpath.Get("$[0].protocol", dataLoopTmp["redirect"])
				if protocol1 != nil && protocol1 != "" {
					localData3["Protocol"] = protocol1
				}
				hostName1, _ := jsonpath.Get("$[0].host_name", dataLoopTmp["redirect"])
				if hostName1 != nil && hostName1 != "" {
					localData3["HostName"] = hostName1
				}
				replaceKeyPrefixWith1, _ := jsonpath.Get("$[0].replace_key_prefix_with", dataLoopTmp["redirect"])
				if replaceKeyPrefixWith1 != nil && replaceKeyPrefixWith1 != "" {
					localData3["ReplaceKeyPrefixWith"] = replaceKeyPrefixWith1
				}
				enableReplacePrefix1, _ := jsonpath.Get("$[0].enable_replace_prefix", dataLoopTmp["redirect"])
				if enableReplacePrefix1 != nil && enableReplacePrefix1 != "" {
					localData3["EnableReplacePrefix"] = enableReplacePrefix1
				}
				replaceKeyWith1, _ := jsonpath.Get("$[0].replace_key_with", dataLoopTmp["redirect"])
				if replaceKeyWith1 != nil && replaceKeyWith1 != "" {
					localData3["ReplaceKeyWith"] = replaceKeyWith1
				}
				httpRedirectCode1, _ := jsonpath.Get("$[0].http_redirect_code", dataLoopTmp["redirect"])
				if httpRedirectCode1 != nil && httpRedirectCode1 != "" {
					localData3["HttpRedirectCode"] = httpRedirectCode1
				}
				mirrorPassOriginalSlashes1, _ := jsonpath.Get("$[0].mirror_pass_original_slashes", dataLoopTmp["redirect"])
				if mirrorPassOriginalSlashes1 != nil && mirrorPassOriginalSlashes1 != "" {
					localData3["MirrorPassOriginalSlashes"] = mirrorPassOriginalSlashes1
				}
				mirrorUrlSlave, _ := jsonpath.Get("$[0].mirror_url_slave", dataLoopTmp["redirect"])
				if mirrorUrlSlave != nil && mirrorUrlSlave != "" {
					localData3["MirrorURLSlave"] = mirrorUrlSlave
				}
				mirrorUrlProbe, _ := jsonpath.Get("$[0].mirror_url_probe", dataLoopTmp["redirect"])
				if mirrorUrlProbe != nil && mirrorUrlProbe != "" {
					localData3["MirrorURLProbe"] = mirrorUrlProbe
				}
				mirrorSaveOssMeta1, _ := jsonpath.Get("$[0].mirror_save_oss_meta", dataLoopTmp["redirect"])
				if mirrorSaveOssMeta1 != nil && mirrorSaveOssMeta1 != "" {
					localData3["MirrorSaveOssMeta"] = mirrorSaveOssMeta1
				}
				mirrorProxyPass1, _ := jsonpath.Get("$[0].mirror_proxy_pass", dataLoopTmp["redirect"])
				if mirrorProxyPass1 != nil && mirrorProxyPass1 != "" {
					localData3["MirrorProxyPass"] = mirrorProxyPass1
				}
				mirrorAllowGetImageInfo1, _ := jsonpath.Get("$[0].mirror_allow_get_image_info", dataLoopTmp["redirect"])
				if mirrorAllowGetImageInfo1 != nil && mirrorAllowGetImageInfo1 != "" {
					localData3["MirrorAllowGetImageInfo"] = mirrorAllowGetImageInfo1
				}
				mirrorAllowVideoSnapshot1, _ := jsonpath.Get("$[0].mirror_allow_video_snapshot", dataLoopTmp["redirect"])
				if mirrorAllowVideoSnapshot1 != nil && mirrorAllowVideoSnapshot1 != "" {
					localData3["MirrorAllowVideoSnapshot"] = mirrorAllowVideoSnapshot1
				}
				mirrorIsExpressTunnel1, _ := jsonpath.Get("$[0].mirror_is_express_tunnel", dataLoopTmp["redirect"])
				if mirrorIsExpressTunnel1 != nil && mirrorIsExpressTunnel1 != "" {
					localData3["MirrorIsExpressTunnel"] = mirrorIsExpressTunnel1
				}
				mirrorDstRegion1, _ := jsonpath.Get("$[0].mirror_dst_region", dataLoopTmp["redirect"])
				if mirrorDstRegion1 != nil && mirrorDstRegion1 != "" {
					localData3["MirrorDstRegion"] = mirrorDstRegion1
				}
				mirrorDstVpcId1, _ := jsonpath.Get("$[0].mirror_dst_vpc_id", dataLoopTmp["redirect"])
				if mirrorDstVpcId1 != nil && mirrorDstVpcId1 != "" {
					localData3["MirrorDstVpcId"] = mirrorDstVpcId1
				}
				mirrorDstSlaveVpcId1, _ := jsonpath.Get("$[0].mirror_dst_slave_vpc_id", dataLoopTmp["redirect"])
				if mirrorDstSlaveVpcId1 != nil && mirrorDstSlaveVpcId1 != "" {
					localData3["MirrorDstSlaveVpcId"] = mirrorDstSlaveVpcId1
				}
				mirrorUserLastModified1, _ := jsonpath.Get("$[0].mirror_user_last_modified", dataLoopTmp["redirect"])
				if mirrorUserLastModified1 != nil && mirrorUserLastModified1 != "" {
					localData3["MirrorUserLastModified"] = mirrorUserLastModified1
				}
				mirrorSwitchAllErrors1, _ := jsonpath.Get("$[0].mirror_switch_all_errors", dataLoopTmp["redirect"])
				if mirrorSwitchAllErrors1 != nil && mirrorSwitchAllErrors1 != "" {
					localData3["MirrorSwitchAllErrors"] = mirrorSwitchAllErrors1
				}
				mirrorTunnelId1, _ := jsonpath.Get("$[0].mirror_tunnel_id", dataLoopTmp["redirect"])
				if mirrorTunnelId1 != nil && mirrorTunnelId1 != "" {
					localData3["MirrorTunnelId"] = mirrorTunnelId1
				}
				mirrorUsingRole1, _ := jsonpath.Get("$[0].mirror_using_role", dataLoopTmp["redirect"])
				if mirrorUsingRole1 != nil && mirrorUsingRole1 != "" {
					localData3["MirrorUsingRole"] = mirrorUsingRole1
				}
				mirrorRole1, _ := jsonpath.Get("$[0].mirror_role", dataLoopTmp["redirect"])
				if mirrorRole1 != nil && mirrorRole1 != "" {
					localData3["MirrorRole"] = mirrorRole1
				}
				mirrorAllowHeadObject1, _ := jsonpath.Get("$[0].mirror_allow_head_object", dataLoopTmp["redirect"])
				if mirrorAllowHeadObject1 != nil && mirrorAllowHeadObject1 != "" {
					localData3["MirrorAllowHeadObject"] = mirrorAllowHeadObject1
				}
				transparentMirrorResponseCodes1, _ := jsonpath.Get("$[0].transparent_mirror_response_codes", dataLoopTmp["redirect"])
				if transparentMirrorResponseCodes1 != nil && transparentMirrorResponseCodes1 != "" {
					localData3["TransparentMirrorResponseCodes"] = transparentMirrorResponseCodes1
				}
				mirrorAsyncStatus1, _ := jsonpath.Get("$[0].mirror_async_status", dataLoopTmp["redirect"])
				if mirrorAsyncStatus1 != nil && mirrorAsyncStatus1 != "" {
					localData3["MirrorAsyncStatus"] = mirrorAsyncStatus1
				}
				mirrorTaggings := make(map[string]interface{})
				if v, ok := dataLoopTmp["redirect"]; ok {
					localData5, err := jsonpath.Get("$[0].mirror_taggings[0].taggings", v)
					if err != nil {
						localData5 = make([]interface{}, 0)
					}
					localMaps5 := make([]interface{}, 0)
					for _, dataLoop5 := range localData5.([]interface{}) {
						dataLoop5Tmp := make(map[string]interface{})
						if dataLoop5 != nil {
							dataLoop5Tmp = dataLoop5.(map[string]interface{})
						}
						dataLoop5Map := make(map[string]interface{})
						dataLoop5Map["Key"] = dataLoop5Tmp["key"]
						dataLoop5Map["Value"] = dataLoop5Tmp["value"]
						localMaps5 = append(localMaps5, dataLoop5Map)
					}
					mirrorTaggings["Taggings"] = localMaps5
				}

				localData3["MirrorTaggings"] = mirrorTaggings
				mirrorReturnHeaders := make(map[string]interface{})
				if v, ok := dataLoopTmp["redirect"]; ok {
					localData6, err := jsonpath.Get("$[0].mirror_return_headers[0].return_header", v)
					if err != nil {
						localData6 = make([]interface{}, 0)
					}
					localMaps6 := make([]interface{}, 0)
					for _, dataLoop6 := range localData6.([]interface{}) {
						dataLoop6Tmp := make(map[string]interface{})
						if dataLoop6 != nil {
							dataLoop6Tmp = dataLoop6.(map[string]interface{})
						}
						dataLoop6Map := make(map[string]interface{})
						dataLoop6Map["Value"] = dataLoop6Tmp["value"]
						dataLoop6Map["Key"] = dataLoop6Tmp["key"]
						localMaps6 = append(localMaps6, dataLoop6Map)
					}
					mirrorReturnHeaders["ReturnHeader"] = localMaps6
				}

				localData3["MirrorReturnHeaders"] = mirrorReturnHeaders
				mirrorAuth := make(map[string]interface{})
				authType1, _ := jsonpath.Get("$[0].mirror_auth[0].auth_type", dataLoopTmp["redirect"])
				if authType1 != nil && authType1 != "" {
					mirrorAuth["AuthType"] = authType1
				}
				region1, _ := jsonpath.Get("$[0].mirror_auth[0].region", dataLoopTmp["redirect"])
				if region1 != nil && region1 != "" {
					mirrorAuth["Region"] = region1
				}
				accessKeyId1, _ := jsonpath.Get("$[0].mirror_auth[0].access_key_id", dataLoopTmp["redirect"])
				if accessKeyId1 != nil && accessKeyId1 != "" {
					mirrorAuth["AccessKeyId"] = accessKeyId1
				}
				accessKeySecret1, _ := jsonpath.Get("$[0].mirror_auth[0].access_key_secret", dataLoopTmp["redirect"])
				if accessKeySecret1 != nil && accessKeySecret1 != "" {
					mirrorAuth["AccessKeySecret"] = accessKeySecret1
				}

				localData3["MirrorAuth"] = mirrorAuth
				mirrorMultiAlternates := make(map[string]interface{})
				if v, ok := dataLoopTmp["redirect"]; ok {
					localData7, err := jsonpath.Get("$[0].mirror_multi_alternates[0].mirror_multi_alternate", v)
					if err != nil {
						localData7 = make([]interface{}, 0)
					}
					localMaps7 := make([]interface{}, 0)
					for _, dataLoop7 := range localData7.([]interface{}) {
						dataLoop7Tmp := make(map[string]interface{})
						if dataLoop7 != nil {
							dataLoop7Tmp = dataLoop7.(map[string]interface{})
						}
						dataLoop7Map := make(map[string]interface{})
						dataLoop7Map["MirrorMultiAlternateNumber"] = dataLoop7Tmp["mirror_multi_alternate_number"]
						dataLoop7Map["MirrorMultiAlternateURL"] = dataLoop7Tmp["mirror_multi_alternate_url"]
						dataLoop7Map["MirrorMultiAlternateVpcId"] = dataLoop7Tmp["mirror_multi_alternate_vpc_id"]
						dataLoop7Map["MirrorMultiAlternateDstRegion"] = dataLoop7Tmp["mirror_multi_alternate_dst_region"]
						localMaps7 = append(localMaps7, dataLoop7Map)
					}
					mirrorMultiAlternates["MirrorMultiAlternate"] = localMaps7
				}

				localData3["MirrorMultiAlternates"] = mirrorMultiAlternates
				dataLoopMap["Redirect"] = localData3
				localData8 := make(map[string]interface{})
				script1, _ := jsonpath.Get("$[0].script", dataLoopTmp["lua_config"])
				if script1 != nil && script1 != "" {
					localData8["Script"] = script1
				}
				dataLoopMap["LuaConfig"] = localData8
				localMaps = append(localMaps, dataLoopMap)
			}
			routingRules["RoutingRule"] = localMaps
		}

		objectDataLocalMap["RoutingRules"] = routingRules
	}

	request["WebsiteConfiguration"] = objectDataLocalMap
	body = request
	wait := incrementalWait(3*time.Second, 5*time.Second)
	err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
		response, err = client.Do("Oss", xmlParam("PUT", "2019-05-17", "PutBucketWebsite", action), query, body, nil, hostMap, false)
		if err != nil {
			if NeedRetry(err) {
				wait()
				return resource.RetryableError(err)
			}
			return resource.NonRetryableError(err)
		}
		return nil
	})
	addDebug(action, response, request)

	if err != nil {
		return WrapErrorf(err, DefaultErrorMsg, "alicloud_oss_bucket_website", action, AlibabaCloudSdkGoERROR)
	}

	d.SetId(fmt.Sprint(*hostMap["bucket"]))

	return resourceAliCloudOssBucketWebsiteRead(d, meta)
}