| @@ -1,65 +1,17 @@ | |||
| [pod_create_conf] | |||
| #测试账号ak | |||
| access_key = | |||
| secret_key = | |||
| #region 对应阿里 RegionId(阿里必需) | |||
| region_id=cn-hangzhou | |||
| #容器实例名称(pod名) 对应阿里 ContainerGroupName(阿里必需) | |||
| container_group_name=pcm-test-ali-pod | |||
| #镜像地址 对应阿里 Container.Image(阿里必需) | |||
| container_image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx | |||
| #容器名称 对应阿里 Container.Name(阿里必需) | |||
| container_name=pcm-test-ali-container | |||
| region_id=cn-hangzhou #region 对应阿里 RegionId(阿里必需) | |||
| container_group_name=pcm-test-ali-pod #容器实例名称(pod名) 对应阿里 ContainerGroupName(阿里必需) | |||
| container_image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx #镜像地址 对应阿里 Container.Image(阿里必需) | |||
| container_name=pcm-test-ali-container #容器名称 对应阿里 Container.Name(阿里必需) | |||
| [pod_delete_conf] | |||
| # 必需参数 | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| #容器实例ID | |||
| container_group_id=eci-bp100utqw03jci4583xg | |||
| region_id=cn-hangzhou # 地域id | |||
| container_group_id=eci-bp1c3eqfq98nz2kbiooo #容器实例ID | |||
| [pod_list_conf] | |||
| # 必需参数 | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| region_id=cn-hangzhou # 地域id | |||
| [pod_update_conf] | |||
| # 必需参数 | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| #容器实例ID | |||
| container_group_id=eci-bp100utqw03jci4583xg | |||
| #可选 这里做更新测试 | |||
| #重启策略 | |||
| restart_policy=Always | |||
| # | |||
| # ##下面为非必需参数 | |||
| # #安全组ID | |||
| # security_group_id=sg-bp17raa25u0wy0sb1qw5 | |||
| # #交换机ID | |||
| # v_switch_id=vsw-bp176sh32kcq79d1uu8fp | |||
| # #可用区 | |||
| # zone_id=cn-hangzhou-h | |||
| # #容器实例名称(pod名) | |||
| # container_group_name=pcm-test-ali-pod | |||
| # #重启策略 | |||
| # restart_policy=Never | |||
| # #Pod拥有核数 | |||
| # cpu_pod=1.00 | |||
| # #Pod拥有内存大小 | |||
| # memory_pod=2.00 | |||
| # #容器所需核数 | |||
| # cpu_container=1.00 | |||
| # #容器所需内存大小 | |||
| # memory_container=2.00 | |||
| # #镜像拉取策略 | |||
| # image_pull_policy=IfNotPresent | |||
| # | |||
| #每个region下的资源信息,json格式 | |||
| ##region_info={"cn-hangzhou": {"securityGroupId": "sg-bp17raa25u0wy0sb1qw5","vSwitchId": "vsw-bp176sh32kcq79d1uu8fp","zoneId": "cn-hangzhou-h"},"cn-shanghai": {"securityGroupId": "sg-uf62jug0dt92nfy630cs","vSwitchId": "vsw-uf6cb39ub5urw82bv3w70","zoneId": "cn-shanghai-g"},"cn-beijing": {"securityGroupId": "sg-2ze6uv80a8s4yk04dmyu","vSwitchId": "vsw-2zegtxf8q29d8tt1xtcjk","zoneId": "cn-beijing-h"},"cn-shenzhen":{"securityGroupId": "sg-wz96x4kv4edy97q6jjzn","vSwitchId": "vsw-wz9rn33jwilodp24klo0q","zoneId": "cn-shenzhen-a"},"cn-hongkong":{"securityGroupId": "sg-j6cjajpf7f4ybda7h19w","vSwitchId": "vsw-j6c9c9fit5owbbc0ids6c","zoneId": "cn-hongkong-b"},"us-west-1":{"securityGroupId": "sg-u19hbpj9x","vSwitchId": "vsw-rj9h5vvzhb4fjkuzuyi8j","zoneId": "us-west-1a"},"us-east-1":{"securityGroupId": "sg-0xih51sfoldxzxfsbja5","vSwitchId": "vsw-0xisefewxoqe4f849jbnl","zoneId": "us-east-1b"},"ap-southeast-1":{"securityGroupId": "sg-t4n23ppw7fm5to7cnib9","vSwitchId": "vsw-t4nr1xt8zupxg00unnmg9","zoneId": "ap-southeast-1b"},"cn-zhangjiakou": {"securityGroupId": "sg-8vb96lku1dgq71ckh98g","vSwitchId": "vsw-8vbtnz5878r3bcio7cpyx", "nfs":"9cbb94a474-oav34.cn-zhangjiakou.nas.aliyuncs.com", "zoneId": "cn-zhangjiakou-a"}} | |||
| region_id=cn-hangzhou # 地域id | |||
| container_group_id=eci-bp1c3eqfq98nz2kbiooo #容器实例ID | |||
| restart_policy=Never #可选 这里用重启策略做更新测试 | |||
| @@ -1,20 +1,21 @@ | |||
| package eci | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/auth/aksk" | |||
| "PCM/adaptor/container_api_adaptor/common/config" | |||
| "fmt" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/services/eci" | |||
| ) | |||
| // CreateContainerGroup 创建 | |||
| func CreateContainerGroup(configPath string) string { | |||
| func CreateContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| var client *eci.Client | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| //创建客户端 | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configCommon.AccessKey, configCommon.SecretKey) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // 生成创建请求 | |||
| createContainerRequest := eci.CreateCreateContainerGroupRequest() | |||
| // 必需参数 | |||
| @@ -39,12 +40,12 @@ func CreateContainerGroup(configPath string) string { | |||
| } | |||
| // DescribeContainerGroup 查询Pod | |||
| func DescribeContainerGroup(configPath string) eci.DescribeContainerGroupsContainerGroup0 { | |||
| func DescribeContainerGroup(cloudStack string, akskPath string, configPath string) eci.DescribeContainerGroupsContainerGroup0 { | |||
| var client *eci.Client | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configCommon.AccessKey, configCommon.SecretKey) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // 生成查询请求 | |||
| describeContainerGroupsRequest := eci.CreateDescribeContainerGroupsRequest() | |||
| @@ -68,11 +69,13 @@ func DescribeContainerGroup(configPath string) eci.DescribeContainerGroupsContai | |||
| } | |||
| // UpdateContainerGroup 更新Pod | |||
| func UpdateContainerGroup(configPath string) string { | |||
| func UpdateContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| var client *eci.Client | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configCommon.AccessKey, configCommon.SecretKey) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| //生成更新请求 | |||
| updateContainerGroupRequest := eci.CreateUpdateContainerGroupRequest() | |||
| @@ -96,11 +99,11 @@ func UpdateContainerGroup(configPath string) string { | |||
| } | |||
| // DeleteContainerGroup 删除Pod | |||
| func DeleteContainerGroup(configPath string) string { | |||
| func DeleteContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| var client *eci.Client | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configCommon.AccessKey, configCommon.SecretKey) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| //生成删除请求 | |||
| deleteContainerGroupRequest := eci.CreateDeleteContainerGroupRequest() | |||
| @@ -2,20 +2,20 @@ package api | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/alibaba/eci" | |||
| cci "PCM/adaptor/container_api_adaptor/huawei/demos/pod" | |||
| cciAksk "PCM/adaptor/container_api_adaptor/huawei/pkg/auth/aksk" | |||
| cci "PCM/adaptor/container_api_adaptor/huawei/resources/pod" | |||
| "PCM/adaptor/container_api_adaptor/tencent/eks" | |||
| ) | |||
| //CreatePod 创建Pod通用方法 | |||
| func CreatePod(cloudStack string, configPath string) { | |||
| func CreatePod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.CreateContainerGroup(configPath) | |||
| eci.CreateContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(configPath) | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| @@ -25,21 +25,21 @@ func CreatePod(cloudStack string, configPath string) { | |||
| } | |||
| case "tencent": | |||
| eks.CreateTkeInstance(configPath) | |||
| eks.CreateEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| // DeletePod 删除Pod 通用方法 | |||
| func DeletePod(cloudStack string, configPath string) { | |||
| func DeletePod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.DeleteContainerGroup(configPath) | |||
| eci.DeleteContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(configPath) | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| @@ -49,19 +49,20 @@ func DeletePod(cloudStack string, configPath string) { | |||
| } | |||
| case "tencent": | |||
| eks.DeleteEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| //UpdatePod 更新Pod通用方法 | |||
| func UpdatePod(cloudStack string, configPath string) { | |||
| func UpdatePod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.UpdateContainerGroup(configPath) | |||
| eci.UpdateContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(configPath) | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| @@ -70,19 +71,20 @@ func UpdatePod(cloudStack string, configPath string) { | |||
| return | |||
| } | |||
| case "tencent": | |||
| eks.UpdateEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| //ListPod 查询Pod通用方法 | |||
| func ListPod(cloudStack string, configPath string) { | |||
| func ListPod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.DescribeContainerGroup(configPath) | |||
| eci.DescribeContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(configPath) | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| @@ -92,5 +94,6 @@ func ListPod(cloudStack string, configPath string) { | |||
| } | |||
| case "tencent": | |||
| eks.ListEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| #阿里 | |||
| [alibaba] | |||
| access_key = LTAI5tSCnrhQAdbFhGyWkSL2 | |||
| secret_key = KN4tqu8lalQdo47SoUQBb88qOWjzYC | |||
| #华为 | |||
| [huawei] | |||
| access_key = ATQTIWUT9K66VRMMXKVY | |||
| secret_key = Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy | |||
| #腾讯 | |||
| [tencent] | |||
| access_key = AKIDRefQxnhmuqTU1KRWFl58wQeCE0XoAeEZ | |||
| secret_key = LUMVRmGj2kFrEahhZzA5pKvHNSMASntj | |||
| @@ -0,0 +1,43 @@ | |||
| package aksk | |||
| import ( | |||
| "fmt" | |||
| "github.com/Unknwon/goconfig" | |||
| "os" | |||
| ) | |||
| type AkskContainerConfig struct { | |||
| AccessKey string | |||
| SecretKey string | |||
| } | |||
| func AkskConfig(cloudStack string, akskPath string) (AkskContainerConfig, error) { | |||
| var cfg *goconfig.ConfigFile | |||
| config, err := goconfig.LoadConfigFile(akskPath) | |||
| if err != nil { | |||
| fmt.Println("get config file error:", err.Error()) | |||
| os.Exit(-1) | |||
| } | |||
| cfg = config | |||
| var accessKey string | |||
| var secretKey string | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| accessKey, _ = cfg.GetValue(cloudStack, "access_key") | |||
| secretKey, _ = cfg.GetValue(cloudStack, "secret_key") | |||
| case "huawei": | |||
| accessKey, _ = cfg.GetValue(cloudStack, "access_key") | |||
| secretKey, _ = cfg.GetValue(cloudStack, "secret_key") | |||
| case "tencent": | |||
| accessKey, _ = cfg.GetValue(cloudStack, "access_key") | |||
| secretKey, _ = cfg.GetValue(cloudStack, "secret_key") | |||
| } | |||
| var akskConfig = AkskContainerConfig{ | |||
| AccessKey: accessKey, | |||
| SecretKey: secretKey, | |||
| } | |||
| return akskConfig, nil | |||
| } | |||
| @@ -8,8 +8,6 @@ import ( | |||
| ) | |||
| type PCMContainerConfig struct { | |||
| AccessKey string | |||
| SecretKey string | |||
| RegionId string | |||
| ContainerGroupName string | |||
| ContainerImage string | |||
| @@ -44,17 +42,14 @@ type PCMContainerConfig struct { | |||
| func PCMconfig(configPath string) (PCMContainerConfig, error) { | |||
| //加载配置文件 | |||
| var cfg *goconfig.ConfigFile | |||
| //"/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config_eci.conf" | |||
| config, err := goconfig.LoadConfigFile(configPath) //加载配置文件 | |||
| config, err := goconfig.LoadConfigFile(configPath) | |||
| if err != nil { | |||
| fmt.Println("get config file error:", err.Error()) | |||
| os.Exit(-1) | |||
| } | |||
| cfg = config | |||
| //AKSK | |||
| accessKey, _ := cfg.GetValue("pod_create_conf", "access_key") | |||
| secretKey, _ := cfg.GetValue("pod_create_conf", "secret_key") | |||
| //[创建]通用创建必需信息 | |||
| regionId, _ := cfg.GetValue("pod_create_conf", "region_id") | |||
| @@ -102,8 +97,6 @@ func PCMconfig(configPath string) (PCMContainerConfig, error) { | |||
| ContainerGroupNameUpdate, _ := cfg.GetValue("pod_update_conf", "container_group_name") | |||
| var configCommon = PCMContainerConfig{ | |||
| AccessKey: accessKey, | |||
| SecretKey: secretKey, | |||
| RegionId: regionId, | |||
| ContainerGroupName: containerGroupName, | |||
| ContainerImage: containerImage, | |||
| @@ -6,23 +6,26 @@ func main() { | |||
| aliConfigPath := "/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config_eci.conf" | |||
| huaweiConfigPath := "/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/huawei/cci/config_cci.conf" | |||
| tencentConfigPath := "/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/tencent/eks/config_eks.conf" //api.CreatePod("alibaba") | |||
| tencentConfigPath := "/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/tencent/eks/config_eks.conf" | |||
| akskPath := "/home/Senna/GolandProjects/PCM/adaptor/auth/aksk/aksk.conf" | |||
| println(aliConfigPath) | |||
| println(huaweiConfigPath) | |||
| println(tencentConfigPath) | |||
| println(akskPath) | |||
| //api.ListPod("alibaba", aliConfigPath) | |||
| //api.UpdatePod("alibaba") | |||
| //api.DeletePod("alibaba") | |||
| //api.CreatePod("alibaba", akskPath, aliConfigPath) | |||
| //api.ListPod("alibaba", akskPath, aliConfigPath) | |||
| //api.UpdatePod("alibaba", akskPath, aliConfigPath) | |||
| //api.DeletePod("alibaba", akskPath, aliConfigPath) | |||
| //api.CreatePod("huawei") | |||
| //api.ListPod("huawei") | |||
| //api.UpdatePod("huawei", huaweiConfigPath) | |||
| //api.DeletePod("huawei", huaweiConfigPath) | |||
| //api.CreatePod("huawei", akskPath, huaweiConfigPath) | |||
| //api.ListPod("huawei", akskPath, huaweiConfigPath) | |||
| //api.UpdatePod("huawei", akskPath, huaweiConfigPath) | |||
| //api.DeletePod("huawei", akskPath, huaweiConfigPath) | |||
| api.CreatePod("tencent", tencentConfigPath) | |||
| //api.ListPod("tencent", tencentConfigPath) | |||
| //api.UpdatePod("tencent") | |||
| //api.DeletePod("tencent") | |||
| //api.CreatePod("tencent", akskPath, tencentConfigPath) | |||
| //api.ListPod("tencent", akskPath, tencentConfigPath) | |||
| //api.UpdatePod("tencent", akskPath, tencentConfigPath) | |||
| api.DeletePod("tencent", akskPath, tencentConfigPath) | |||
| } | |||
| @@ -1,74 +1,24 @@ | |||
| [pod_create_conf] | |||
| #测试账号ak | |||
| access_key = | |||
| secret_key = | |||
| #region 对应华为 Region (华为创建Namespace必需) | |||
| region_id=cn-north-4 | |||
| #namespace 华为CCI基于K8S namespace进行管理,需要单独提供namespace 对应Pod.ObjectMeta.Namespace (华为必需) | |||
| namespace=test-k8s-client-namespace1 | |||
| #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_group_name=pcm-test-huawei-pod | |||
| #镜像地址 对应华为 Pod.PodSpec.Containers.Container.Image (华为必需) | |||
| container_image=library/nginx:stable-alpine-perl | |||
| #容器名称 对应华为 Pod.PodSpec.Containers.Container.Name (华为必需) | |||
| container_name=pcm-test-huawei-container | |||
| #Pod拥有核数 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceCPU (华为必需) | |||
| cpu_pod=500m | |||
| #Pod拥有内存大小 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceMemory (华为必需) | |||
| memory_pod=1024Mi | |||
| region_id=cn-north-4 #region 对应华为 Region (华为创建Namespace必需) | |||
| namespace=test-k8s-client-namespace1 #namespace 华为CCI基于K8S namespace进行管理,需要单独提供namespace 对应Pod.ObjectMeta.Namespace (华为必需) | |||
| container_group_name=pcm-test-huawei-pod #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_image=library/nginx:stable-alpine-perl #镜像地址 对应华为 Pod.PodSpec.Containers.Container.Image (华为必需) | |||
| container_name=pcm-test-huawei-container #容器名称 对应华为 Pod.PodSpec.Containers.Container.Name (华为必需) | |||
| cpu_pod=500m #Pod拥有核数 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceCPU (华为必需) | |||
| memory_pod=1024Mi #Pod拥有内存大小 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceMemory (华为必需) | |||
| [pod_delete_conf] | |||
| # 必需参数 | |||
| # 地域id | |||
| namespace=test-k8s-client-namespace1 | |||
| #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_group_name=pcm-test-huawei-pod | |||
| namespace=test-k8s-client-namespace1 # 地域id | |||
| container_group_name=pcm-test-huawei-pod #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| [pod_list_conf] | |||
| # 必需参数 | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| region_id=cn-hangzhou # 地域id | |||
| [pod_update_conf] | |||
| # 必需参数 | |||
| #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_group_name=pcm-test-huawei-pod | |||
| #镜像地址 对应华为 Pod.PodSpec.Containers.Container.Image (华为必需) | |||
| container_image=library/nginx:stable-alpine-perl | |||
| #容器名称 对应华为 Pod.PodSpec.Containers.Container.Name (华为必需) | |||
| container_name=pcm-test-huawei-container-new | |||
| #Pod拥有核数 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceCPU (华为必需) | |||
| cpu_pod=500m | |||
| #Pod拥有内存大小 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceMemory (华为必需) | |||
| memory_pod=2048Mi | |||
| # 地域id | |||
| container_group_name=pcm-test-huawei-pod #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_image=library/nginx:stable-alpine-perl #镜像地址 对应华为 Pod.PodSpec.Containers.Container.Image (华为必需) | |||
| container_name=pcm-test-huawei-container-new #容器名称 对应华为 Pod.PodSpec.Containers.Container.Name (华为必需) | |||
| cpu_pod=500m #Pod拥有核数 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceCPU (华为必需) | |||
| memory_pod=2048Mi #Pod拥有内存大小 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceMemory (华为必需) | |||
| namespace=test-k8s-client-namespace1 | |||
| #可选 这里做更新测试 | |||
| #重启策略 | |||
| restart_policy=Always | |||
| # ##下面为非必需参数 | |||
| # #安全组ID | |||
| # security_group_id=sg-bp17raa25u0wy0sb1qw5 | |||
| # #交换机ID | |||
| # v_switch_id=vsw-bp176sh32kcq79d1uu8fp | |||
| # #可用区 | |||
| # zone_id=cn-hangzhou-h | |||
| # #容器实例名称(pod名) | |||
| # container_group_name=pcm-test-huawei-pod | |||
| # #重启策略 | |||
| # restart_policy=Never | |||
| # #容器所需核数 | |||
| # cpu_container=500m | |||
| # #容器所需内存大小 | |||
| # memory_container=1024Mi | |||
| # #镜像拉取策略 | |||
| # image_pull_policy=IfNotPresent | |||
| @@ -1,72 +0,0 @@ | |||
| package main | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/huawei/demos/pod" | |||
| "PCM/adaptor/container_api_adaptor/huawei/pkg/auth/aksk" | |||
| "fmt" | |||
| ) | |||
| func main() { | |||
| // 有多种认证方式,具体请参考 | |||
| //《使用cci-iam-authenticator进行认证并创建client》,https://support.huaweicloud.com/sdkreference-cci/cci_09_0004.html | |||
| cs, err := aksk.NewClient("") | |||
| //networkCs, err := aksk.NewNetworkClient() | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| ////创建命名空间 | |||
| //fmt.Println("start to namespace created") | |||
| //_, err = namespace.CreateNamespace(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("namespace created") | |||
| ////创建网络 | |||
| //fmt.Println("start to network created") | |||
| //_, err = network.CreateNetwork(networkCs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //创建deployment | |||
| //fmt.Println("start to create deployment") | |||
| //_, err = deployment.CreateDeployment(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("deployment created") | |||
| //创建pod | |||
| fmt.Println("start to create pod") | |||
| _, err = pod.CreatePod(cs, "") | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Println("pod created") | |||
| //删除deployment | |||
| //fmt.Println("start to delete deployment") | |||
| //err = deployment.DeleteDeployment(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("deployment deleted") | |||
| //删除pod | |||
| //fmt.Println("start to delete pod") | |||
| //err = pod.DeletePod(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("pod deleted") | |||
| //删除命名空间 | |||
| //fmt.Println("start to delete namespace") | |||
| //err = namespace.DeleteNamespace(cs) | |||
| //if err != nil { | |||
| // panic(err) | |||
| //} | |||
| //fmt.Println("namespace terminating") | |||
| } | |||
| @@ -1,23 +0,0 @@ | |||
| //go:build tools | |||
| // +build tools | |||
| /* | |||
| Copyright 2019 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. | |||
| */ | |||
| // This package imports things required by build scripts, to force `go mod` to see them as dependencies | |||
| package hack | |||
| import _ "k8s.io/code-generator" | |||
| @@ -1,38 +0,0 @@ | |||
| #!/usr/bin/env bash | |||
| # 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. | |||
| set -o errexit | |||
| set -o nounset | |||
| set -o pipefail | |||
| SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. | |||
| CODEGEN_PKG=${CODEGEN_PKG:-$(cd "${SCRIPT_ROOT}"; ls -d -1 ./vendor/k8s.io/code-generator 2>/dev/null || echo ../code-generator)} | |||
| # generate the code with: | |||
| # --output-base because this script should also be able to run inside the vendor dir of | |||
| # k8s.io/kubernetes. The output-base is needed for the generators to output into the vendor dir | |||
| # instead of the $GOPATH directly. For normal projects this can be dropped. | |||
| # generators deepcopy,client,informer,lister | |||
| export CLIENTSET_PKG_NAME=networking.cci.io | |||
| export CLIENTSET_NAME_VERSIONED=v1beta1 | |||
| "${CODEGEN_PKG}"/generate-groups.sh "deepcopy,client" \ | |||
| PCM/adaptor/container_api_adaptor/huawei/pkg/client PCM/adaptor/container_api_adaptor/huawei/pkg/apis \ | |||
| networking.cci.io:v1beta1 \ | |||
| --output-base "$(dirname "${BASH_SOURCE[0]}")/../../.." \ | |||
| --go-header-file "${SCRIPT_ROOT}"/hack/boilerplate.go.txt | |||
| # To use your own boilerplate text append: | |||
| # --go-header-file "${SCRIPT_ROOT}"/hack/custom-boilerplate.go.txt | |||
| @@ -1,6 +1,7 @@ | |||
| package aksk | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/auth/aksk" | |||
| "PCM/adaptor/container_api_adaptor/common/config" | |||
| clientset "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1" | |||
| "fmt" | |||
| @@ -33,13 +34,13 @@ const ( | |||
| ) | |||
| // NewClient 通过AK/SK认证创建Clientset | |||
| func NewClient(configPath string) (*kubernetes.Clientset, error) { | |||
| func NewClient(cloudStack string, akskPath string, configPath string) (*kubernetes.Clientset, error) { | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| ak := configCommon.AccessKey | |||
| sk := configCommon.SecretKey | |||
| ak := configAksk.AccessKey | |||
| sk := configAksk.SecretKey | |||
| regionId := configCommon.RegionId | |||
| cciEndpoint := "https://cci." + regionId + ".myhuaweicloud.com" | |||
| @@ -61,13 +62,13 @@ func NewClient(configPath string) (*kubernetes.Clientset, error) { | |||
| return kubernetes.NewForConfig(cciConfig) | |||
| } | |||
| func NewNetworkClient(configPath string) (*clientset.Clientset, error) { | |||
| func NewNetworkClient(cloudStack string, akskPath string, configPath string) (*clientset.Clientset, error) { | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| ak := configCommon.AccessKey | |||
| sk := configCommon.SecretKey | |||
| ak := configAksk.AccessKey | |||
| sk := configAksk.SecretKey | |||
| regionId := configCommon.RegionId | |||
| cciEndpoint := "https://cci." + regionId + ".myhuaweicloud.com" | |||
| @@ -99,12 +99,12 @@ func UpdatePod(client *kubernetes.Clientset, configPath string) (*corev1.Pod, er | |||
| Image: containerImage, | |||
| Resources: corev1.ResourceRequirements{ | |||
| Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse("500m"), | |||
| corev1.ResourceMemory: resource.MustParse("1Gi"), | |||
| corev1.ResourceLimitsCPU: resource.MustParse("500m"), | |||
| corev1.ResourceLimitsMemory: resource.MustParse("1Gi"), | |||
| }, | |||
| Requests: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse("500m"), | |||
| corev1.ResourceMemory: resource.MustParse("1Gi"), | |||
| corev1.ResourceRequestsCPU: resource.MustParse("500m"), | |||
| corev1.ResourceRequestsMemory: resource.MustParse("1Gi"), | |||
| }, | |||
| }, | |||
| }, | |||
| @@ -1,37 +1,21 @@ | |||
| [pod_create_conf] | |||
| #测试账号ak | |||
| access_key = | |||
| secret_key = | |||
| #region | |||
| region_id=ap-beijing | |||
| #容器实例名称(pod名) 对应腾讯EksCiName(腾讯必需) | |||
| container_group_name=pcm-test-tencent-pod | |||
| #镜像地址 对应腾讯 Container.Image(腾讯必需) | |||
| container_image=library/nginx:stable-alpine-perl | |||
| #容器名称 对应腾讯 Container.Name(腾讯必需) | |||
| container_name=pcm-test-tencent-container | |||
| #Pod拥有核数 对应腾讯 Cpu(腾讯必需) | |||
| cpu_pod=1 | |||
| #Pod拥有内存大小 对应腾讯 Memory(腾讯必需) | |||
| memory_pod=2 | |||
| #安全组ID 对应腾讯 SecurityGroupIds(腾讯必需) | |||
| security_group_id=sg-owzbdinl | |||
| #子网ID 对应腾讯 SubnetId(腾讯必需) | |||
| subnet_id=subnet-n4h73049 | |||
| #VPC ID 对应腾讯 VpcId(腾讯必需) | |||
| vpc_id=vpc-e8hdbla8 | |||
| region_id=ap-beijing #区域ID | |||
| container_group_name=pcm-test-tencent-pod #容器实例名称(pod名) 对应腾讯EksCiName(腾讯必需) | |||
| container_image=library/nginx:stable-alpine-perl #镜像地址 对应腾讯 Container.Image(腾讯必需) | |||
| container_name=pcm-test-tencent-container #容器名称 对应腾讯 Container.Name(腾讯必需) | |||
| cpu_pod=1 #Pod拥有核数 对应腾讯 Cpu(腾讯必需) | |||
| memory_pod=2 #Pod拥有内存大小 对应腾讯 Memory(腾讯必需) | |||
| security_group_id=sg-owzbdinl #安全组ID 对应腾讯 SecurityGroupIds(腾讯必需) | |||
| subnet_id=subnet-n4h73049 #子网ID 对应腾讯 SubnetId(腾讯必需) | |||
| vpc_id=vpc-e8hdbla8 #VPC ID 对应腾讯 VpcId(腾讯必需) | |||
| [pod_list_conf] | |||
| region_id=ap-beijing #区域ID | |||
| # ##下面为非必需参数 | |||
| # #交换机ID | |||
| # v_switch_id=vsw-bp176sh32kcq79d1uu8fp | |||
| # #可用区 | |||
| # zone_id=cn-hangzhou-h | |||
| # #重启策略 | |||
| # restart_policy=Never | |||
| # #容器所需核数 | |||
| # cpu_container=1 | |||
| # #容器所需内存大小 | |||
| # memory_container=2 | |||
| # #镜像拉取策略 | |||
| # image_pull_policy=IfNotPresent | |||
| [pod_update_conf] | |||
| region_id=ap-beijing #区域ID | |||
| container_group_id=eksci-pawu7qad #容器实例ID 对应腾讯EksCiName(腾讯必需) | |||
| container_group_name=eksci-pawu7qad #容器实例名称(pod名) 对应腾讯EksCiName(腾讯必需) | |||
| [pod_delete_conf] | |||
| container_group_id=eksci-pawu7qad | |||
| @@ -0,0 +1,138 @@ | |||
| package eks | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/auth/aksk" | |||
| pcmCommon "PCM/adaptor/container_api_adaptor/common/config" | |||
| "fmt" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" | |||
| ) | |||
| func CreateEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential( | |||
| configAksk.AccessKey, | |||
| configAksk.SecretKey, | |||
| ) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewCreateEKSContainerInstancesRequest() | |||
| eksCiName := &configCommon.ContainerGroupName | |||
| containerName := &configCommon.ContainerName | |||
| containerImage := &configCommon.ContainerImage | |||
| eksCpu := &configCommon.CpuPodFloat | |||
| eksMemory := &configCommon.MemoryPodFloat | |||
| securityGroupId := &configCommon.SecurityGroupId | |||
| securityGroupIds := make([]*string, 1) | |||
| securityGroupIds[0] = securityGroupId | |||
| subNetId := &configCommon.SubnetId | |||
| vpcId := &configCommon.VpcId | |||
| request.EksCiName = eksCiName | |||
| container := make([]*tke.Container, 1) | |||
| container[0] = new(tke.Container) | |||
| container[0].Name = containerName | |||
| container[0].Image = containerImage | |||
| //container[0].Cpu = containerCpuPt | |||
| //container[0].Memory = containerMemoryPt | |||
| request.Containers = container | |||
| request.Cpu = eksCpu | |||
| request.Memory = eksMemory | |||
| request.SecurityGroupIds = securityGroupIds | |||
| request.SubnetId = subNetId | |||
| request.VpcId = vpcId | |||
| response, err := client.CreateEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| func ListEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewDescribeEKSContainerInstancesRequest() | |||
| response, err := client.DescribeEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| func UpdateEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewUpdateEKSContainerInstanceRequest() | |||
| request.EksCiId = &configCommon.ContainerGroupIdUpdate | |||
| request.Name = &configCommon.ContainerGroupNameUpdate | |||
| response, err := client.UpdateEKSContainerInstance(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| func DeleteEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewDeleteEKSContainerInstancesRequest() | |||
| eksCiIds := make([]*string, 1) | |||
| eksCiIds[0] = &configCommon.ContainerGroupIdDelete | |||
| request.EksCiIds = eksCiIds | |||
| response, err := client.DeleteEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| @@ -1,77 +0,0 @@ | |||
| package eks | |||
| import ( | |||
| pcmCommon "PCM/adaptor/container_api_adaptor/common/config" | |||
| "fmt" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" | |||
| ) | |||
| func CreateTkeInstance(configPath string) { | |||
| var configCommon pcmCommon.PCMContainerConfig | |||
| configCommon, _ = pcmCommon.PCMconfig(configPath) | |||
| credential := common.NewCredential( | |||
| configCommon.AccessKey, | |||
| configCommon.SecretKey, | |||
| ) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "eks.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewCreateEKSContainerInstancesRequest() | |||
| eksCiName := configCommon.ContainerGroupName | |||
| var eksCiNamePt = &eksCiName | |||
| containerName := configCommon.ContainerName | |||
| var containerNamePt = &containerName | |||
| containerImage := configCommon.ContainerImage | |||
| var containerImagePt = &containerImage | |||
| eksCpu := configCommon.CpuPodFloat | |||
| var eksCpuPt = &eksCpu | |||
| eksMemory := configCommon.MemoryPodFloat | |||
| var eksMemoryPt = &eksMemory | |||
| securityGroupId := configCommon.SecurityGroupId | |||
| var securityGroupIdPt = &securityGroupId | |||
| securityGroupIdsPt := make([]*string, 1) | |||
| securityGroupIdsPt[0] = securityGroupIdPt | |||
| subNetId := configCommon.SubnetId | |||
| var subNetIdPt = &subNetId | |||
| vpcId := configCommon.VpcId | |||
| var vpcIdPt = &vpcId | |||
| request.EksCiName = eksCiNamePt | |||
| container := make([]*tke.Container, 1) | |||
| container[0] = new(tke.Container) | |||
| container[0].Name = containerNamePt | |||
| container[0].Image = containerImagePt | |||
| //container[0].Cpu = containerCpuPt | |||
| //container[0].Memory = containerMemoryPt | |||
| request.Containers = container | |||
| request.Cpu = eksCpuPt | |||
| request.Memory = eksMemoryPt | |||
| request.SecurityGroupIds = securityGroupIdsPt | |||
| request.SubnetId = subNetIdPt | |||
| request.VpcId = vpcIdPt | |||
| response, err := client.CreateEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| @@ -1,9 +0,0 @@ | |||
| package main | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/tencent/eks" | |||
| ) | |||
| func main() { | |||
| eks.CreateTkeInstance("") | |||
| } | |||