github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/fgs/v2/function/Create.go (about) 1 package function 2 3 import ( 4 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 5 "github.com/opentelekomcloud/gophertelekomcloud/internal/build" 6 "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" 7 ) 8 9 type CreateOpts struct { 10 Name string `json:"func_name" required:"true"` 11 Package string `json:"package" required:"true"` 12 Runtime string `json:"runtime" required:"true"` 13 Timeout int `json:"timeout" required:"true"` 14 Handler string `json:"handler" required:"true"` 15 DependVersionList []string `json:"depend_version_list,omitempty"` 16 FuncVpc *FuncVpc `json:"func_vpc,omitempty"` 17 MemorySize int `json:"memory_size" required:"true"` 18 GpuMemory *int `json:"gpu_memory,omitempty"` 19 CodeType string `json:"code_type" required:"true"` 20 CodeURL string `json:"code_url,omitempty"` 21 CodeFilename string `json:"code_filename,omitempty"` 22 CustomImage *CustomImage `json:"custom_image,omitempty"` 23 UserData string `json:"user_data,omitempty"` 24 EncryptedUserData string `json:"encrypted_user_data,omitempty"` 25 Xrole string `json:"xrole,omitempty"` 26 AppXrole string `json:"app_xrole,omitempty"` 27 Description string `json:"description,omitempty"` 28 FuncCode *FuncCode `json:"func_code,omitempty"` 29 MountConfig *MountConfig `json:"mount_config,omitempty"` 30 InitHandler string `json:"initializer_handler,omitempty"` 31 InitTimeout *int `json:"initializer_timeout,omitempty"` 32 PreStopHandler string `json:"pre_stop_handler,omitempty"` 33 PreStopTimeout *int `json:"pre_stop_timeout,omitempty"` 34 Type string `json:"type,omitempty"` 35 LogConfig *FuncLogConfig `json:"log_config,omitempty"` 36 NetworkController *NetworkControlConfig `json:"network_controller,omitempty"` 37 IsStatefulFunction *bool `json:"is_stateful_function,omitempty"` 38 EnableDynamicMemory *bool `json:"enable_dynamic_memory,omitempty"` 39 } 40 41 type FuncVpc struct { 42 DomainId string `json:"domain_id,omitempty"` 43 ProjectID string `json:"namespace,omitempty"` 44 VpcName string `json:"vpc_name,omitempty"` 45 VpcID string `json:"vpc_id,omitempty"` 46 SubnetName string `json:"subnet_name,omitempty"` 47 SubnetID string `json:"subnet_id,omitempty"` 48 CIDR string `json:"cidr,omitempty"` 49 Gateway string `json:"gateway,omitempty"` 50 SecurityGroups []string `json:"security_groups"` 51 } 52 53 type CustomImage struct { 54 Enabled *bool `json:"bool,omitempty"` 55 Image string `json:"image,omitempty"` 56 Command string `json:"command,omitempty"` 57 Args string `json:"args,omitempty"` 58 WorkingDir string `json:"working_dir,omitempty"` 59 UID string `json:"uid,omitempty"` 60 GID string `json:"gid,omitempty"` 61 } 62 63 type FuncCode struct { 64 File string `json:"file,omitempty"` 65 Link string `json:"link,omitempty"` 66 } 67 68 type MountConfig struct { 69 MountUser MountUser `json:"mount_user" required:"true"` 70 FuncMounts []FuncMount `json:"func_mounts" required:"true"` 71 } 72 73 type MountUser struct { 74 UserID string `json:"user_id" required:"true"` 75 UserGroupID string `json:"user_group_id" required:"true"` 76 } 77 78 type FuncMount struct { 79 MountType string `json:"mount_type" required:"true"` 80 MountResource string `json:"mount_resource" required:"true"` 81 MountSharePath string `json:"mount_share_path,omitempty"` 82 LocalMountPath string `json:"local_mount_path" required:"true"` 83 } 84 85 type FuncLogConfig struct { 86 GroupName string `json:"group_name,omitempty"` 87 GroupID string `json:"group_id,omitempty"` 88 StreamName string `json:"stream_name,omitempty"` 89 StreamID string `json:"stream_id,omitempty"` 90 } 91 92 type NetworkControlConfig struct { 93 DisablePublicNetwork *bool `json:"disable_public_network,omitempty"` 94 TriggerAccessVpcs []VpcConfig `json:"trigger_access_vpcs,omitempty"` 95 } 96 97 type VpcConfig struct { 98 VpcName string `json:"vpc_name,omitempty"` 99 VpcID string `json:"vpc_id,omitempty"` 100 } 101 102 func Create(client *golangsdk.ServiceClient, opts CreateOpts) (*FuncGraph, error) { 103 b, err := build.RequestBody(opts, "") 104 if err != nil { 105 return nil, err 106 } 107 108 raw, err := client.Post(client.ServiceURL("fgs", "functions"), b, nil, &golangsdk.RequestOpts{ 109 OkCodes: []int{200}, 110 }) 111 if err != nil { 112 return nil, err 113 } 114 115 var res FuncGraph 116 return &res, extract.Into(raw.Body, &res) 117 } 118 119 type FuncGraph struct { 120 FuncID string `json:"func_id"` 121 FuncURN string `json:"func_urn"` 122 FuncName string `json:"func_name"` 123 DomainID string `json:"domain_id"` 124 ProjectID string `json:"namespace"` 125 ProjectName string `json:"project_name"` 126 Package string `json:"package"` 127 Runtime string `json:"runtime"` 128 Timeout int `json:"timeout"` 129 Handler string `json:"handler"` 130 MemorySize int `json:"memory_size"` 131 GpuMemory int `json:"gpu_memory"` 132 CPU int `json:"cpu"` 133 CodeType string `json:"code_type"` 134 CodeURL string `json:"code_url"` 135 CodeFilename string `json:"code_filename"` 136 CodeSize int `json:"code_size"` 137 DomainNames string `json:"domain_names"` 138 UserData string `json:"user_data"` 139 EncryptedUserData string `json:"encrypted_user_data"` 140 Digest string `json:"digest"` 141 Version string `json:"version"` 142 ImageName string `json:"image_name"` 143 Xrole string `json:"xrole"` 144 AppXrole string `json:"app_xrole"` 145 Description string `json:"description"` 146 LastModified string `json:"last_modified"` 147 FuncVpc FuncVpc `json:"func_vpc"` 148 MountConfig MountConfig `json:"mount_config"` 149 ReservedInstanceCount int `json:"reserved_instance_count"` 150 DependVersionList []string `json:"depend_version_list"` 151 StrategyConfig StrategyConfig `json:"strategy_config"` 152 ExtendConfig string `json:"extend_config"` 153 Dependencies []Dependency `json:"dependencies"` 154 InitHandler string `json:"initializer_handler"` 155 InitTimeout int `json:"initializer_timeout"` 156 PreStopHandler string `json:"pre_stop_handler"` 157 PreStopTimeout string `json:"pre_stop_timeout"` 158 LongTime bool `json:"long_time"` 159 LogGroupID string `json:"log_group_id"` 160 LogStreamID string `json:"log_stream_id"` 161 Type string `json:"type"` 162 EnableDynamicMemory bool `json:"enable_dynamic_memory"` 163 IsStatefulFunction bool `json:"is_stateful_function"` 164 CustomImage CustomImage `json:"custom_image"` 165 IsBridgeFunction bool `json:"is_bridge_function"` 166 ApigRouteEnable bool `json:"apig_route_enable"` 167 HeartbeatHandler string `json:"heartbeat_handler"` 168 EnableClassIsolation bool `json:"enable_class_isolation"` 169 GpuType string `json:"gpu_type"` 170 AllowEphemeralStorage bool `json:"allow_ephemeral_storage"` 171 EphemeralStorage int `json:"ephemeral_storage"` 172 NetworkController NetworkControlConfig `json:"network_controller"` 173 ResourceID string `json:"resource_id"` 174 EnableAuthInHeader bool `json:"enable_auth_in_header"` 175 ReservedInstanceIdleMode bool `json:"reserved_instance_idle_mode"` 176 } 177 178 type StrategyConfig struct { 179 Concurrency int `json:"concurrency"` 180 ConcurrentNum int `json:"concurrent_num"` 181 } 182 183 type Dependency struct { 184 ID string `json:"id"` 185 Owner string `json:"owner"` 186 Link string `json:"link"` 187 Runtime string `json:"runtime"` 188 Etag string `json:"etag"` 189 Size int `json:"size"` 190 Name string `json:"name"` 191 Description string `json:"description"` 192 FileName string `json:"file_name"` 193 Version int `json:"version"` 194 DepID string `json:"dep_id"` 195 LastModified string `json:"last_modified"` 196 }