| @@ -1,15 +1,16 @@ | |||
| package ali | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "errors" | |||
| "flag" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses" | |||
| "github.com/golang/glog" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "strconv" | |||
| ) | |||
| // CreateContainerGroup invokes the eci.CreateContainerGroup API synchronously | |||
| @@ -32,21 +33,26 @@ func CreateContainerGroup(request *CreateContainerGroupRequest) (response *Creat | |||
| glog.Infof("load tenant from file finished") | |||
| tenanters, err := tenanter.GetTenanters(provider) | |||
| var regionId int32 | |||
| var cpuPod string | |||
| var memoryPod string | |||
| container := *request.Container | |||
| containerImage := container[0].Image | |||
| containerName := container[0].Name | |||
| cpuPodFloat, _ := container[0].Cpu.GetValue() | |||
| memoryPodFloat, _ := container[0].Memory.GetValue() | |||
| switch request.ProviderId { | |||
| case 0: | |||
| regionId, _ = tenanter.GetAliRegionId(request.RegionId) | |||
| case 1: | |||
| regionId, _ = tenanter.GetTencentRegionId(request.RegionId) | |||
| case 2: | |||
| //华为的CPU和内存数量要进行转换 | |||
| regionId, _ = tenanter.GetHuaweiRegionId(request.RegionId) | |||
| cpuPod = strconv.FormatFloat(cpuPodFloat*1000, 'f', 0, 64) | |||
| memoryPod = strconv.FormatFloat(memoryPodFloat, 'f', 0, 64) | |||
| case 3: | |||
| regionId, _ = tenanter.GetK8SRegionId(request.RegionId) | |||
| } | |||
| container := *request.Container | |||
| containerImage := container[0].Image | |||
| containerName := container[0].Name | |||
| containerPod := container[0].Cpu | |||
| memoryPod := container[0].Memory | |||
| requestPCM := &pbpod.CreatePodReq{ | |||
| RequestSource: "ali", | |||
| @@ -56,8 +62,8 @@ func CreateContainerGroup(request *CreateContainerGroupRequest) (response *Creat | |||
| RegionId: regionId, | |||
| ContainerImage: containerImage, | |||
| ContainerName: containerName, | |||
| CpuPod: string(containerPod), | |||
| MemoryPod: string(memoryPod), | |||
| CpuPod: cpuPod + "m", | |||
| MemoryPod: memoryPod + "Gi", | |||
| SecurityGroupId: "sg-6qlun7hd", | |||
| SubnetId: "subnet-mnwfg2fk", | |||
| VpcId: "vpc-rkwt40g5", | |||
| @@ -16,15 +16,15 @@ | |||
| package ali | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "errors" | |||
| "flag" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses" | |||
| "github.com/golang/glog" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| // DeleteContainerGroup invokes the eci.DeleteContainerGroup API synchronously | |||
| @@ -1,11 +1,11 @@ | |||
| package ali | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| // DescribeContainerGroups invokes the eci.DescribeContainerGroups API synchronously | |||
| @@ -16,15 +16,15 @@ | |||
| package ali | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "errors" | |||
| "flag" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses" | |||
| "github.com/golang/glog" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| // UpdateContainerGroup invokes the eci.UpdateContainerGroup API synchronously | |||
| @@ -0,0 +1,33 @@ | |||
| /* | |||
| Copyright 2017 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1 | |||
| import ( | |||
| "k8s.io/apimachinery/pkg/runtime/schema" | |||
| ) | |||
| // IsAnAPIObject allows clients to preemptively get a reference to an API object and pass it to places that | |||
| // intend only to get a reference to that object. This simplifies the event recording interface. | |||
| func (obj *ObjectReference) SetGroupVersionKind(gvk schema.GroupVersionKind) { | |||
| obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() | |||
| } | |||
| func (obj *ObjectReference) GroupVersionKind() schema.GroupVersionKind { | |||
| return schema.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) | |||
| } | |||
| func (obj *ObjectReference) GetObjectKind() schema.ObjectKind { return obj } | |||
| @@ -0,0 +1,100 @@ | |||
| /* | |||
| Copyright 2015 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1 | |||
| import ( | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/apimachinery/pkg/runtime" | |||
| "k8s.io/apimachinery/pkg/runtime/schema" | |||
| ) | |||
| // GroupName is the group name use in this package | |||
| const GroupName = "" | |||
| // SchemeGroupVersion is group version used to register these objects | |||
| var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} | |||
| // Resource takes an unqualified resource and returns a Group qualified GroupResource | |||
| func Resource(resource string) schema.GroupResource { | |||
| return SchemeGroupVersion.WithResource(resource).GroupResource() | |||
| } | |||
| var ( | |||
| // We only register manually written functions here. The registration of the | |||
| // generated functions takes place in the generated files. The separation | |||
| // makes the code compile even when the generated files are missing. | |||
| SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) | |||
| AddToScheme = SchemeBuilder.AddToScheme | |||
| ) | |||
| // Adds the list of known types to the given scheme. | |||
| func addKnownTypes(scheme *runtime.Scheme) error { | |||
| scheme.AddKnownTypes(SchemeGroupVersion, | |||
| &Pod{}, | |||
| &PodList{}, | |||
| &PodStatusResult{}, | |||
| &PodTemplate{}, | |||
| &PodTemplateList{}, | |||
| &ReplicationController{}, | |||
| &ReplicationControllerList{}, | |||
| &Service{}, | |||
| &ServiceProxyOptions{}, | |||
| &ServiceList{}, | |||
| &Endpoints{}, | |||
| &EndpointsList{}, | |||
| &Node{}, | |||
| &NodeList{}, | |||
| &NodeProxyOptions{}, | |||
| &Binding{}, | |||
| &Event{}, | |||
| &EventList{}, | |||
| &List{}, | |||
| &LimitRange{}, | |||
| &LimitRangeList{}, | |||
| &ResourceQuota{}, | |||
| &ResourceQuotaList{}, | |||
| &Namespace{}, | |||
| &NamespaceList{}, | |||
| &Secret{}, | |||
| &SecretList{}, | |||
| &ServiceAccount{}, | |||
| &ServiceAccountList{}, | |||
| &PersistentVolume{}, | |||
| &PersistentVolumeList{}, | |||
| &PersistentVolumeClaim{}, | |||
| &PersistentVolumeClaimList{}, | |||
| &PodAttachOptions{}, | |||
| &PodLogOptions{}, | |||
| &PodExecOptions{}, | |||
| &PodPortForwardOptions{}, | |||
| &PodProxyOptions{}, | |||
| &ComponentStatus{}, | |||
| &ComponentStatusList{}, | |||
| &SerializedReference{}, | |||
| &RangeAllocation{}, | |||
| &ConfigMap{}, | |||
| &ConfigMapList{}, | |||
| &EphemeralContainers{}, | |||
| ) | |||
| // Add common types | |||
| scheme.AddKnownTypes(SchemeGroupVersion, &metav1.Status{}) | |||
| // Add the watch version that applies | |||
| metav1.AddToGroupVersion(scheme, SchemeGroupVersion) | |||
| return nil | |||
| } | |||
| @@ -0,0 +1,59 @@ | |||
| /* | |||
| Copyright 2017 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1 | |||
| import ( | |||
| "k8s.io/apimachinery/pkg/api/resource" | |||
| ) | |||
| // Returns string version of ResourceName. | |||
| func (rn ResourceName) String() string { | |||
| return string(rn) | |||
| } | |||
| // Cpu returns the Cpu limit if specified. | |||
| func (rl *ResourceList) Cpu() *resource.Quantity { | |||
| return rl.Name(ResourceCPU, resource.DecimalSI) | |||
| } | |||
| // Memory returns the Memory limit if specified. | |||
| func (rl *ResourceList) Memory() *resource.Quantity { | |||
| return rl.Name(ResourceMemory, resource.BinarySI) | |||
| } | |||
| // Storage returns the Storage limit if specified. | |||
| func (rl *ResourceList) Storage() *resource.Quantity { | |||
| return rl.Name(ResourceStorage, resource.BinarySI) | |||
| } | |||
| // Pods returns the list of pods | |||
| func (rl *ResourceList) Pods() *resource.Quantity { | |||
| return rl.Name(ResourcePods, resource.DecimalSI) | |||
| } | |||
| // StorageEphemeral returns the list of ephemeral storage volumes, if any | |||
| func (rl *ResourceList) StorageEphemeral() *resource.Quantity { | |||
| return rl.Name(ResourceEphemeralStorage, resource.BinarySI) | |||
| } | |||
| // Name returns the resource with name if specified, otherwise it returns a nil quantity with default format. | |||
| func (rl *ResourceList) Name(name ResourceName, defaultFormat resource.Format) *resource.Quantity { | |||
| if val, ok := (*rl)[name]; ok { | |||
| return &val | |||
| } | |||
| return &resource.Quantity{Format: defaultFormat} | |||
| } | |||
| @@ -0,0 +1,181 @@ | |||
| /* | |||
| Copyright 2016 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1 | |||
| import ( | |||
| "encoding/json" | |||
| "time" | |||
| ) | |||
| const RFC3339Micro = "2006-01-02T15:04:05.000000Z07:00" | |||
| // MicroTime is version of Time with microsecond level precision. | |||
| // | |||
| // +protobuf.options.marshal=false | |||
| // +protobuf.as=Timestamp | |||
| // +protobuf.options.(gogoproto.goproto_stringer)=false | |||
| type MicroTime struct { | |||
| time.Time `protobuf:"-"` | |||
| } | |||
| // DeepCopy returns a deep-copy of the MicroTime value. The underlying time.Time | |||
| // type is effectively immutable in the time API, so it is safe to | |||
| // copy-by-assign, despite the presence of (unexported) Pointer fields. | |||
| func (t *MicroTime) DeepCopyInto(out *MicroTime) { | |||
| *out = *t | |||
| } | |||
| // NewMicroTime returns a wrapped instance of the provided time | |||
| func NewMicroTime(time time.Time) MicroTime { | |||
| return MicroTime{time} | |||
| } | |||
| // DateMicro returns the MicroTime corresponding to the supplied parameters | |||
| // by wrapping time.Date. | |||
| func DateMicro(year int, month time.Month, day, hour, min, sec, nsec int, loc *time.Location) MicroTime { | |||
| return MicroTime{time.Date(year, month, day, hour, min, sec, nsec, loc)} | |||
| } | |||
| // NowMicro returns the current local time. | |||
| func NowMicro() MicroTime { | |||
| return MicroTime{time.Now()} | |||
| } | |||
| // IsZero returns true if the value is nil or time is zero. | |||
| func (t *MicroTime) IsZero() bool { | |||
| if t == nil { | |||
| return true | |||
| } | |||
| return t.Time.IsZero() | |||
| } | |||
| // Before reports whether the time instant t is before u. | |||
| func (t *MicroTime) Before(u *MicroTime) bool { | |||
| if t != nil && u != nil { | |||
| return t.Time.Before(u.Time) | |||
| } | |||
| return false | |||
| } | |||
| // Equal reports whether the time instant t is equal to u. | |||
| func (t *MicroTime) Equal(u *MicroTime) bool { | |||
| if t == nil && u == nil { | |||
| return true | |||
| } | |||
| if t != nil && u != nil { | |||
| return t.Time.Equal(u.Time) | |||
| } | |||
| return false | |||
| } | |||
| // BeforeTime reports whether the time instant t is before second-lever precision u. | |||
| func (t *MicroTime) BeforeTime(u *Time) bool { | |||
| if t != nil && u != nil { | |||
| return t.Time.Before(u.Time) | |||
| } | |||
| return false | |||
| } | |||
| // EqualTime reports whether the time instant t is equal to second-lever precision u. | |||
| func (t *MicroTime) EqualTime(u *Time) bool { | |||
| if t == nil && u == nil { | |||
| return true | |||
| } | |||
| if t != nil && u != nil { | |||
| return t.Time.Equal(u.Time) | |||
| } | |||
| return false | |||
| } | |||
| // UnixMicro returns the local time corresponding to the given Unix time | |||
| // by wrapping time.Unix. | |||
| func UnixMicro(sec int64, nsec int64) MicroTime { | |||
| return MicroTime{time.Unix(sec, nsec)} | |||
| } | |||
| // UnmarshalJSON implements the json.Unmarshaller interface. | |||
| func (t *MicroTime) UnmarshalJSON(b []byte) error { | |||
| if len(b) == 4 && string(b) == "null" { | |||
| t.Time = time.Time{} | |||
| return nil | |||
| } | |||
| var str string | |||
| err := json.Unmarshal(b, &str) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| pt, err := time.Parse(RFC3339Micro, str) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| t.Time = pt.Local() | |||
| return nil | |||
| } | |||
| // UnmarshalQueryParameter converts from a URL query parameter value to an object | |||
| func (t *MicroTime) UnmarshalQueryParameter(str string) error { | |||
| if len(str) == 0 { | |||
| t.Time = time.Time{} | |||
| return nil | |||
| } | |||
| // Tolerate requests from older clients that used JSON serialization to build query params | |||
| if len(str) == 4 && str == "null" { | |||
| t.Time = time.Time{} | |||
| return nil | |||
| } | |||
| pt, err := time.Parse(RFC3339Micro, str) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| t.Time = pt.Local() | |||
| return nil | |||
| } | |||
| // MarshalJSON implements the json.Marshaler interface. | |||
| func (t MicroTime) MarshalJSON() ([]byte, error) { | |||
| if t.IsZero() { | |||
| // Encode unset/nil objects as JSON's "null". | |||
| return []byte("null"), nil | |||
| } | |||
| return json.Marshal(t.UTC().Format(RFC3339Micro)) | |||
| } | |||
| // OpenAPISchemaType is used by the kube-openapi generator when constructing | |||
| // the OpenAPI spec of this type. | |||
| // | |||
| // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators | |||
| func (_ MicroTime) OpenAPISchemaType() []string { return []string{"string"} } | |||
| // OpenAPISchemaFormat is used by the kube-openapi generator when constructing | |||
| // the OpenAPI spec of this type. | |||
| func (_ MicroTime) OpenAPISchemaFormat() string { return "date-time" } | |||
| // MarshalQueryParameter converts to a URL query parameter value | |||
| func (t MicroTime) MarshalQueryParameter() (string, error) { | |||
| if t.IsZero() { | |||
| // Encode unset/nil objects as an empty string | |||
| return "", nil | |||
| } | |||
| return t.UTC().Format(RFC3339Micro), nil | |||
| } | |||
| @@ -0,0 +1,182 @@ | |||
| /* | |||
| Copyright 2014 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1 | |||
| import ( | |||
| "encoding/json" | |||
| "time" | |||
| ) | |||
| // Time is a wrapper around time.Time which supports correct | |||
| // marshaling to YAML and JSON. Wrappers are provided for many | |||
| // of the factory methods that the time package offers. | |||
| // | |||
| // +protobuf.options.marshal=false | |||
| // +protobuf.as=Timestamp | |||
| // +protobuf.options.(gogoproto.goproto_stringer)=false | |||
| type Time struct { | |||
| time.Time `protobuf:"-"` | |||
| } | |||
| // DeepCopyInto creates a deep-copy of the Time value. The underlying time.Time | |||
| // type is effectively immutable in the time API, so it is safe to | |||
| // copy-by-assign, despite the presence of (unexported) Pointer fields. | |||
| func (t *Time) DeepCopyInto(out *Time) { | |||
| *out = *t | |||
| } | |||
| // NewTime returns a wrapped instance of the provided time | |||
| func NewTime(time time.Time) Time { | |||
| return Time{time} | |||
| } | |||
| // Date returns the Time corresponding to the supplied parameters | |||
| // by wrapping time.Date. | |||
| func Date(year int, month time.Month, day, hour, min, sec, nsec int, loc *time.Location) Time { | |||
| return Time{time.Date(year, month, day, hour, min, sec, nsec, loc)} | |||
| } | |||
| // Now returns the current local time. | |||
| func Now() Time { | |||
| return Time{time.Now()} | |||
| } | |||
| // IsZero returns true if the value is nil or time is zero. | |||
| func (t *Time) IsZero() bool { | |||
| if t == nil { | |||
| return true | |||
| } | |||
| return t.Time.IsZero() | |||
| } | |||
| // Before reports whether the time instant t is before u. | |||
| func (t *Time) Before(u *Time) bool { | |||
| if t != nil && u != nil { | |||
| return t.Time.Before(u.Time) | |||
| } | |||
| return false | |||
| } | |||
| // Equal reports whether the time instant t is equal to u. | |||
| func (t *Time) Equal(u *Time) bool { | |||
| if t == nil && u == nil { | |||
| return true | |||
| } | |||
| if t != nil && u != nil { | |||
| return t.Time.Equal(u.Time) | |||
| } | |||
| return false | |||
| } | |||
| // Unix returns the local time corresponding to the given Unix time | |||
| // by wrapping time.Unix. | |||
| func Unix(sec int64, nsec int64) Time { | |||
| return Time{time.Unix(sec, nsec)} | |||
| } | |||
| // Rfc3339Copy returns a copy of the Time at second-level precision. | |||
| func (t Time) Rfc3339Copy() Time { | |||
| copied, _ := time.Parse(time.RFC3339, t.Format(time.RFC3339)) | |||
| return Time{copied} | |||
| } | |||
| // UnmarshalJSON implements the json.Unmarshaller interface. | |||
| func (t *Time) UnmarshalJSON(b []byte) error { | |||
| if len(b) == 4 && string(b) == "null" { | |||
| t.Time = time.Time{} | |||
| return nil | |||
| } | |||
| var str string | |||
| err := json.Unmarshal(b, &str) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| pt, err := time.Parse(time.RFC3339, str) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| t.Time = pt.Local() | |||
| return nil | |||
| } | |||
| // UnmarshalQueryParameter converts from a URL query parameter value to an object | |||
| func (t *Time) UnmarshalQueryParameter(str string) error { | |||
| if len(str) == 0 { | |||
| t.Time = time.Time{} | |||
| return nil | |||
| } | |||
| // Tolerate requests from older clients that used JSON serialization to build query params | |||
| if len(str) == 4 && str == "null" { | |||
| t.Time = time.Time{} | |||
| return nil | |||
| } | |||
| pt, err := time.Parse(time.RFC3339, str) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| t.Time = pt.Local() | |||
| return nil | |||
| } | |||
| // MarshalJSON implements the json.Marshaler interface. | |||
| func (t Time) MarshalJSON() ([]byte, error) { | |||
| if t.IsZero() { | |||
| // Encode unset/nil objects as JSON's "null". | |||
| return []byte("null"), nil | |||
| } | |||
| buf := make([]byte, 0, len(time.RFC3339)+2) | |||
| buf = append(buf, '"') | |||
| // time cannot contain non escapable JSON characters | |||
| buf = t.UTC().AppendFormat(buf, time.RFC3339) | |||
| buf = append(buf, '"') | |||
| return buf, nil | |||
| } | |||
| // ToUnstructured implements the value.UnstructuredConverter interface. | |||
| func (t Time) ToUnstructured() interface{} { | |||
| if t.IsZero() { | |||
| return nil | |||
| } | |||
| buf := make([]byte, 0, len(time.RFC3339)) | |||
| buf = t.UTC().AppendFormat(buf, time.RFC3339) | |||
| return string(buf) | |||
| } | |||
| // OpenAPISchemaType is used by the kube-openapi generator when constructing | |||
| // the OpenAPI spec of this type. | |||
| // | |||
| // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators | |||
| func (_ Time) OpenAPISchemaType() []string { return []string{"string"} } | |||
| // OpenAPISchemaFormat is used by the kube-openapi generator when constructing | |||
| // the OpenAPI spec of this type. | |||
| func (_ Time) OpenAPISchemaFormat() string { return "date-time" } | |||
| // MarshalQueryParameter converts to a URL query parameter value | |||
| func (t Time) MarshalQueryParameter() (string, error) { | |||
| if t.IsZero() { | |||
| // Encode unset/nil objects as an empty string | |||
| return "", nil | |||
| } | |||
| return t.UTC().Format(time.RFC3339), nil | |||
| } | |||
| @@ -0,0 +1,685 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package kubernetes | |||
| import ( | |||
| "fmt" | |||
| corev1 "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server/kubernetes/client-go/kubernetes/typed/core/v1" | |||
| discovery "k8s.io/client-go/discovery" | |||
| admissionregistrationv1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1" | |||
| admissionregistrationv1beta1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1" | |||
| internalv1alpha1 "k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1" | |||
| appsv1 "k8s.io/client-go/kubernetes/typed/apps/v1" | |||
| appsv1beta1 "k8s.io/client-go/kubernetes/typed/apps/v1beta1" | |||
| appsv1beta2 "k8s.io/client-go/kubernetes/typed/apps/v1beta2" | |||
| authenticationv1 "k8s.io/client-go/kubernetes/typed/authentication/v1" | |||
| authenticationv1beta1 "k8s.io/client-go/kubernetes/typed/authentication/v1beta1" | |||
| authorizationv1 "k8s.io/client-go/kubernetes/typed/authorization/v1" | |||
| authorizationv1beta1 "k8s.io/client-go/kubernetes/typed/authorization/v1beta1" | |||
| autoscalingv1 "k8s.io/client-go/kubernetes/typed/autoscaling/v1" | |||
| autoscalingv2beta1 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1" | |||
| autoscalingv2beta2 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2" | |||
| batchv1 "k8s.io/client-go/kubernetes/typed/batch/v1" | |||
| batchv1beta1 "k8s.io/client-go/kubernetes/typed/batch/v1beta1" | |||
| certificatesv1 "k8s.io/client-go/kubernetes/typed/certificates/v1" | |||
| certificatesv1beta1 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" | |||
| coordinationv1 "k8s.io/client-go/kubernetes/typed/coordination/v1" | |||
| coordinationv1beta1 "k8s.io/client-go/kubernetes/typed/coordination/v1beta1" | |||
| discoveryv1 "k8s.io/client-go/kubernetes/typed/discovery/v1" | |||
| discoveryv1beta1 "k8s.io/client-go/kubernetes/typed/discovery/v1beta1" | |||
| eventsv1 "k8s.io/client-go/kubernetes/typed/events/v1" | |||
| eventsv1beta1 "k8s.io/client-go/kubernetes/typed/events/v1beta1" | |||
| extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" | |||
| flowcontrolv1alpha1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1" | |||
| flowcontrolv1beta1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1" | |||
| networkingv1 "k8s.io/client-go/kubernetes/typed/networking/v1" | |||
| networkingv1beta1 "k8s.io/client-go/kubernetes/typed/networking/v1beta1" | |||
| nodev1 "k8s.io/client-go/kubernetes/typed/node/v1" | |||
| nodev1alpha1 "k8s.io/client-go/kubernetes/typed/node/v1alpha1" | |||
| nodev1beta1 "k8s.io/client-go/kubernetes/typed/node/v1beta1" | |||
| policyv1 "k8s.io/client-go/kubernetes/typed/policy/v1" | |||
| policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" | |||
| rbacv1 "k8s.io/client-go/kubernetes/typed/rbac/v1" | |||
| rbacv1alpha1 "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1" | |||
| rbacv1beta1 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1" | |||
| schedulingv1 "k8s.io/client-go/kubernetes/typed/scheduling/v1" | |||
| schedulingv1alpha1 "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1" | |||
| schedulingv1beta1 "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1" | |||
| storagev1 "k8s.io/client-go/kubernetes/typed/storage/v1" | |||
| storagev1alpha1 "k8s.io/client-go/kubernetes/typed/storage/v1alpha1" | |||
| storagev1beta1 "k8s.io/client-go/kubernetes/typed/storage/v1beta1" | |||
| rest "k8s.io/client-go/rest" | |||
| flowcontrol "k8s.io/client-go/util/flowcontrol" | |||
| ) | |||
| type Interface interface { | |||
| Discovery() discovery.DiscoveryInterface | |||
| AdmissionregistrationV1() admissionregistrationv1.AdmissionregistrationV1Interface | |||
| AdmissionregistrationV1beta1() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface | |||
| InternalV1alpha1() internalv1alpha1.InternalV1alpha1Interface | |||
| AppsV1() appsv1.AppsV1Interface | |||
| AppsV1beta1() appsv1beta1.AppsV1beta1Interface | |||
| AppsV1beta2() appsv1beta2.AppsV1beta2Interface | |||
| AuthenticationV1() authenticationv1.AuthenticationV1Interface | |||
| AuthenticationV1beta1() authenticationv1beta1.AuthenticationV1beta1Interface | |||
| AuthorizationV1() authorizationv1.AuthorizationV1Interface | |||
| AuthorizationV1beta1() authorizationv1beta1.AuthorizationV1beta1Interface | |||
| AutoscalingV1() autoscalingv1.AutoscalingV1Interface | |||
| AutoscalingV2beta1() autoscalingv2beta1.AutoscalingV2beta1Interface | |||
| AutoscalingV2beta2() autoscalingv2beta2.AutoscalingV2beta2Interface | |||
| BatchV1() batchv1.BatchV1Interface | |||
| BatchV1beta1() batchv1beta1.BatchV1beta1Interface | |||
| CertificatesV1() certificatesv1.CertificatesV1Interface | |||
| CertificatesV1beta1() certificatesv1beta1.CertificatesV1beta1Interface | |||
| CoordinationV1beta1() coordinationv1beta1.CoordinationV1beta1Interface | |||
| CoordinationV1() coordinationv1.CoordinationV1Interface | |||
| CoreV1() corev1.CoreV1Interface | |||
| DiscoveryV1() discoveryv1.DiscoveryV1Interface | |||
| DiscoveryV1beta1() discoveryv1beta1.DiscoveryV1beta1Interface | |||
| EventsV1() eventsv1.EventsV1Interface | |||
| EventsV1beta1() eventsv1beta1.EventsV1beta1Interface | |||
| ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface | |||
| FlowcontrolV1alpha1() flowcontrolv1alpha1.FlowcontrolV1alpha1Interface | |||
| FlowcontrolV1beta1() flowcontrolv1beta1.FlowcontrolV1beta1Interface | |||
| NetworkingV1() networkingv1.NetworkingV1Interface | |||
| NetworkingV1beta1() networkingv1beta1.NetworkingV1beta1Interface | |||
| NodeV1() nodev1.NodeV1Interface | |||
| NodeV1alpha1() nodev1alpha1.NodeV1alpha1Interface | |||
| NodeV1beta1() nodev1beta1.NodeV1beta1Interface | |||
| PolicyV1() policyv1.PolicyV1Interface | |||
| PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface | |||
| RbacV1() rbacv1.RbacV1Interface | |||
| RbacV1beta1() rbacv1beta1.RbacV1beta1Interface | |||
| RbacV1alpha1() rbacv1alpha1.RbacV1alpha1Interface | |||
| SchedulingV1alpha1() schedulingv1alpha1.SchedulingV1alpha1Interface | |||
| SchedulingV1beta1() schedulingv1beta1.SchedulingV1beta1Interface | |||
| SchedulingV1() schedulingv1.SchedulingV1Interface | |||
| StorageV1beta1() storagev1beta1.StorageV1beta1Interface | |||
| StorageV1() storagev1.StorageV1Interface | |||
| StorageV1alpha1() storagev1alpha1.StorageV1alpha1Interface | |||
| } | |||
| // Clientset contains the clients for groups. Each group has exactly one | |||
| // version included in a Clientset. | |||
| type Clientset struct { | |||
| *discovery.DiscoveryClient | |||
| admissionregistrationV1 *admissionregistrationv1.AdmissionregistrationV1Client | |||
| admissionregistrationV1beta1 *admissionregistrationv1beta1.AdmissionregistrationV1beta1Client | |||
| internalV1alpha1 *internalv1alpha1.InternalV1alpha1Client | |||
| appsV1 *appsv1.AppsV1Client | |||
| appsV1beta1 *appsv1beta1.AppsV1beta1Client | |||
| appsV1beta2 *appsv1beta2.AppsV1beta2Client | |||
| authenticationV1 *authenticationv1.AuthenticationV1Client | |||
| authenticationV1beta1 *authenticationv1beta1.AuthenticationV1beta1Client | |||
| authorizationV1 *authorizationv1.AuthorizationV1Client | |||
| authorizationV1beta1 *authorizationv1beta1.AuthorizationV1beta1Client | |||
| autoscalingV1 *autoscalingv1.AutoscalingV1Client | |||
| autoscalingV2beta1 *autoscalingv2beta1.AutoscalingV2beta1Client | |||
| autoscalingV2beta2 *autoscalingv2beta2.AutoscalingV2beta2Client | |||
| batchV1 *batchv1.BatchV1Client | |||
| batchV1beta1 *batchv1beta1.BatchV1beta1Client | |||
| certificatesV1 *certificatesv1.CertificatesV1Client | |||
| certificatesV1beta1 *certificatesv1beta1.CertificatesV1beta1Client | |||
| coordinationV1beta1 *coordinationv1beta1.CoordinationV1beta1Client | |||
| coordinationV1 *coordinationv1.CoordinationV1Client | |||
| coreV1 *corev1.CoreV1Client | |||
| discoveryV1 *discoveryv1.DiscoveryV1Client | |||
| discoveryV1beta1 *discoveryv1beta1.DiscoveryV1beta1Client | |||
| eventsV1 *eventsv1.EventsV1Client | |||
| eventsV1beta1 *eventsv1beta1.EventsV1beta1Client | |||
| extensionsV1beta1 *extensionsv1beta1.ExtensionsV1beta1Client | |||
| flowcontrolV1alpha1 *flowcontrolv1alpha1.FlowcontrolV1alpha1Client | |||
| flowcontrolV1beta1 *flowcontrolv1beta1.FlowcontrolV1beta1Client | |||
| networkingV1 *networkingv1.NetworkingV1Client | |||
| networkingV1beta1 *networkingv1beta1.NetworkingV1beta1Client | |||
| nodeV1 *nodev1.NodeV1Client | |||
| nodeV1alpha1 *nodev1alpha1.NodeV1alpha1Client | |||
| nodeV1beta1 *nodev1beta1.NodeV1beta1Client | |||
| policyV1 *policyv1.PolicyV1Client | |||
| policyV1beta1 *policyv1beta1.PolicyV1beta1Client | |||
| rbacV1 *rbacv1.RbacV1Client | |||
| rbacV1beta1 *rbacv1beta1.RbacV1beta1Client | |||
| rbacV1alpha1 *rbacv1alpha1.RbacV1alpha1Client | |||
| schedulingV1alpha1 *schedulingv1alpha1.SchedulingV1alpha1Client | |||
| schedulingV1beta1 *schedulingv1beta1.SchedulingV1beta1Client | |||
| schedulingV1 *schedulingv1.SchedulingV1Client | |||
| storageV1beta1 *storagev1beta1.StorageV1beta1Client | |||
| storageV1 *storagev1.StorageV1Client | |||
| storageV1alpha1 *storagev1alpha1.StorageV1alpha1Client | |||
| } | |||
| // AdmissionregistrationV1 retrieves the AdmissionregistrationV1Client | |||
| func (c *Clientset) AdmissionregistrationV1() admissionregistrationv1.AdmissionregistrationV1Interface { | |||
| return c.admissionregistrationV1 | |||
| } | |||
| // AdmissionregistrationV1beta1 retrieves the AdmissionregistrationV1beta1Client | |||
| func (c *Clientset) AdmissionregistrationV1beta1() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface { | |||
| return c.admissionregistrationV1beta1 | |||
| } | |||
| // InternalV1alpha1 retrieves the InternalV1alpha1Client | |||
| func (c *Clientset) InternalV1alpha1() internalv1alpha1.InternalV1alpha1Interface { | |||
| return c.internalV1alpha1 | |||
| } | |||
| // AppsV1 retrieves the AppsV1Client | |||
| func (c *Clientset) AppsV1() appsv1.AppsV1Interface { | |||
| return c.appsV1 | |||
| } | |||
| // AppsV1beta1 retrieves the AppsV1beta1Client | |||
| func (c *Clientset) AppsV1beta1() appsv1beta1.AppsV1beta1Interface { | |||
| return c.appsV1beta1 | |||
| } | |||
| // AppsV1beta2 retrieves the AppsV1beta2Client | |||
| func (c *Clientset) AppsV1beta2() appsv1beta2.AppsV1beta2Interface { | |||
| return c.appsV1beta2 | |||
| } | |||
| // AuthenticationV1 retrieves the AuthenticationV1Client | |||
| func (c *Clientset) AuthenticationV1() authenticationv1.AuthenticationV1Interface { | |||
| return c.authenticationV1 | |||
| } | |||
| // AuthenticationV1beta1 retrieves the AuthenticationV1beta1Client | |||
| func (c *Clientset) AuthenticationV1beta1() authenticationv1beta1.AuthenticationV1beta1Interface { | |||
| return c.authenticationV1beta1 | |||
| } | |||
| // AuthorizationV1 retrieves the AuthorizationV1Client | |||
| func (c *Clientset) AuthorizationV1() authorizationv1.AuthorizationV1Interface { | |||
| return c.authorizationV1 | |||
| } | |||
| // AuthorizationV1beta1 retrieves the AuthorizationV1beta1Client | |||
| func (c *Clientset) AuthorizationV1beta1() authorizationv1beta1.AuthorizationV1beta1Interface { | |||
| return c.authorizationV1beta1 | |||
| } | |||
| // AutoscalingV1 retrieves the AutoscalingV1Client | |||
| func (c *Clientset) AutoscalingV1() autoscalingv1.AutoscalingV1Interface { | |||
| return c.autoscalingV1 | |||
| } | |||
| // AutoscalingV2beta1 retrieves the AutoscalingV2beta1Client | |||
| func (c *Clientset) AutoscalingV2beta1() autoscalingv2beta1.AutoscalingV2beta1Interface { | |||
| return c.autoscalingV2beta1 | |||
| } | |||
| // AutoscalingV2beta2 retrieves the AutoscalingV2beta2Client | |||
| func (c *Clientset) AutoscalingV2beta2() autoscalingv2beta2.AutoscalingV2beta2Interface { | |||
| return c.autoscalingV2beta2 | |||
| } | |||
| // BatchV1 retrieves the BatchV1Client | |||
| func (c *Clientset) BatchV1() batchv1.BatchV1Interface { | |||
| return c.batchV1 | |||
| } | |||
| // BatchV1beta1 retrieves the BatchV1beta1Client | |||
| func (c *Clientset) BatchV1beta1() batchv1beta1.BatchV1beta1Interface { | |||
| return c.batchV1beta1 | |||
| } | |||
| // CertificatesV1 retrieves the CertificatesV1Client | |||
| func (c *Clientset) CertificatesV1() certificatesv1.CertificatesV1Interface { | |||
| return c.certificatesV1 | |||
| } | |||
| // CertificatesV1beta1 retrieves the CertificatesV1beta1Client | |||
| func (c *Clientset) CertificatesV1beta1() certificatesv1beta1.CertificatesV1beta1Interface { | |||
| return c.certificatesV1beta1 | |||
| } | |||
| // CoordinationV1beta1 retrieves the CoordinationV1beta1Client | |||
| func (c *Clientset) CoordinationV1beta1() coordinationv1beta1.CoordinationV1beta1Interface { | |||
| return c.coordinationV1beta1 | |||
| } | |||
| // CoordinationV1 retrieves the CoordinationV1Client | |||
| func (c *Clientset) CoordinationV1() coordinationv1.CoordinationV1Interface { | |||
| return c.coordinationV1 | |||
| } | |||
| // CoreV1 retrieves the CoreV1Client | |||
| func (c *Clientset) CoreV1() corev1.CoreV1Interface { | |||
| return c.coreV1 | |||
| } | |||
| // DiscoveryV1 retrieves the DiscoveryV1Client | |||
| func (c *Clientset) DiscoveryV1() discoveryv1.DiscoveryV1Interface { | |||
| return c.discoveryV1 | |||
| } | |||
| // DiscoveryV1beta1 retrieves the DiscoveryV1beta1Client | |||
| func (c *Clientset) DiscoveryV1beta1() discoveryv1beta1.DiscoveryV1beta1Interface { | |||
| return c.discoveryV1beta1 | |||
| } | |||
| // EventsV1 retrieves the EventsV1Client | |||
| func (c *Clientset) EventsV1() eventsv1.EventsV1Interface { | |||
| return c.eventsV1 | |||
| } | |||
| // EventsV1beta1 retrieves the EventsV1beta1Client | |||
| func (c *Clientset) EventsV1beta1() eventsv1beta1.EventsV1beta1Interface { | |||
| return c.eventsV1beta1 | |||
| } | |||
| // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client | |||
| func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface { | |||
| return c.extensionsV1beta1 | |||
| } | |||
| // FlowcontrolV1alpha1 retrieves the FlowcontrolV1alpha1Client | |||
| func (c *Clientset) FlowcontrolV1alpha1() flowcontrolv1alpha1.FlowcontrolV1alpha1Interface { | |||
| return c.flowcontrolV1alpha1 | |||
| } | |||
| // FlowcontrolV1beta1 retrieves the FlowcontrolV1beta1Client | |||
| func (c *Clientset) FlowcontrolV1beta1() flowcontrolv1beta1.FlowcontrolV1beta1Interface { | |||
| return c.flowcontrolV1beta1 | |||
| } | |||
| // NetworkingV1 retrieves the NetworkingV1Client | |||
| func (c *Clientset) NetworkingV1() networkingv1.NetworkingV1Interface { | |||
| return c.networkingV1 | |||
| } | |||
| // NetworkingV1beta1 retrieves the NetworkingV1beta1Client | |||
| func (c *Clientset) NetworkingV1beta1() networkingv1beta1.NetworkingV1beta1Interface { | |||
| return c.networkingV1beta1 | |||
| } | |||
| // NodeV1 retrieves the NodeV1Client | |||
| func (c *Clientset) NodeV1() nodev1.NodeV1Interface { | |||
| return c.nodeV1 | |||
| } | |||
| // NodeV1alpha1 retrieves the NodeV1alpha1Client | |||
| func (c *Clientset) NodeV1alpha1() nodev1alpha1.NodeV1alpha1Interface { | |||
| return c.nodeV1alpha1 | |||
| } | |||
| // NodeV1beta1 retrieves the NodeV1beta1Client | |||
| func (c *Clientset) NodeV1beta1() nodev1beta1.NodeV1beta1Interface { | |||
| return c.nodeV1beta1 | |||
| } | |||
| // PolicyV1 retrieves the PolicyV1Client | |||
| func (c *Clientset) PolicyV1() policyv1.PolicyV1Interface { | |||
| return c.policyV1 | |||
| } | |||
| // PolicyV1beta1 retrieves the PolicyV1beta1Client | |||
| func (c *Clientset) PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface { | |||
| return c.policyV1beta1 | |||
| } | |||
| // RbacV1 retrieves the RbacV1Client | |||
| func (c *Clientset) RbacV1() rbacv1.RbacV1Interface { | |||
| return c.rbacV1 | |||
| } | |||
| // RbacV1beta1 retrieves the RbacV1beta1Client | |||
| func (c *Clientset) RbacV1beta1() rbacv1beta1.RbacV1beta1Interface { | |||
| return c.rbacV1beta1 | |||
| } | |||
| // RbacV1alpha1 retrieves the RbacV1alpha1Client | |||
| func (c *Clientset) RbacV1alpha1() rbacv1alpha1.RbacV1alpha1Interface { | |||
| return c.rbacV1alpha1 | |||
| } | |||
| // SchedulingV1alpha1 retrieves the SchedulingV1alpha1Client | |||
| func (c *Clientset) SchedulingV1alpha1() schedulingv1alpha1.SchedulingV1alpha1Interface { | |||
| return c.schedulingV1alpha1 | |||
| } | |||
| // SchedulingV1beta1 retrieves the SchedulingV1beta1Client | |||
| func (c *Clientset) SchedulingV1beta1() schedulingv1beta1.SchedulingV1beta1Interface { | |||
| return c.schedulingV1beta1 | |||
| } | |||
| // SchedulingV1 retrieves the SchedulingV1Client | |||
| func (c *Clientset) SchedulingV1() schedulingv1.SchedulingV1Interface { | |||
| return c.schedulingV1 | |||
| } | |||
| // StorageV1beta1 retrieves the StorageV1beta1Client | |||
| func (c *Clientset) StorageV1beta1() storagev1beta1.StorageV1beta1Interface { | |||
| return c.storageV1beta1 | |||
| } | |||
| // StorageV1 retrieves the StorageV1Client | |||
| func (c *Clientset) StorageV1() storagev1.StorageV1Interface { | |||
| return c.storageV1 | |||
| } | |||
| // StorageV1alpha1 retrieves the StorageV1alpha1Client | |||
| func (c *Clientset) StorageV1alpha1() storagev1alpha1.StorageV1alpha1Interface { | |||
| return c.storageV1alpha1 | |||
| } | |||
| // Discovery retrieves the DiscoveryClient | |||
| func (c *Clientset) Discovery() discovery.DiscoveryInterface { | |||
| if c == nil { | |||
| return nil | |||
| } | |||
| return c.DiscoveryClient | |||
| } | |||
| // NewForConfig creates a new Clientset for the given config. | |||
| // If config's RateLimiter is not set and QPS and Burst are acceptable, | |||
| // NewForConfig will generate a rate-limiter in configShallowCopy. | |||
| func NewForConfig(c *rest.Config) (*Clientset, error) { | |||
| configShallowCopy := *c | |||
| if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { | |||
| if configShallowCopy.Burst <= 0 { | |||
| return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") | |||
| } | |||
| configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) | |||
| } | |||
| var cs Clientset | |||
| var err error | |||
| cs.admissionregistrationV1, err = admissionregistrationv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.admissionregistrationV1beta1, err = admissionregistrationv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.internalV1alpha1, err = internalv1alpha1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.appsV1beta1, err = appsv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.appsV1beta2, err = appsv1beta2.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.authenticationV1, err = authenticationv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.authenticationV1beta1, err = authenticationv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.authorizationV1, err = authorizationv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.authorizationV1beta1, err = authorizationv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.autoscalingV1, err = autoscalingv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.autoscalingV2beta1, err = autoscalingv2beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.autoscalingV2beta2, err = autoscalingv2beta2.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.batchV1, err = batchv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.batchV1beta1, err = batchv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.certificatesV1, err = certificatesv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.certificatesV1beta1, err = certificatesv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.coordinationV1beta1, err = coordinationv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.coordinationV1, err = coordinationv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.coreV1, err = corev1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.discoveryV1, err = discoveryv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.discoveryV1beta1, err = discoveryv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.eventsV1, err = eventsv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.eventsV1beta1, err = eventsv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.extensionsV1beta1, err = extensionsv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.flowcontrolV1alpha1, err = flowcontrolv1alpha1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.flowcontrolV1beta1, err = flowcontrolv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.networkingV1, err = networkingv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.networkingV1beta1, err = networkingv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.nodeV1, err = nodev1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.nodeV1alpha1, err = nodev1alpha1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.nodeV1beta1, err = nodev1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.policyV1, err = policyv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.policyV1beta1, err = policyv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.rbacV1, err = rbacv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.rbacV1beta1, err = rbacv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.rbacV1alpha1, err = rbacv1alpha1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.schedulingV1alpha1, err = schedulingv1alpha1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.schedulingV1beta1, err = schedulingv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.schedulingV1, err = schedulingv1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.storageV1beta1, err = storagev1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.storageV1, err = storagev1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.storageV1alpha1, err = storagev1alpha1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return &cs, nil | |||
| } | |||
| // NewForConfigOrDie creates a new Clientset for the given config and | |||
| // panics if there is an error in the config. | |||
| func NewForConfigOrDie(c *rest.Config) *Clientset { | |||
| var cs Clientset | |||
| cs.admissionregistrationV1 = admissionregistrationv1.NewForConfigOrDie(c) | |||
| cs.admissionregistrationV1beta1 = admissionregistrationv1beta1.NewForConfigOrDie(c) | |||
| cs.internalV1alpha1 = internalv1alpha1.NewForConfigOrDie(c) | |||
| cs.appsV1 = appsv1.NewForConfigOrDie(c) | |||
| cs.appsV1beta1 = appsv1beta1.NewForConfigOrDie(c) | |||
| cs.appsV1beta2 = appsv1beta2.NewForConfigOrDie(c) | |||
| cs.authenticationV1 = authenticationv1.NewForConfigOrDie(c) | |||
| cs.authenticationV1beta1 = authenticationv1beta1.NewForConfigOrDie(c) | |||
| cs.authorizationV1 = authorizationv1.NewForConfigOrDie(c) | |||
| cs.authorizationV1beta1 = authorizationv1beta1.NewForConfigOrDie(c) | |||
| cs.autoscalingV1 = autoscalingv1.NewForConfigOrDie(c) | |||
| cs.autoscalingV2beta1 = autoscalingv2beta1.NewForConfigOrDie(c) | |||
| cs.autoscalingV2beta2 = autoscalingv2beta2.NewForConfigOrDie(c) | |||
| cs.batchV1 = batchv1.NewForConfigOrDie(c) | |||
| cs.batchV1beta1 = batchv1beta1.NewForConfigOrDie(c) | |||
| cs.certificatesV1 = certificatesv1.NewForConfigOrDie(c) | |||
| cs.certificatesV1beta1 = certificatesv1beta1.NewForConfigOrDie(c) | |||
| cs.coordinationV1beta1 = coordinationv1beta1.NewForConfigOrDie(c) | |||
| cs.coordinationV1 = coordinationv1.NewForConfigOrDie(c) | |||
| cs.coreV1 = corev1.NewForConfigOrDie(c) | |||
| cs.discoveryV1 = discoveryv1.NewForConfigOrDie(c) | |||
| cs.discoveryV1beta1 = discoveryv1beta1.NewForConfigOrDie(c) | |||
| cs.eventsV1 = eventsv1.NewForConfigOrDie(c) | |||
| cs.eventsV1beta1 = eventsv1beta1.NewForConfigOrDie(c) | |||
| cs.extensionsV1beta1 = extensionsv1beta1.NewForConfigOrDie(c) | |||
| cs.flowcontrolV1alpha1 = flowcontrolv1alpha1.NewForConfigOrDie(c) | |||
| cs.flowcontrolV1beta1 = flowcontrolv1beta1.NewForConfigOrDie(c) | |||
| cs.networkingV1 = networkingv1.NewForConfigOrDie(c) | |||
| cs.networkingV1beta1 = networkingv1beta1.NewForConfigOrDie(c) | |||
| cs.nodeV1 = nodev1.NewForConfigOrDie(c) | |||
| cs.nodeV1alpha1 = nodev1alpha1.NewForConfigOrDie(c) | |||
| cs.nodeV1beta1 = nodev1beta1.NewForConfigOrDie(c) | |||
| cs.policyV1 = policyv1.NewForConfigOrDie(c) | |||
| cs.policyV1beta1 = policyv1beta1.NewForConfigOrDie(c) | |||
| cs.rbacV1 = rbacv1.NewForConfigOrDie(c) | |||
| cs.rbacV1beta1 = rbacv1beta1.NewForConfigOrDie(c) | |||
| cs.rbacV1alpha1 = rbacv1alpha1.NewForConfigOrDie(c) | |||
| cs.schedulingV1alpha1 = schedulingv1alpha1.NewForConfigOrDie(c) | |||
| cs.schedulingV1beta1 = schedulingv1beta1.NewForConfigOrDie(c) | |||
| cs.schedulingV1 = schedulingv1.NewForConfigOrDie(c) | |||
| cs.storageV1beta1 = storagev1beta1.NewForConfigOrDie(c) | |||
| cs.storageV1 = storagev1.NewForConfigOrDie(c) | |||
| cs.storageV1alpha1 = storagev1alpha1.NewForConfigOrDie(c) | |||
| cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) | |||
| return &cs | |||
| } | |||
| // New creates a new Clientset for the given RESTClient. | |||
| func New(c rest.Interface) *Clientset { | |||
| var cs Clientset | |||
| cs.admissionregistrationV1 = admissionregistrationv1.New(c) | |||
| cs.admissionregistrationV1beta1 = admissionregistrationv1beta1.New(c) | |||
| cs.internalV1alpha1 = internalv1alpha1.New(c) | |||
| cs.appsV1 = appsv1.New(c) | |||
| cs.appsV1beta1 = appsv1beta1.New(c) | |||
| cs.appsV1beta2 = appsv1beta2.New(c) | |||
| cs.authenticationV1 = authenticationv1.New(c) | |||
| cs.authenticationV1beta1 = authenticationv1beta1.New(c) | |||
| cs.authorizationV1 = authorizationv1.New(c) | |||
| cs.authorizationV1beta1 = authorizationv1beta1.New(c) | |||
| cs.autoscalingV1 = autoscalingv1.New(c) | |||
| cs.autoscalingV2beta1 = autoscalingv2beta1.New(c) | |||
| cs.autoscalingV2beta2 = autoscalingv2beta2.New(c) | |||
| cs.batchV1 = batchv1.New(c) | |||
| cs.batchV1beta1 = batchv1beta1.New(c) | |||
| cs.certificatesV1 = certificatesv1.New(c) | |||
| cs.certificatesV1beta1 = certificatesv1beta1.New(c) | |||
| cs.coordinationV1beta1 = coordinationv1beta1.New(c) | |||
| cs.coordinationV1 = coordinationv1.New(c) | |||
| cs.coreV1 = corev1.New(c) | |||
| cs.discoveryV1 = discoveryv1.New(c) | |||
| cs.discoveryV1beta1 = discoveryv1beta1.New(c) | |||
| cs.eventsV1 = eventsv1.New(c) | |||
| cs.eventsV1beta1 = eventsv1beta1.New(c) | |||
| cs.extensionsV1beta1 = extensionsv1beta1.New(c) | |||
| cs.flowcontrolV1alpha1 = flowcontrolv1alpha1.New(c) | |||
| cs.flowcontrolV1beta1 = flowcontrolv1beta1.New(c) | |||
| cs.networkingV1 = networkingv1.New(c) | |||
| cs.networkingV1beta1 = networkingv1beta1.New(c) | |||
| cs.nodeV1 = nodev1.New(c) | |||
| cs.nodeV1alpha1 = nodev1alpha1.New(c) | |||
| cs.nodeV1beta1 = nodev1beta1.New(c) | |||
| cs.policyV1 = policyv1.New(c) | |||
| cs.policyV1beta1 = policyv1beta1.New(c) | |||
| cs.rbacV1 = rbacv1.New(c) | |||
| cs.rbacV1beta1 = rbacv1beta1.New(c) | |||
| cs.rbacV1alpha1 = rbacv1alpha1.New(c) | |||
| cs.schedulingV1alpha1 = schedulingv1alpha1.New(c) | |||
| cs.schedulingV1beta1 = schedulingv1beta1.New(c) | |||
| cs.schedulingV1 = schedulingv1.New(c) | |||
| cs.storageV1beta1 = storagev1beta1.New(c) | |||
| cs.storageV1 = storagev1.New(c) | |||
| cs.storageV1alpha1 = storagev1alpha1.New(c) | |||
| cs.DiscoveryClient = discovery.NewDiscoveryClient(c) | |||
| return &cs | |||
| } | |||
| @@ -0,0 +1,90 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package v1 | |||
| import ( | |||
| v1 "k8s.io/api/core/v1" | |||
| "k8s.io/client-go/kubernetes/scheme" | |||
| rest "k8s.io/client-go/rest" | |||
| ) | |||
| type CoreV1Interface interface { | |||
| RESTClient() rest.Interface | |||
| PodsGetter | |||
| } | |||
| // CoreV1Client is used to interact with features provided by the group. | |||
| type CoreV1Client struct { | |||
| restClient rest.Interface | |||
| } | |||
| func (c *CoreV1Client) Pods(namespace string) PodInterface { | |||
| //TODO implement me | |||
| return newPods(c, namespace) | |||
| } | |||
| // NewForConfig creates a new CoreV1Client for the given config. | |||
| func NewForConfig(c *rest.Config) (*CoreV1Client, error) { | |||
| config := *c | |||
| if err := setConfigDefaults(&config); err != nil { | |||
| return nil, err | |||
| } | |||
| client, err := rest.RESTClientFor(&config) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return &CoreV1Client{client}, nil | |||
| } | |||
| // NewForConfigOrDie creates a new CoreV1Client for the given config and | |||
| // panics if there is an error in the config. | |||
| func NewForConfigOrDie(c *rest.Config) *CoreV1Client { | |||
| client, err := NewForConfig(c) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| return client | |||
| } | |||
| // New creates a new CoreV1Client for the given RESTClient. | |||
| func New(c rest.Interface) *CoreV1Client { | |||
| return &CoreV1Client{c} | |||
| } | |||
| func setConfigDefaults(config *rest.Config) error { | |||
| gv := v1.SchemeGroupVersion | |||
| config.GroupVersion = &gv | |||
| config.APIPath = "/api" | |||
| config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() | |||
| if config.UserAgent == "" { | |||
| config.UserAgent = rest.DefaultKubernetesUserAgent() | |||
| } | |||
| return nil | |||
| } | |||
| // RESTClient returns a RESTClient that is used to communicate | |||
| // with API server by this client implementation. | |||
| func (c *CoreV1Client) RESTClient() rest.Interface { | |||
| if c == nil { | |||
| return nil | |||
| } | |||
| return c.restClient | |||
| } | |||
| @@ -0,0 +1,532 @@ | |||
| package v1 | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "context" | |||
| json "encoding/json" | |||
| "errors" | |||
| "flag" | |||
| "fmt" | |||
| "github.com/golang/glog" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "strconv" | |||
| "time" | |||
| v1 "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server/kubernetes/api/core/v1" | |||
| types "k8s.io/apimachinery/pkg/types" | |||
| watch "k8s.io/apimachinery/pkg/watch" | |||
| corev1 "k8s.io/client-go/applyconfigurations/core/v1" | |||
| scheme "k8s.io/client-go/kubernetes/scheme" | |||
| rest "k8s.io/client-go/rest" | |||
| ) | |||
| // PodsGetter has a method to return a PodInterface. | |||
| // A group's client should implement this interface. | |||
| type PodsGetter interface { | |||
| Pods(namespace string) PodInterface | |||
| } | |||
| // PodInterface has methods to work with Pod resources. | |||
| type PodInterface interface { | |||
| Create(ctx context.Context, pod *v1.Pod, opts metav1.CreateOptions) (*v1.Pod, error) | |||
| Update(ctx context.Context, pod *v1.Pod, opts metav1.UpdateOptions) (*v1.Pod, error) | |||
| UpdateStatus(ctx context.Context, pod *v1.Pod, opts metav1.UpdateOptions) (*v1.Pod, error) | |||
| Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error | |||
| DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error | |||
| Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Pod, error) | |||
| List(ctx context.Context, pod *v1.Pod, opts metav1.ListOptions) (*v1.PodList, error) | |||
| Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) | |||
| Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Pod, err error) | |||
| Apply(ctx context.Context, pod *corev1.PodApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Pod, err error) | |||
| ApplyStatus(ctx context.Context, pod *corev1.PodApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Pod, err error) | |||
| GetEphemeralContainers(ctx context.Context, podName string, options metav1.GetOptions) (*v1.EphemeralContainers, error) | |||
| UpdateEphemeralContainers(ctx context.Context, podName string, ephemeralContainers *v1.EphemeralContainers, opts metav1.UpdateOptions) (*v1.EphemeralContainers, error) | |||
| PodExpansion | |||
| } | |||
| // pods implements PodInterface | |||
| type pods struct { | |||
| client rest.Interface | |||
| ns string | |||
| } | |||
| // newPods returns a Pods | |||
| func newPods(c *CoreV1Client, namespace string) *pods { | |||
| return &pods{ | |||
| client: c.RESTClient(), | |||
| ns: namespace, | |||
| } | |||
| } | |||
| // Get takes name of the pod, and returns the corresponding pod object, and an error if there is any. | |||
| func (c *pods) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Pod, err error) { | |||
| result = &v1.Pod{} | |||
| err = c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(name). | |||
| VersionedParams(&options, scheme.ParameterCodec). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| // List takes label and field selectors, and returns the list of Pods that match those selectors. | |||
| func (c *pods) List(ctx context.Context, pod *v1.Pod, opts metav1.ListOptions) (result *v1.PodList, err error) { | |||
| providerId := pod.Spec.ProviderId | |||
| regionId := pod.Spec.RegionId | |||
| accountName := pod.Spec.AccountName | |||
| provider := pbtenant.CloudProvider(providerId) | |||
| requestPCM := &pbpod.ListPodReq{ | |||
| RequestSource: "huawei", | |||
| Provider: provider, | |||
| Namespace: "pcm", | |||
| } | |||
| resp, err := server.ListPod(nil, requestPCM) | |||
| //trans PCM response pod set to Ali ContainerGroup set | |||
| var pods = make([]v1.Pod, len(resp.Pods)) | |||
| for k := range resp.Pods { | |||
| podId := resp.Pods[k].PodId | |||
| containerName := resp.Pods[k].ContainerName | |||
| containerImage := resp.Pods[k].ContainerImage | |||
| podName := resp.Pods[k].PodName | |||
| container := v1.Container{ | |||
| Name: containerName, | |||
| Image: containerImage, | |||
| } | |||
| var containers []v1.Container | |||
| containers = append(containers, container) | |||
| podSpec := v1.PodSpec{ | |||
| ProviderId: providerId, | |||
| RegionId: regionId, | |||
| AccountName: accountName, | |||
| Containers: containers, | |||
| } | |||
| pod := v1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{APIVersion: "core/V1", Kind: "Pod"}, | |||
| ObjectMeta: metav1.ObjectMeta{Name: podName, Namespace: "pcm", UID: types.UID(podId)}, | |||
| Spec: podSpec, | |||
| Status: v1.PodStatus{}, | |||
| } | |||
| pods[k] = pod | |||
| } | |||
| result = &v1.PodList{ | |||
| TypeMeta: metav1.TypeMeta{}, | |||
| ListMeta: metav1.ListMeta{}, | |||
| Items: pods, | |||
| } | |||
| return | |||
| } | |||
| // Watch returns a watch.Interface that watches the requested pods. | |||
| func (c *pods) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { | |||
| var timeout time.Duration | |||
| if opts.TimeoutSeconds != nil { | |||
| timeout = time.Duration(*opts.TimeoutSeconds) * time.Second | |||
| } | |||
| opts.Watch = true | |||
| return c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| VersionedParams(&opts, scheme.ParameterCodec). | |||
| Timeout(timeout). | |||
| Watch(ctx) | |||
| } | |||
| // Create takes the representation of a pod and creates it. Returns the server's representation of the pod, and an error, if there is any. | |||
| func (c *pods) Create(ctx context.Context, pod *v1.Pod, opts metav1.CreateOptions) (result *v1.Pod, err error) { | |||
| result = &v1.Pod{} | |||
| provider := pbtenant.CloudProvider(pod.Spec.ProviderId) | |||
| var configFile string | |||
| flag.StringVar(&configFile, "conf", "configs/config.yaml", "config.yaml") | |||
| flag.Parse() | |||
| defer glog.Flush() | |||
| if err := tenanter.LoadCloudConfigsFromFile(configFile); err != nil { | |||
| if !errors.Is(err, tenanter.ErrLoadTenanterFileEmpty) { | |||
| glog.Fatalf("tenanter.LoadCloudConfigsFromFile error %+v", err) | |||
| } | |||
| glog.Warningf("tenanter.LoadCloudConfigsFromFile empty file path %s", configFile) | |||
| } | |||
| glog.Infof("load tenant from file finished") | |||
| tenanters, err := tenanter.GetTenanters(provider) | |||
| var regionId int32 | |||
| var cpuPod string | |||
| var memoryPod string | |||
| //华为(K8S)与其他厂商的CPU单位和格式有区别 | |||
| switch pod.Spec.ProviderId { | |||
| case 0: | |||
| regionId, _ = tenanter.GetAliRegionId(pod.Spec.RegionId) | |||
| cpuPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Cpu().MilliValue()/1000, 10) | |||
| memoryPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Memory().MilliValue()/1024/1024/1024/1000, 10) | |||
| case 1: | |||
| regionId, _ = tenanter.GetTencentRegionId(pod.Spec.RegionId) | |||
| cpuPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Cpu().MilliValue()/1000, 10) | |||
| memoryPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Memory().MilliValue()/1024/1024/1024/1000, 10) | |||
| case 2: | |||
| regionId, _ = tenanter.GetHuaweiRegionId(pod.Spec.RegionId) | |||
| cpuPod = pod.Spec.Containers[0].Resources.Limits.Cpu().String() | |||
| memoryPod = pod.Spec.Containers[0].Resources.Limits.Memory().String() | |||
| case 3: | |||
| regionId, _ = tenanter.GetK8SRegionId(pod.Spec.RegionId) | |||
| cpuPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Cpu().MilliValue()/1000, 10) | |||
| memoryPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Memory().MilliValue()/1024/1024/1024/1000, 10) | |||
| } | |||
| requestPCM := &pbpod.CreatePodReq{ | |||
| RequestSource: "huawei", | |||
| Provider: provider, | |||
| AccountName: tenanters[0].AccountName(), | |||
| PodName: pod.Name, | |||
| RegionId: regionId, | |||
| ContainerImage: pod.Spec.Containers[0].Image, | |||
| ContainerName: pod.Spec.Containers[0].Name, | |||
| CpuPod: cpuPod, | |||
| MemoryPod: memoryPod, | |||
| SecurityGroupId: "sg-6qlun7hd", | |||
| SubnetId: "subnet-mnwfg2fk", | |||
| VpcId: "vpc-rkwt40g5", | |||
| Namespace: pod.ObjectMeta.Namespace, | |||
| } | |||
| server.CreatePod(nil, requestPCM) | |||
| result = &v1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{}, | |||
| ObjectMeta: metav1.ObjectMeta{}, | |||
| Spec: v1.PodSpec{ | |||
| ProviderId: pod.Spec.ProviderId, | |||
| RegionId: pod.Spec.RegionId, | |||
| AccountName: pod.Spec.AccountName, | |||
| Volumes: nil, | |||
| InitContainers: nil, | |||
| Containers: pod.Spec.Containers, | |||
| EphemeralContainers: nil, | |||
| RestartPolicy: "", | |||
| TerminationGracePeriodSeconds: nil, | |||
| ActiveDeadlineSeconds: nil, | |||
| DNSPolicy: "", | |||
| NodeSelector: nil, | |||
| ServiceAccountName: "", | |||
| DeprecatedServiceAccount: "", | |||
| AutomountServiceAccountToken: nil, | |||
| NodeName: "", | |||
| HostNetwork: false, | |||
| HostPID: false, | |||
| HostIPC: false, | |||
| ShareProcessNamespace: nil, | |||
| SecurityContext: nil, | |||
| ImagePullSecrets: nil, | |||
| Hostname: "", | |||
| Subdomain: "", | |||
| Affinity: nil, | |||
| SchedulerName: "", | |||
| Tolerations: nil, | |||
| HostAliases: nil, | |||
| PriorityClassName: "", | |||
| Priority: nil, | |||
| DNSConfig: nil, | |||
| ReadinessGates: nil, | |||
| RuntimeClassName: nil, | |||
| EnableServiceLinks: nil, | |||
| PreemptionPolicy: nil, | |||
| Overhead: nil, | |||
| TopologySpreadConstraints: nil, | |||
| SetHostnameAsFQDN: nil, | |||
| }, | |||
| Status: v1.PodStatus{ | |||
| Phase: "", | |||
| Conditions: nil, | |||
| Message: "", | |||
| Reason: "", | |||
| NominatedNodeName: "", | |||
| HostIP: "", | |||
| PodIP: "", | |||
| PodIPs: nil, | |||
| StartTime: nil, | |||
| InitContainerStatuses: nil, | |||
| ContainerStatuses: nil, | |||
| QOSClass: "", | |||
| EphemeralContainerStatuses: nil, | |||
| }, | |||
| } | |||
| return | |||
| } | |||
| // Update takes the representation of a pod and updates it. Returns the server's representation of the pod, and an error, if there is any. | |||
| func (c *pods) Update(ctx context.Context, pod *v1.Pod, opts metav1.UpdateOptions) (result *v1.Pod, err error) { | |||
| result = &v1.Pod{} | |||
| provider := pbtenant.CloudProvider(pod.Spec.ProviderId) | |||
| var configFile string | |||
| flag.StringVar(&configFile, "confHuawei", "configs/config.yaml", "config.yaml") | |||
| flag.Parse() | |||
| defer glog.Flush() | |||
| if err := tenanter.LoadCloudConfigsFromFile(configFile); err != nil { | |||
| if !errors.Is(err, tenanter.ErrLoadTenanterFileEmpty) { | |||
| glog.Fatalf("tenanter.LoadCloudConfigsFromFile error %+v", err) | |||
| } | |||
| glog.Warningf("tenanter.LoadCloudConfigsFromFile empty file path %s", configFile) | |||
| } | |||
| glog.Infof("load tenant from file finished") | |||
| tenanters, err := tenanter.GetTenanters(provider) | |||
| var regionId int32 | |||
| var cpuPod string | |||
| var memoryPod string | |||
| //华为(K8S)与其他厂商的CPU单位和格式有区别 | |||
| switch pod.Spec.ProviderId { | |||
| case 0: | |||
| regionId, _ = tenanter.GetAliRegionId(pod.Spec.RegionId) | |||
| cpuPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Cpu().MilliValue()/1000, 10) | |||
| memoryPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Memory().MilliValue()/1024/1024/1024/1000, 10) | |||
| case 1: | |||
| regionId, _ = tenanter.GetTencentRegionId(pod.Spec.RegionId) | |||
| cpuPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Cpu().MilliValue()/1000, 10) | |||
| memoryPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Memory().MilliValue()/1024/1024/1024/1000, 10) | |||
| case 2: | |||
| regionId, _ = tenanter.GetHuaweiRegionId(pod.Spec.RegionId) | |||
| cpuPod = pod.Spec.Containers[0].Resources.Limits.Cpu().String() | |||
| memoryPod = pod.Spec.Containers[0].Resources.Limits.Memory().String() | |||
| case 3: | |||
| regionId, _ = tenanter.GetK8SRegionId(pod.Spec.RegionId) | |||
| cpuPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Cpu().MilliValue()/1000, 10) | |||
| memoryPod = strconv.FormatInt(pod.Spec.Containers[0].Resources.Limits.Memory().MilliValue()/1024/1024/1024/1000, 10) | |||
| } | |||
| requestPCM := &pbpod.UpdatePodReq{ | |||
| RequestSource: "huawei", | |||
| Provider: provider, | |||
| PcmId: string(pod.ObjectMeta.UID), | |||
| PodId: string(pod.ObjectMeta.UID), | |||
| AccountName: tenanters[0].AccountName(), | |||
| PodName: pod.Name, | |||
| RegionId: regionId, | |||
| ContainerImage: pod.Spec.Containers[0].Image, | |||
| ContainerName: pod.Spec.Containers[0].Name, | |||
| CpuPod: cpuPod, | |||
| MemoryPod: memoryPod, | |||
| Namespace: pod.ObjectMeta.Namespace, | |||
| } | |||
| server.UpdatePod(nil, requestPCM) | |||
| result = &v1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{}, | |||
| ObjectMeta: metav1.ObjectMeta{}, | |||
| Spec: v1.PodSpec{ | |||
| ProviderId: pod.Spec.ProviderId, | |||
| RegionId: pod.Spec.RegionId, | |||
| AccountName: pod.Spec.AccountName, | |||
| Volumes: nil, | |||
| InitContainers: nil, | |||
| Containers: pod.Spec.Containers, | |||
| EphemeralContainers: nil, | |||
| RestartPolicy: "", | |||
| TerminationGracePeriodSeconds: nil, | |||
| ActiveDeadlineSeconds: nil, | |||
| DNSPolicy: "", | |||
| NodeSelector: nil, | |||
| ServiceAccountName: "", | |||
| DeprecatedServiceAccount: "", | |||
| AutomountServiceAccountToken: nil, | |||
| NodeName: "", | |||
| HostNetwork: false, | |||
| HostPID: false, | |||
| HostIPC: false, | |||
| ShareProcessNamespace: nil, | |||
| SecurityContext: nil, | |||
| ImagePullSecrets: nil, | |||
| Hostname: "", | |||
| Subdomain: "", | |||
| Affinity: nil, | |||
| SchedulerName: "", | |||
| Tolerations: nil, | |||
| HostAliases: nil, | |||
| PriorityClassName: "", | |||
| Priority: nil, | |||
| DNSConfig: nil, | |||
| ReadinessGates: nil, | |||
| RuntimeClassName: nil, | |||
| EnableServiceLinks: nil, | |||
| PreemptionPolicy: nil, | |||
| Overhead: nil, | |||
| TopologySpreadConstraints: nil, | |||
| SetHostnameAsFQDN: nil, | |||
| }, | |||
| Status: v1.PodStatus{ | |||
| Phase: "", | |||
| Conditions: nil, | |||
| Message: "", | |||
| Reason: "", | |||
| NominatedNodeName: "", | |||
| HostIP: "", | |||
| PodIP: "", | |||
| PodIPs: nil, | |||
| StartTime: nil, | |||
| InitContainerStatuses: nil, | |||
| ContainerStatuses: nil, | |||
| QOSClass: "", | |||
| EphemeralContainerStatuses: nil, | |||
| }, | |||
| } | |||
| return | |||
| } | |||
| // UpdateStatus was generated because the type contains a Status member. | |||
| // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). | |||
| func (c *pods) UpdateStatus(ctx context.Context, pod *v1.Pod, opts metav1.UpdateOptions) (result *v1.Pod, err error) { | |||
| result = &v1.Pod{} | |||
| err = c.client.Put(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(pod.Name). | |||
| SubResource("status"). | |||
| VersionedParams(&opts, scheme.ParameterCodec). | |||
| Body(pod). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| // Delete takes name of the pod and deletes it. Returns an error if one occurs. | |||
| func (c *pods) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { | |||
| return c.client.Delete(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(name). | |||
| Body(&opts). | |||
| Do(ctx). | |||
| Error() | |||
| } | |||
| // DeleteCollection deletes a collection of objects. | |||
| func (c *pods) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { | |||
| var timeout time.Duration | |||
| if listOpts.TimeoutSeconds != nil { | |||
| timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second | |||
| } | |||
| return c.client.Delete(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| VersionedParams(&listOpts, scheme.ParameterCodec). | |||
| Timeout(timeout). | |||
| Body(&opts). | |||
| Do(ctx). | |||
| Error() | |||
| } | |||
| // Patch applies the patch and returns the patched pod. | |||
| func (c *pods) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Pod, err error) { | |||
| result = &v1.Pod{} | |||
| err = c.client.Patch(pt). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(name). | |||
| SubResource(subresources...). | |||
| VersionedParams(&opts, scheme.ParameterCodec). | |||
| Body(data). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| // Apply takes the given apply declarative configuration, applies it and returns the applied pod. | |||
| func (c *pods) Apply(ctx context.Context, pod *corev1.PodApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Pod, err error) { | |||
| if pod == nil { | |||
| return nil, fmt.Errorf("pod provided to Apply must not be nil") | |||
| } | |||
| patchOpts := opts.ToPatchOptions() | |||
| data, err := json.Marshal(pod) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| name := pod.Name | |||
| if name == nil { | |||
| return nil, fmt.Errorf("pod.Name must be provided to Apply") | |||
| } | |||
| result = &v1.Pod{} | |||
| err = c.client.Patch(types.ApplyPatchType). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(*name). | |||
| VersionedParams(&patchOpts, scheme.ParameterCodec). | |||
| Body(data). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| // ApplyStatus was generated because the type contains a Status member. | |||
| // Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). | |||
| func (c *pods) ApplyStatus(ctx context.Context, pod *corev1.PodApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Pod, err error) { | |||
| if pod == nil { | |||
| return nil, fmt.Errorf("pod provided to Apply must not be nil") | |||
| } | |||
| patchOpts := opts.ToPatchOptions() | |||
| data, err := json.Marshal(pod) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| name := pod.Name | |||
| if name == nil { | |||
| return nil, fmt.Errorf("pod.Name must be provided to Apply") | |||
| } | |||
| result = &v1.Pod{} | |||
| err = c.client.Patch(types.ApplyPatchType). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(*name). | |||
| SubResource("status"). | |||
| VersionedParams(&patchOpts, scheme.ParameterCodec). | |||
| Body(data). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| // GetEphemeralContainers takes name of the pod, and returns the corresponding v1.EphemeralContainers object, and an error if there is any. | |||
| func (c *pods) GetEphemeralContainers(ctx context.Context, podName string, options metav1.GetOptions) (result *v1.EphemeralContainers, err error) { | |||
| result = &v1.EphemeralContainers{} | |||
| err = c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(podName). | |||
| SubResource("ephemeralcontainers"). | |||
| VersionedParams(&options, scheme.ParameterCodec). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| // UpdateEphemeralContainers takes the top resource name and the representation of a ephemeralContainers and updates it. Returns the server's representation of the ephemeralContainers, and an error, if there is any. | |||
| func (c *pods) UpdateEphemeralContainers(ctx context.Context, podName string, ephemeralContainers *v1.EphemeralContainers, opts metav1.UpdateOptions) (result *v1.EphemeralContainers, err error) { | |||
| result = &v1.EphemeralContainers{} | |||
| err = c.client.Put(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| Name(podName). | |||
| SubResource("ephemeralcontainers"). | |||
| VersionedParams(&opts, scheme.ParameterCodec). | |||
| Body(ephemeralContainers). | |||
| Do(ctx). | |||
| Into(result) | |||
| return | |||
| } | |||
| @@ -0,0 +1,64 @@ | |||
| /* | |||
| Copyright 2016 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1 | |||
| import ( | |||
| "context" | |||
| v1 "k8s.io/api/core/v1" | |||
| policy "k8s.io/api/policy/v1beta1" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/apimachinery/pkg/util/net" | |||
| "k8s.io/client-go/kubernetes/scheme" | |||
| restclient "k8s.io/client-go/rest" | |||
| ) | |||
| // The PodExpansion interface allows manually adding extra methods to the PodInterface. | |||
| type PodExpansion interface { | |||
| Bind(ctx context.Context, binding *v1.Binding, opts metav1.CreateOptions) error | |||
| Evict(ctx context.Context, eviction *policy.Eviction) error | |||
| GetLogs(name string, opts *v1.PodLogOptions) *restclient.Request | |||
| ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper | |||
| } | |||
| // Bind applies the provided binding to the named pod in the current namespace (binding.Namespace is ignored). | |||
| func (c *pods) Bind(ctx context.Context, binding *v1.Binding, opts metav1.CreateOptions) error { | |||
| return c.client.Post().Namespace(c.ns).Resource("pods").Name(binding.Name).VersionedParams(&opts, scheme.ParameterCodec).SubResource("binding").Body(binding).Do(ctx).Error() | |||
| } | |||
| func (c *pods) Evict(ctx context.Context, eviction *policy.Eviction) error { | |||
| return c.client.Post().Namespace(c.ns).Resource("pods").Name(eviction.Name).SubResource("eviction").Body(eviction).Do(ctx).Error() | |||
| } | |||
| // Get constructs a request for getting the logs for a pod | |||
| func (c *pods) GetLogs(name string, opts *v1.PodLogOptions) *restclient.Request { | |||
| return c.client.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, scheme.ParameterCodec) | |||
| } | |||
| // ProxyGet returns a response of the pod by calling it through the proxy. | |||
| func (c *pods) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { | |||
| request := c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("pods"). | |||
| SubResource("proxy"). | |||
| Name(net.JoinSchemeNamePort(scheme, name, port)). | |||
| Suffix(path) | |||
| for k, v := range params { | |||
| request = request.Param(k, v) | |||
| } | |||
| return request | |||
| } | |||
| @@ -6,10 +6,10 @@ import ( | |||
| "fmt" | |||
| "sync" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod/service" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/service" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| @@ -9,10 +9,10 @@ import ( | |||
| "strconv" | |||
| "sync" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| var aliClientMutex sync.Mutex | |||
| @@ -12,16 +12,16 @@ import ( | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| corev1 "k8s.io/api/core/v1" | |||
| huaweicci "k8s.io/client-go/kubernetes" | |||
| "k8s.io/client-go/tools/clientcmd" | |||
| "k8s.io/client-go/tools/clientcmd/api" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| ) | |||
| var huaweiClientMutex sync.Mutex | |||
| @@ -1,13 +1,13 @@ | |||
| package poder | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "context" | |||
| "fmt" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| corev1 "k8s.io/api/core/v1" | |||
| "k8s.io/apimachinery/pkg/api/resource" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| @@ -1,10 +1,10 @@ | |||
| package poder | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| @@ -7,14 +7,14 @@ import ( | |||
| "github.com/golang/glog" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "github.com/pkg/errors" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| tencenteks "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| ) | |||
| var tencentClientMutex sync.Mutex | |||
| @@ -4,12 +4,12 @@ import ( | |||
| "context" | |||
| "sync" | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/vm/service/ecser" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/vm/service/ecser" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| //CreateMultipleEcs 创建多云ECS | |||
| @@ -1,9 +1,9 @@ | |||
| package ecs | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "testing" | |||
| ) | |||
| @@ -1,8 +1,8 @@ | |||
| package ecs | |||
| import ( | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "os" | |||
| "testing" | |||
| ) | |||
| @@ -4,6 +4,9 @@ import ( | |||
| "context" | |||
| "sync" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| openapi "github.com/alibabacloud-go/darabonba-openapi/client" | |||
| string_ "github.com/alibabacloud-go/darabonba-string/client" | |||
| aliecs "github.com/alibabacloud-go/ecs-20140526/v2/client" | |||
| @@ -11,9 +14,6 @@ import ( | |||
| "github.com/alibabacloud-go/tea/tea" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| var aliClientMutex sync.Mutex | |||
| @@ -10,10 +10,10 @@ package ecser | |||
| // awsec2 "github.com/aws/aws-sdk-go-v2/service/ec2" | |||
| // "github.com/pkg/errors" | |||
| // | |||
| // "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| // "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| // | |||
| // "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| // "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| // "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| // "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| //) | |||
| // | |||
| //type AwsEcs struct { | |||
| @@ -3,9 +3,9 @@ package ecser | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| @@ -1,10 +1,10 @@ | |||
| package ecser | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "testing" | |||
| ) | |||
| @@ -1,6 +1,9 @@ | |||
| package ecser | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "context" | |||
| "fmt" | |||
| "github.com/harvester/harvester/pkg/apis/harvesterhci.io/v1beta1" | |||
| @@ -8,9 +11,6 @@ import ( | |||
| "github.com/longhorn/longhorn-manager/util" | |||
| "github.com/pkg/errors" | |||
| "github.com/sirupsen/logrus" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| v1 "k8s.io/api/core/v1" | |||
| "k8s.io/apimachinery/pkg/api/resource" | |||
| k8smetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| @@ -4,6 +4,9 @@ import ( | |||
| "context" | |||
| "strconv" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| string_ "github.com/alibabacloud-go/darabonba-string/client" | |||
| util "github.com/alibabacloud-go/tea-utils/service" | |||
| "github.com/alibabacloud-go/tea/tea" | |||
| @@ -16,9 +19,6 @@ import ( | |||
| iammodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" | |||
| iamregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| type HuaweiEcs struct { | |||
| @@ -1,8 +1,8 @@ | |||
| package ecser | |||
| import ( | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "os" | |||
| "testing" | |||
| ) | |||
| @@ -4,6 +4,9 @@ import ( | |||
| "context" | |||
| "strconv" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| string_ "github.com/alibabacloud-go/darabonba-string/client" | |||
| util "github.com/alibabacloud-go/tea-utils/service" | |||
| "github.com/alibabacloud-go/tea/tea" | |||
| @@ -12,9 +15,6 @@ import ( | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| type TencentCvm struct { | |||
| @@ -1,10 +1,10 @@ | |||
| package server | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| ) | |||
| type Server struct { | |||
| @@ -3,8 +3,8 @@ package server | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/vm/server/ecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/vm/server/ecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "github.com/golang/glog" | |||
| "google.golang.org/grpc/codes" | |||
| @@ -1,10 +1,10 @@ | |||
| package server | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod/server" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "github.com/golang/glog" | |||
| "google.golang.org/grpc/codes" | |||
| @@ -1,7 +1,7 @@ | |||
| package tenanter | |||
| import ( | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "os" | |||
| "testing" | |||
| ) | |||
| @@ -3,7 +3,7 @@ package tenanter | |||
| import ( | |||
| "strings" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| @@ -12,7 +12,7 @@ var ( | |||
| ErrNoExistAliRegionId = errors.New("region id not exist in ali") | |||
| ErrNoExistTencentRegionId = errors.New("region id not exist in tencent") | |||
| ErrNoExistHuaweiRegionId = errors.New("region id not exist in huawei") | |||
| ErrNoExistAwsRegionId = errors.New("region id not exist in aws") | |||
| ErrNoExistK8SRegionId = errors.New("region id not exist in k8s") | |||
| ) | |||
| type Region interface { | |||
| @@ -122,7 +122,7 @@ func GetTencentRegionId(regionName string) (int32, error) { | |||
| regionName = "tc_" + strings.ReplaceAll(regionName, "-", "_") | |||
| id, ok := pbtenant.TencentRegionId_value[regionName] | |||
| if !ok || regionName == "" { | |||
| return 0, errors.WithMessagef(ErrNoExistAliRegionId, "input region id is %s", regionName) | |||
| return 0, errors.WithMessagef(ErrNoExistTencentRegionId, "input region id is %s", regionName) | |||
| } | |||
| return id, nil | |||
| } | |||
| @@ -140,18 +140,18 @@ func GetHuaweiRegionName(regionId int32) (string, error) { | |||
| // GetHuaweiRegionId prefix huawei | |||
| func GetHuaweiRegionId(regionName string) (int32, error) { | |||
| regionName = "hw_" + strings.ReplaceAll(regionName, "-", "_") | |||
| id, ok := pbtenant.AliRegionId_value[regionName] | |||
| id, ok := pbtenant.HuaweiRegionId_value[regionName] | |||
| if !ok || regionName == "" { | |||
| return 0, errors.WithMessagef(ErrNoExistAliRegionId, "input region id is %s", regionName) | |||
| return 0, errors.WithMessagef(ErrNoExistHuaweiRegionId, "input region id is %s", regionName) | |||
| } | |||
| return id, nil | |||
| } | |||
| // GetK8SRegionName prefix ali_ | |||
| func GetK8SRegionName(regionId int32) (string, error) { | |||
| name, ok := pbtenant.AliRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.AliRegionId_ali_all) { | |||
| return "", errors.WithMessagef(ErrNoExistAliRegionId, "input region id is %d", regionId) | |||
| name, ok := pbtenant.K8SRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.K8SRegionId_k8s_all) { | |||
| return "", errors.WithMessagef(ErrNoExistK8SRegionId, "input region id is %d", regionId) | |||
| } | |||
| region := strings.ReplaceAll(name, "_", "-") | |||
| return region[4:], nil | |||
| @@ -161,13 +161,3 @@ func GetK8SRegionName(regionId int32) (string, error) { | |||
| func GetK8SRegionId(regionName string) (int32, error) { | |||
| return 0, nil | |||
| } | |||
| // GetAwsRegionName prefix aws_ | |||
| func GetAwsRegionName(regionId int32) (string, error) { | |||
| name, ok := pbtenant.AwsRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.AwsRegionId_aws_all) { | |||
| return "", errors.WithMessagef(ErrNoExistAwsRegionId, "input region id is %d", regionId) | |||
| } | |||
| region := strings.ReplaceAll(name, "_", "-") | |||
| return region[4:], nil | |||
| } | |||
| @@ -3,7 +3,7 @@ package tenanter | |||
| import ( | |||
| "testing" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| func TestGetAllRegionIds(t *testing.T) { | |||
| @@ -1,10 +1,10 @@ | |||
| package tenanter | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "encoding/json" | |||
| "flag" | |||
| "github.com/golang/glog" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "io/ioutil" | |||
| "os" | |||
| "sync" | |||
| @@ -0,0 +1,186 @@ | |||
| package main | |||
| // | |||
| //import ( | |||
| // "context" | |||
| // "fmt" | |||
| // "github.com/pkg/errors" | |||
| // corev1 "k8s.io/api/core/v1" | |||
| // "k8s.io/apimachinery/pkg/api/resource" | |||
| // metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| // "k8s.io/client-go/kubernetes" | |||
| // huaweicci "k8s.io/client-go/kubernetes" | |||
| // "k8s.io/client-go/tools/clientcmd" | |||
| // "k8s.io/client-go/tools/clientcmd/api" | |||
| //) | |||
| // | |||
| //const ( | |||
| // apiVersion = "client.authentication.k8s.io/v1beta1" | |||
| // // 云容器实例 CCI,参考https://developer.huaweicloud.com/endpoint | |||
| // cciEndpoint = "https://cci.cn-east-3.myhuaweicloud.com" | |||
| // // 统一身份认证服务 IAM,参考https://developer.huaweicloud.com/endpoint | |||
| // iamEndpoint = "https://iam.cn-east-3.myhuaweicloud.com" | |||
| // // 地区和终端节点,参考https://developer.huaweicloud.com/endpoint | |||
| // projectName = "cn-east-3" | |||
| // // 获取AK/SK参考: https://support.huaweicloud.com/devg-cci/cci_kubectl_01.html#cci_kubectl_01__section17023744719 | |||
| // ak = "ATQTIWUT9K66VRMMXKVY" | |||
| // sk = "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy" | |||
| //) | |||
| // | |||
| //// NewClient 通过AK/SK认证创建Clientset | |||
| //func NewClient() (*kubernetes.Clientset, error) { | |||
| // config, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| // if err != nil { | |||
| // return nil, err | |||
| // } | |||
| // var optionArgs []string | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName)) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--token-only=false")) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak)) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk)) | |||
| // config.ExecProvider = &api.ExecConfig{ | |||
| // Command: "cci-iam-authenticator", | |||
| // APIVersion: apiVersion, | |||
| // Args: append([]string{"token"}, optionArgs...), | |||
| // Env: make([]api.ExecEnvVar, 0), | |||
| // } | |||
| // return kubernetes.NewForConfig(config) | |||
| //} | |||
| // | |||
| //func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) { | |||
| // cli, _ := NewClient() | |||
| // | |||
| // pod := corev1.Pod{ | |||
| // TypeMeta: metav1.TypeMeta{ | |||
| // APIVersion: "core/V1", | |||
| // Kind: "Pod", | |||
| // }, | |||
| // ObjectMeta: metav1.ObjectMeta{ | |||
| // Name: "hw-sdk-test", | |||
| // Namespace: "pcm", | |||
| // Labels: map[string]string{"name": "test_api"}, | |||
| // }, | |||
| // Spec: corev1.PodSpec{ | |||
| // RestartPolicy: corev1.RestartPolicyAlways, | |||
| // Containers: []corev1.Container{ | |||
| // { | |||
| // Name: "pcm-sdk-huawei-container", | |||
| // Image: "library/nginx:stable-alpine-perl", | |||
| // Resources: corev1.ResourceRequirements{ | |||
| // Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| // corev1.ResourceCPU: resource.MustParse("500m"), | |||
| // corev1.ResourceMemory: resource.MustParse("1Gi"), | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // Status: corev1.PodStatus{}, | |||
| // } | |||
| // | |||
| // resp, err := cli.CoreV1().Pods("pcm").Create(context.TODO(), &pod, metav1.CreateOptions{}) | |||
| // if err != nil { | |||
| // return nil, errors.Wrap(err, "Huaweiyun CreatePod error") | |||
| // } | |||
| // | |||
| // return &corev1.Pod{ | |||
| // TypeMeta: resp.TypeMeta, | |||
| // ObjectMeta: resp.ObjectMeta, | |||
| // Spec: resp.Spec, | |||
| // Status: resp.Status, | |||
| // }, nil | |||
| //} | |||
| // | |||
| //// UpdatePod 删除Pod | |||
| //func UpdatePod(client *kubernetes.Clientset) error { | |||
| // pod := corev1.Pod{ | |||
| // TypeMeta: metav1.TypeMeta{ | |||
| // APIVersion: "core/V1", | |||
| // Kind: "Pod", | |||
| // }, | |||
| // ObjectMeta: metav1.ObjectMeta{ | |||
| // Name: "hw-sdk-test", | |||
| // Namespace: "pcm", | |||
| // Labels: map[string]string{"name": "test_api222"}, | |||
| // }, | |||
| // Spec: corev1.PodSpec{ | |||
| // RestartPolicy: corev1.RestartPolicyAlways, | |||
| // Containers: []corev1.Container{ | |||
| // { | |||
| // Name: "pcm-sdk-huawei-container2", | |||
| // Image: "library/nginx:stable-alpine-perl", | |||
| // Resources: corev1.ResourceRequirements{ | |||
| // Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| // corev1.ResourceCPU: resource.MustParse("500m"), | |||
| // corev1.ResourceMemory: resource.MustParse("1Gi"), | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // Status: corev1.PodStatus{}, | |||
| // } | |||
| // | |||
| // client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{}) | |||
| // return nil | |||
| //} | |||
| // | |||
| //// DeletePod 删除Pod | |||
| //func DeletePod(client *kubernetes.Clientset) error { | |||
| // return client.CoreV1().Pods("pcm").Delete(context.TODO(), "podName", metav1.DeleteOptions{}) | |||
| //} | |||
| // | |||
| //// ListPod 查询Pod | |||
| //func ListPod(client *kubernetes.Clientset) (*corev1.PodList, error) { | |||
| // | |||
| // podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), metav1.ListOptions{}) | |||
| // println(podList.Items[0].Name) | |||
| // return podList, nil | |||
| //} | |||
| //func main() { | |||
| // // 有多种认证方式,具体请参考 | |||
| // //《使用cci-iam-authenticator进行认证并创建client》,https://support.huaweicloud.com/sdkreference-cci/cci_09_0004.html | |||
| // cciConfig, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| // var optionArgs []string | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName)) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak)) | |||
| // optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk)) | |||
| // cciConfig.ExecProvider = &api.ExecConfig{ | |||
| // Command: "cci-iam-authenticator", | |||
| // APIVersion: apiVersion, | |||
| // Args: append([]string{"token"}, optionArgs...), | |||
| // Env: make([]api.ExecEnvVar, 0), | |||
| // } | |||
| // cs, err := huaweicci.NewForConfig(cciConfig) | |||
| // | |||
| // //fmt.Println("start to create Pod") | |||
| // //_, err = CreatePod(cs) | |||
| // //if err != nil { | |||
| // // panic(err) | |||
| // //} | |||
| // //fmt.Println("Pod created") | |||
| // // | |||
| // //fmt.Println("start to get Pod details") | |||
| // //_, err = ListPod(cs) | |||
| // //if err != nil { | |||
| // // panic(err) | |||
| // //} | |||
| // //fmt.Println("Pod details got") | |||
| // // | |||
| // fmt.Println("start to update Pod") | |||
| // err = UpdatePod(cs) | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // fmt.Println("Pod updated") | |||
| // // | |||
| // //fmt.Println("start to delete Pod") | |||
| // //err = DeletePod(cs) | |||
| // //if err != nil { | |||
| // // panic(err) | |||
| // //} | |||
| // //fmt.Println("Pod deleted") | |||
| // | |||
| //} | |||
| @@ -1 +0,0 @@ | |||
| package examples | |||
| @@ -1,8 +1,8 @@ | |||
| package main | |||
| import ( | |||
| pcm_pod_ali "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server/ali" | |||
| "github.com/alibabacloud-go/tea/tea" | |||
| pcm_pod_ali "gitlink.org.cn/JCCE/PCM/adaptor/pod/server/ali" | |||
| "os" | |||
| ) | |||
| @@ -30,9 +30,9 @@ func _main(args []*string) (_err error) { | |||
| createContainerGroupsRequest := pcm_pod_ali.CreateContainerGroupRequest{ | |||
| RpcRequest: nil, | |||
| //ali:cn-hangzhou tc:ap-shanghai hw: k8s | |||
| RegionId: "cn-hangzhou", | |||
| ProviderId: 3, | |||
| //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 | |||
| RegionId: "cn-east-3", | |||
| ProviderId: 2, | |||
| Namespace: "pcm", | |||
| ContainerGroupName: "sdk-alitohuawei", | |||
| Container: &containers, | |||
| @@ -0,0 +1,197 @@ | |||
| package main | |||
| import ( | |||
| corev1 "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server/kubernetes/api/core/v1" | |||
| "code.gitlink.org.cn/JCCE/PCM/adaptor/pod/server/kubernetes/client-go/kubernetes" | |||
| "context" | |||
| "fmt" | |||
| "github.com/pkg/errors" | |||
| "k8s.io/apimachinery/pkg/api/resource" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/client-go/tools/clientcmd" | |||
| "k8s.io/client-go/tools/clientcmd/api" | |||
| ) | |||
| const ( | |||
| apiVersion = "client.authentication.k8s.io/v1beta1" | |||
| // 云容器实例 CCI,参考https://developer.huaweicloud.com/endpoint | |||
| cciEndpoint = "https://cci.cn-east-3.myhuaweicloud.com" | |||
| // 统一身份认证服务 IAM,参考https://developer.huaweicloud.com/endpoint | |||
| iamEndpoint = "https://iam.cn-east-3.myhuaweicloud.com" | |||
| // 地区和终端节点,参考https://developer.huaweicloud.com/endpoint | |||
| projectName = "cn-east-3" | |||
| // 获取AK/SK参考: https://support.huaweicloud.com/devg-cci/cci_kubectl_01.html#cci_kubectl_01__section17023744719 | |||
| ak = "ATQTIWUT9K66VRMMXKVY" | |||
| sk = "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy" | |||
| ) | |||
| // NewClient 通过AK/SK认证创建Clientset | |||
| func NewClient() (*kubernetes.Clientset, error) { | |||
| config, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| var optionArgs []string | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--token-only=false")) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk)) | |||
| config.ExecProvider = &api.ExecConfig{ | |||
| Command: "cci-iam-authenticator", | |||
| APIVersion: apiVersion, | |||
| Args: append([]string{"token"}, optionArgs...), | |||
| Env: make([]api.ExecEnvVar, 0), | |||
| } | |||
| return kubernetes.NewForConfig(config) | |||
| } | |||
| func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) { | |||
| cli, _ := NewClient() | |||
| pod := corev1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{ | |||
| APIVersion: "core/V1", | |||
| Kind: "Pod", | |||
| }, | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Name: "hw-sdk-hwk8s01", | |||
| Namespace: "pcm", | |||
| Labels: map[string]string{"name": "test_api"}, | |||
| }, | |||
| Spec: corev1.PodSpec{ | |||
| ProviderId: 0, | |||
| //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 | |||
| RegionId: "cn-hangzhou", | |||
| RestartPolicy: corev1.RestartPolicyAlways, | |||
| Containers: []corev1.Container{ | |||
| { | |||
| Name: "sdk-hwk8s01-container", | |||
| Image: "registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/alpine:3.5", | |||
| Resources: corev1.ResourceRequirements{ | |||
| Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse("1000m"), | |||
| corev1.ResourceMemory: resource.MustParse("2Gi"), | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| Status: corev1.PodStatus{}, | |||
| } | |||
| resp, err := cli.CoreV1().Pods("pcm").Create(context.TODO(), &pod, metav1.CreateOptions{}) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Huaweiyun CreatePod error") | |||
| } | |||
| return &corev1.Pod{ | |||
| TypeMeta: resp.TypeMeta, | |||
| ObjectMeta: resp.ObjectMeta, | |||
| Spec: resp.Spec, | |||
| Status: resp.Status, | |||
| }, nil | |||
| } | |||
| // UpdatePod 更新Pod | |||
| func UpdatePod(client *kubernetes.Clientset) error { | |||
| pod := corev1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{ | |||
| APIVersion: "core/V1", | |||
| Kind: "Pod", | |||
| }, | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Name: "hw-sdk-test002", | |||
| Namespace: "pcm", | |||
| UID: "eci-bp123wba1qv9xymntd24", | |||
| Labels: map[string]string{"name": "test_api222"}, | |||
| }, | |||
| Spec: corev1.PodSpec{ | |||
| ProviderId: 0, | |||
| //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 | |||
| RegionId: "cn-hangzhou", | |||
| RestartPolicy: corev1.RestartPolicyAlways, | |||
| Containers: []corev1.Container{ | |||
| { | |||
| Name: "pcm-sdk-huawei-contai", | |||
| Image: "nginx:latest", | |||
| Resources: corev1.ResourceRequirements{ | |||
| Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse("2000m"), | |||
| corev1.ResourceMemory: resource.MustParse("1Gi"), | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| Status: corev1.PodStatus{}, | |||
| } | |||
| client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{}) | |||
| return nil | |||
| } | |||
| // DeletePod 删除Pod | |||
| func DeletePod(client *kubernetes.Clientset) error { | |||
| return client.CoreV1().Pods("pcm").Delete(context.TODO(), "podName", metav1.DeleteOptions{}) | |||
| } | |||
| // ListPod 查询Pod | |||
| func ListPod(client *kubernetes.Clientset) (*corev1.PodList, error) { | |||
| pod := corev1.Pod{ | |||
| Spec: corev1.PodSpec{ | |||
| ProviderId: 0, | |||
| //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 | |||
| //RegionId: "ap-guangzhou", | |||
| }, | |||
| } | |||
| podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), &pod, metav1.ListOptions{}) | |||
| return podList, nil | |||
| } | |||
| func main() { | |||
| // 有多种认证方式,具体请参考 | |||
| //《使用cci-iam-authenticator进行认证并创建client》,https://support.huaweicloud.com/sdkreference-cci/cci_09_0004.html | |||
| cciConfig, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| var optionArgs []string | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk)) | |||
| cciConfig.ExecProvider = &api.ExecConfig{ | |||
| Command: "cci-iam-authenticator", | |||
| APIVersion: apiVersion, | |||
| Args: append([]string{"token"}, optionArgs...), | |||
| Env: make([]api.ExecEnvVar, 0), | |||
| } | |||
| cs, err := kubernetes.NewForConfig(cciConfig) | |||
| //fmt.Println("start to create Pod") | |||
| //_, err = CreatePod(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("Pod created") | |||
| //fmt.Println("start to get Pod details") | |||
| //_, err = ListPod(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("Pod details got") | |||
| fmt.Println("start to update Pod") | |||
| err = UpdatePod(cs) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Println("Pod updated") | |||
| // | |||
| //fmt.Println("start to delete Pod") | |||
| //err = DeletePod(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("Pod deleted") | |||
| } | |||
| @@ -1,11 +1,10 @@ | |||
| module gitlink.org.cn/JCCE/PCM | |||
| module code.gitlink.org.cn/JCCE/PCM | |||
| go 1.17 | |||
| require ( | |||
| github.com/alibabacloud-go/darabonba-openapi v0.1.4 | |||
| github.com/alibabacloud-go/darabonba-string v1.0.0 | |||
| github.com/alibabacloud-go/eci-20180808/v2 v2.0.2 | |||
| github.com/alibabacloud-go/ecs-20140526/v2 v2.1.0 | |||
| github.com/alibabacloud-go/tea v1.1.15 | |||
| github.com/alibabacloud-go/tea-utils v1.3.9 | |||
| @@ -1,7 +1,7 @@ | |||
| syntax = "proto3"; | |||
| package demo; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/gen/idl/demo"; | |||
| option go_package = "code.gitlink.org.cn/JCCE/PCM/lan_trans/gen/idl/demo"; | |||
| import "google/api/annotations.proto"; | |||
| import "protoc-gen-openapiv2/options/annotations.proto"; | |||
| @@ -1,7 +1,7 @@ | |||
| syntax = "proto3"; | |||
| package pbecs; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs"; | |||
| option go_package = "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs"; | |||
| import "idl/pbtenant/tenant.proto"; | |||
| import "google/api/annotations.proto"; | |||
| @@ -1,7 +1,7 @@ | |||
| syntax = "proto3"; | |||
| package pbpod; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod"; | |||
| option go_package = "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod"; | |||
| import "idl/pbtenant/tenant.proto"; | |||
| import "google/api/annotations.proto"; | |||
| @@ -1,7 +1,7 @@ | |||
| syntax = "proto3"; | |||
| package pbtenant; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant"; | |||
| option go_package = "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant"; | |||
| import "google/api/annotations.proto"; | |||
| import "protoc-gen-openapiv2/options/annotations.proto"; | |||
| @@ -173,7 +173,7 @@ service TenantService { | |||
| option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = { | |||
| description : "所有云租户的认证服务" | |||
| external_docs : { | |||
| url : "https://gitlink.org.cn/JCCE/PCM" | |||
| url : "https://code.gitlink.org.cn/JCCE/PCM" | |||
| description: "Find out more about PCM" | |||
| } | |||
| }; | |||
| @@ -7,7 +7,7 @@ | |||
| package pbecs | |||
| import ( | |||
| pbtenant "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| pbtenant "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| _ "google.golang.org/genproto/googleapis/api/annotations" | |||
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||
| @@ -7,7 +7,7 @@ | |||
| package pbpod | |||
| import ( | |||
| pbtenant "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| pbtenant "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| _ "google.golang.org/genproto/googleapis/api/annotations" | |||
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||
| @@ -1,13 +1,13 @@ | |||
| package main | |||
| import ( | |||
| "code.gitlink.org.cn/JCCE/PCM/common/server" | |||
| "code.gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "code.gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "context" | |||
| "flag" | |||
| "gitlink.org.cn/JCCE/PCM/common/server" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "net" | |||
| "net/http" | |||