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  }