fix:提交openstack代码

This commit is contained in:
qiwang 2023-10-08 17:30:35 +08:00
commit cb796ef650
64 changed files with 31481 additions and 0 deletions

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/pcm-participant-openstack.iml" filepath="$PROJECT_DIR$/.idea/pcm-participant-openstack.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

73
LICENSE Normal file
View File

@ -0,0 +1,73 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

5
Makefile Normal file
View File

@ -0,0 +1,5 @@
rpc-gen:
goctl rpc protoc ./pb/*.proto --go_out=./ --go-grpc_out=./ --zrpc_out=.
pcm-participant-openstack:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o pcm-participant-openstack openstack.go

1
README.md Normal file
View File

@ -0,0 +1 @@
# pcm-participant-openstack

15
etc/pcmopenstack.yaml Normal file
View File

@ -0,0 +1,15 @@
NacosConfig:
DataId: pcm-openstack-rpc.yaml
Group: DEFAULT_GROUP
ServerConfigs:
# - IpAddr: 127.0.0.1
# Port: 8848
- IpAddr: 10.101.15.7
Port: 8848
ClientConfig:
NamespaceId: storage
TimeoutMs: 5000
NotLoadCacheAtStart: true
LogDir:
CacheDir:
LogLevel: debug

112
go.mod Normal file
View File

@ -0,0 +1,112 @@
module gitlink.org.cn/jcce-pcm/pcm-participant-openstack
go 1.19
require (
github.com/prometheus/client_golang v1.16.0
github.com/prometheus/common v0.44.0
github.com/robfig/cron/v3 v3.0.1
github.com/zeromicro/go-zero v1.5.5
gitlink.org.cn/jcce-pcm/pcm-coordinator v0.1.7
gitlink.org.cn/jcce-pcm/utils v0.0.2
google.golang.org/grpc v1.57.0
google.golang.org/protobuf v1.31.0
k8s.io/apimachinery v0.27.3
k8s.io/client-go v0.26.3
)
require (
github.com/JCCE-nudt/zero-contrib/zrpc/registry/nacos v0.0.0-20230419021610-13bbc83fbc3c // indirect
github.com/Masterminds/squirrel v1.5.4 // indirect
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/bwmarrin/snowflake v0.3.0 // indirect
github.com/cenkalti/backoff/v4 v4.2.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.1 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-resty/resty/v2 v2.7.0 // indirect
github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
github.com/jinzhu/copier v0.3.5 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/nacos-group/nacos-sdk-go/v2 v2.2.1 // indirect
github.com/openzipkin/zipkin-go v0.4.1 // indirect
github.com/pelletier/go-toml/v2 v2.0.9 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_model v0.4.0 // indirect
github.com/prometheus/procfs v0.10.1 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.9 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
go.opentelemetry.io/otel v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/jaeger v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
go.opentelemetry.io/otel/exporters/zipkin v1.14.0 // indirect
go.opentelemetry.io/otel/sdk v1.14.0 // indirect
go.opentelemetry.io/otel/trace v1.14.0 // indirect
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/automaxprocs v1.5.3 // indirect
go.uber.org/multierr v1.9.0 // indirect
go.uber.org/zap v1.24.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/oauth2 v0.8.0 // indirect
golang.org/x/sync v0.2.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/term v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/time v0.3.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.66.2 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/api v0.26.3 // indirect
k8s.io/klog/v2 v2.90.1 // indirect
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)

1681
go.sum Normal file

File diff suppressed because it is too large Load Diff

46
internal/common/Entity.go Normal file
View File

@ -0,0 +1,46 @@
package common
import "time"
type Auth struct {
Auth struct {
Identity struct {
Methods []string `json:"methods"`
Password struct {
User struct {
Name string `json:"name"`
Password string `json:"password"`
Domain struct {
Name string `json:"name"`
} `json:"domain"`
} `json:"user"`
} `json:"password"`
} `json:"identity"`
Scope struct {
Project struct {
Name string `json:"name"`
Domain struct {
Name string `json:"name"`
} `json:"domain"`
} `json:"project"`
} `json:"scope"`
} `json:"auth"`
}
type Token struct {
Token struct {
ExpiresAt time.Time `json:"expires_at"`
AuditIds []string `json:"audit_ids"`
Methods []string `json:"methods"`
IssuedAt time.Time `json:"issued_at"`
User struct {
Domain struct {
Id string `json:"id"`
Name string `json:"name"`
} `json:"domain"`
Id string `json:"id"`
Name string `json:"name"`
PasswordExpiresAt string `json:"password_expires_at"`
} `json:"user"`
} `json:"token"`
}

View File

@ -0,0 +1,69 @@
package common
import (
"bytes"
"io"
"k8s.io/apimachinery/pkg/util/json"
"log"
"net/http"
"time"
)
const (
USER = "admin"
PASSWORD = "Nudt@123"
DOMAIN = "Default"
TokenUrl = "http://10.105.20.9:5000/v3/auth/tokens?nocatalog"
Status_created = 201
ProjectName = "Default"
TokenHeader = "X-Subject-Token"
AuthMethod = "password"
)
var (
token, expiredAt = GenerateToken()
)
func GenerateToken() (string, time.Time) {
a := Auth{}
a.Auth.Scope.Project.Name = USER
a.Auth.Scope.Project.Domain.Name = ProjectName
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, AuthMethod)
a.Auth.Identity.Password.User.Name = USER
a.Auth.Identity.Password.User.Password = PASSWORD
a.Auth.Identity.Password.User.Domain.Name = DOMAIN
jsonStr, _ := json.Marshal(a)
req_url, err := http.NewRequest("POST", TokenUrl, bytes.NewBuffer(jsonStr))
if err != nil {
log.Fatal(err)
}
c := http.Client{Timeout: time.Duration(3) * time.Second}
respUrl, err := c.Do(req_url)
if err != nil {
log.Fatal(err)
}
if respUrl.StatusCode != Status_created {
panic("获取token失败")
}
defer respUrl.Body.Close()
var t Token
result, _ := io.ReadAll(respUrl.Body)
json.Unmarshal(result, &t)
return respUrl.Header.Get(TokenHeader), t.Token.ExpiresAt
}
func GetToken() string {
if time.Now().After(expiredAt) {
token, expiredAt = GenerateToken()
}
return token
}

27
internal/config/config.go Normal file
View File

@ -0,0 +1,27 @@
package config
import (
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/zrpc"
)
const (
HOST = "10.101.15.3"
PORT = "6443"
)
type Config struct {
zrpc.RpcServerConf
OpenstackConfig
LogConf logx.LogConf
PcmCoreRpcConf zrpc.RpcClientConf
//Participant Participant
}
/*type Participant struct {
Address string `json:"address"`
Type string `json:"type"`
TenantId int64 `json:"tenantId"`
TenantName string `json:"tenantName"`
Labels map[string]string
}*/

View File

@ -0,0 +1,8 @@
package config
type OpenstackConfig struct {
OpenstackNetworkUrl string `json:"OpenstackNetworkUrl"`
OpenstackComputeUrl string `json:"OpenstackComputeUrl"`
OpenstackImageUrl string `json:"OpenstackImageUrl"`
OpenstackVolumev2Url string `json:"OpenstackVolumev2Url"`
}

View File

@ -0,0 +1,58 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type BulkCreateNetworksLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewBulkCreateNetworksLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BulkCreateNetworksLogic {
return &BulkCreateNetworksLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// 批量创建网络
func (l *BulkCreateNetworksLogic) BulkCreateNetworks(in *openstack.BulkCreateNetworksReq) (*openstack.BulkCreateNetworksResp, error) {
// todo: add your logic here and delete this line
var resp openstack.BulkCreateNetworksResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/v2.0/networks", payload, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.BulkCreateNetworksResp{}, nil
}

View File

@ -0,0 +1,59 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateImageLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateImageLogic {
return &CreateImageLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// Images from glance
func (l *CreateImageLogic) CreateImage(in *openstack.CreateImageReq) (*openstack.CreateImageResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateImageResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackImageUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/v2/images", payload, token)
//statusCode, body, err := tool.HttpClientWithScreen(tool.POST, openstackUrl+"/v2/images", payload)
if err != nil {
return nil, err
}
if statusCode == 201 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 201 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,57 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateNetworkLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateNetworkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateNetworkLogic {
return &CreateNetworkLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *CreateNetworkLogic) CreateNetwork(in *openstack.CreateNetworkReq) (*openstack.CreateNetworkResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateNetworkResp
reqByte, err := json.Marshal(in)
token := common.GetToken()
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/v2.0/networks", payload, token)
if err != nil {
return nil, err
}
if statusCode == 201 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 201 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,57 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateNodeLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateNodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateNodeLogic {
return &CreateNodeLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *CreateNodeLogic) CreateNode(in *openstack.CreateNodeReq) (*openstack.CreateNodeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateNodeResp
token := common.GetToken()
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := "http://10.105.20.9:9292"
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/v1/nodes", payload, token)
if err != nil {
return nil, err
}
if statusCode == 201 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 201 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,58 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"strings"
"github.com/zeromicro/go-zero/core/logx"
"k8s.io/apimachinery/pkg/util/json"
)
type CreateServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateServerLogic {
return &CreateServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *CreateServerLogic) CreateServer(in *openstack.CreateServerReq) (*openstack.CreateServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateServerResp
reqByte, err := json.Marshal(in)
token := common.GetToken()
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/servers", payload, token)
if err != nil {
return nil, err
}
if statusCode == 202 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 202 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,58 @@
package logic
import (
"context"
"encoding/json"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"strings"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateSubnetLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateSubnetLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateSubnetLogic {
return &CreateSubnetLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *CreateSubnetLogic) CreateSubnet(in *openstack.CreateSubnetReq) (*openstack.CreateSubnetResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateSubnetResp
reqByte, err := json.Marshal(in)
token := common.GetToken()
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/v2.0/subnets", payload, token)
if err != nil {
return nil, err
}
if statusCode == 201 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 201 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,57 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateVolumeLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateVolumeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateVolumeLogic {
return &CreateVolumeLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *CreateVolumeLogic) CreateVolume(in *openstack.CreateVolumeReq) (*openstack.CreateVolumeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateVolumeResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
token := common.GetToken()
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/volumes", payload, token)
if err != nil {
return nil, err
}
if statusCode == 202 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 202 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateVolumeTypesLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateVolumeTypesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateVolumeTypesLogic {
return &CreateVolumeTypesLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *CreateVolumeTypesLogic) CreateVolumeTypes(in *openstack.CreateTypeReq) (*openstack.CreateTypeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.CreateTypeResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
statusCode, body, err := tool.HttpClientWithScreen(tool.POST, openstackUrl+"/v3/"+in.ProjectId+"/types", payload)
if err != nil {
return nil, err
}
if statusCode == 201 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 201 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,53 @@
package logic
import (
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"context"
"fmt"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteImageLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteImageLogic {
return &DeleteImageLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *DeleteImageLogic) DeleteImage(in *openstack.DeleteImageReq) (*openstack.DeleteImageResp, error) {
// todo: add your logic here and delete this line
var resp openstack.DeleteImageResp
openstackUrl := l.svcCtx.Config.OpenstackImageUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.DELETE, openstackUrl+"/v2/images/"+in.ImageId, strings.NewReader(``), token)
if err != nil {
return nil, err
}
if statusCode == 204 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 204 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteNetworkLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteNetworkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteNetworkLogic {
return &DeleteNetworkLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *DeleteNetworkLogic) DeleteNetwork(in *openstack.DeleteNetworkReq) (*openstack.DeleteNetworkResp, error) {
// todo: add your logic here and delete this line
var resp openstack.DeleteNetworkResp
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.DELETE, openstackUrl+"/v2.0/networks/"+in.NetworkId, strings.NewReader(``), token)
if err != nil {
return nil, err
}
if statusCode == 204 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 204 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,50 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteNodeLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteNodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteNodeLogic {
return &DeleteNodeLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *DeleteNodeLogic) DeleteNode(in *openstack.DeleteNodeReq) (*openstack.DeleteNodeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.DeleteNodeResp
openstackUrl := ""
statusCode, body, err := tool.HttpClientWithScreen(tool.DELETE, openstackUrl+"/v1/nodes/"+in.NodeIdent, strings.NewReader(``))
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,53 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"strings"
"github.com/zeromicro/go-zero/core/logx"
"k8s.io/apimachinery/pkg/util/json"
)
type DeleteServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteServerLogic {
return &DeleteServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *DeleteServerLogic) DeleteServer(in *openstack.DeleteServerReq) (*openstack.DeleteServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.DeleteServerResp
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.DELETE, openstackUrl+"/servers/"+in.ServerId, strings.NewReader(``), token)
if err != nil {
return nil, err
}
if statusCode == 204 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 204 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteVolumeLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteVolumeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteVolumeLogic {
return &DeleteVolumeLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *DeleteVolumeLogic) DeleteVolume(in *openstack.DeleteVolumeReq) (*openstack.DeleteVolumeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.DeleteVolumeResp
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.DELETE, openstackUrl+"/volumes/"+in.VolumeId, strings.NewReader(``), token)
if err != nil {
return nil, err
}
if statusCode == 202 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 202 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,50 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteVolumeTypesLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteVolumeTypesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteVolumeTypesLogic {
return &DeleteVolumeTypesLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *DeleteVolumeTypesLogic) DeleteVolumeTypes(in *openstack.DeleteTypeReq) (*openstack.DeleteTypeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.DeleteTypeResp
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
statusCode, body, err := tool.HttpClientWithScreen(tool.DELETE, openstackUrl+"/v3/"+in.ProjectId+"/types/"+in.VolumeTypeId, strings.NewReader(``))
if err != nil {
return nil, err
}
if statusCode == 204 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 204 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,51 @@
package logic
import (
"context"
"encoding/json"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type GetComputeLimitsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetComputeLimitsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetComputeLimitsLogic {
return &GetComputeLimitsLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *GetComputeLimitsLogic) GetComputeLimits(in *openstack.GetComputeLimitsReq) (*openstack.GetComputeLimitsResp, error) {
var resp openstack.GetComputeLimitsResp
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/v2/limits", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type GetServersDetailedByIdLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetServersDetailedByIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetServersDetailedByIdLogic {
return &GetServersDetailedByIdLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *GetServersDetailedByIdLogic) GetServersDetailedById(in *openstack.GetServersDetailedByIdReq) (*openstack.GetServersDetailedByIdResp, error) {
// todo: add your logic here and delete this line
var resp openstack.GetServersDetailedByIdResp
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/servers/"+in.ServerId, nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,51 @@
package logic
import (
"context"
"encoding/json"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type GetVolumeLimitsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetVolumeLimitsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetVolumeLimitsLogic {
return &GetVolumeLimitsLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *GetVolumeLimitsLogic) GetVolumeLimits(in *openstack.GetVolumeLimitsReq) (*openstack.GetVolumeLimitsResp, error) {
var resp openstack.GetVolumeLimitsResp
openstackUrl := "http://10.105.20.9:8776"
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/v3/aa7366b7f0e9453a9ba8bc699aa97b1e/limits", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"encoding/json"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type ListFlavorsDetailLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListFlavorsDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListFlavorsDetailLogic {
return &ListFlavorsDetailLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListFlavorsDetailLogic) ListFlavorsDetail(in *openstack.ListFlavorsDetailReq) (*openstack.ListFlavorsDetailResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListFlavorsDetailResp
openstackUrl := "http://10.105.20.9:8774/v2.1/aa7366b7f0e9453a9ba8bc699aa97b1e"
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/flavors/detail", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type ListImagesLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListImagesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListImagesLogic {
return &ListImagesLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListImagesLogic) ListImages(in *openstack.ListImagesReq) (*openstack.ListImagesResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListImagesResp
openstackUrl := "http://10.105.20.9:9292"
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/v2/images", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"github.com/zeromicro/go-zero/core/logx"
)
type ListNetworksLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListNetworksLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListNetworksLogic {
return &ListNetworksLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListNetworksLogic) ListNetworks(in *openstack.ListNetworksReq) (*openstack.ListNetworksResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListNetworksResp
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/v2.0/networks", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"github.com/zeromicro/go-zero/core/logx"
)
type ListNodesLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListNodesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListNodesLogic {
return &ListNodesLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// Bare Metal
func (l *ListNodesLogic) ListNodes(in *openstack.ListNodesReq) (*openstack.ListNodesResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListNodesResp
openstackUrl := ""
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/v2.0/networks", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,51 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"github.com/zeromicro/go-zero/core/logx"
)
type ListServersDetailedLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListServersDetailedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListServersDetailedLogic {
return &ListServersDetailedLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListServersDetailedLogic) ListServersDetailed(in *openstack.ListServersDetailedReq) (*openstack.ListServersDetailedResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListServersDetailedResp
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/servers/detail", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,51 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"github.com/zeromicro/go-zero/core/logx"
)
type ListServersLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListServersLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListServersLogic {
return &ListServersLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListServersLogic) ListServers(in *openstack.ListServersReq) (*openstack.ListServersResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListServersResp
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/servers", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,52 @@
package logic
import (
"context"
"encoding/json"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type ListVolumesDetailLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListVolumesDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListVolumesDetailLogic {
return &ListVolumesDetailLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListVolumesDetailLogic) ListVolumesDetail(in *openstack.ListVolumesDetailReq) (*openstack.ListVolumesDetailResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListVolumesDetailResp
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/volumes/detail", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,53 @@
package logic
import (
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"context"
"fmt"
"k8s.io/apimachinery/pkg/util/json"
"github.com/zeromicro/go-zero/core/logx"
)
type ListVolumesLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListVolumesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListVolumesLogic {
return &ListVolumesLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// cinder(block storage) volumes
func (l *ListVolumesLogic) ListVolumes(in *openstack.ListVolumesReq) (*openstack.ListVolumesResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListVolumesResp
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/volumes", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,53 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"github.com/zeromicro/go-zero/core/logx"
)
type ListVolumeTypesLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListVolumeTypesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListVolumeTypesLogic {
return &ListVolumeTypesLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListVolumeTypesLogic) ListVolumeTypes(in *openstack.ListVolumeTypesReq) (*openstack.ListVolumeTypesResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ListVolumeTypesResp
openstackUrl := l.svcCtx.Config.OpenstackVolumev2Url
token := common.GetToken()
//statusCode, body, err := tool.HttpClientWithScreen(tool.GET, openstackUrl+"/v3/"+in.ProjectId+"/types", strings.NewReader(``))
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.GET, openstackUrl+"/types", nil, token)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type PauseServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewPauseServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PauseServerLogic {
return &PauseServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *PauseServerLogic) PauseServer(in *openstack.PauseServerReq) (*openstack.PauseServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.PauseServerResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/servers/"+in.ServerId+"/action", payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.PauseServerResp{}, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type RebootServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewRebootServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RebootServerLogic {
return &RebootServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *RebootServerLogic) RebootServer(in *openstack.RebootServerReq) (*openstack.RebootServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.RebootServerResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/servers/"+in.ServerId+"/action", payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.RebootServerResp{}, nil
}

View File

@ -0,0 +1,51 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type ShowNetworkDetailsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewShowNetworkDetailsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ShowNetworkDetailsLogic {
return &ShowNetworkDetailsLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// network
func (l *ShowNetworkDetailsLogic) ShowNetworkDetails(in *openstack.ShowNetworkDetailsReq) (*openstack.ShowNetworkDetailsResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ShowNetworkDetailsResp
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.GET, openstackUrl+"/v2.0/networks/"+in.NetworkId, strings.NewReader(``))
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.ShowNetworkDetailsResp{}, nil
}

View File

@ -0,0 +1,50 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type ShowNodeDetailsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewShowNodeDetailsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ShowNodeDetailsLogic {
return &ShowNodeDetailsLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ShowNodeDetailsLogic) ShowNodeDetails(in *openstack.ShowNodeDetailsReq) (*openstack.ShowNodeDetailsResp, error) {
// todo: add your logic here and delete this line
var resp openstack.ShowNodeDetailsResp
openstackUrl := ""
statusCode, body, err := tool.HttpClientWithScreen(tool.GET, openstackUrl+"/v1/nodes/"+in.NodeIdent, strings.NewReader(``))
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.ShowNodeDetailsResp{}, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type StartServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewStartServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StartServerLogic {
return &StartServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *StartServerLogic) StartServer(in *openstack.StartServerReq) (*openstack.StartServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.StartServerResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/servers/"+in.ServerId+"/action", payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.StartServerResp{}, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type StopServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewStopServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StopServerLogic {
return &StopServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *StopServerLogic) StopServer(in *openstack.StopServerReq) (*openstack.StopServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.StopServerResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/servers/"+in.ServerId+"/action", payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.StopServerResp{}, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateNetworkLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewUpdateNetworkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateNetworkLogic {
return &UpdateNetworkLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *UpdateNetworkLogic) UpdateNetwork(in *openstack.UpdateNetworkReq) (*openstack.UpdateNetworkResp, error) {
// todo: add your logic here and delete this line
var resp openstack.UpdateNetworkResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/v2.0/networks"+in.NetworkId, payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.UpdateNetworkResp{}, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateServerLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewUpdateServerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateServerLogic {
return &UpdateServerLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *UpdateServerLogic) UpdateServer(in *openstack.UpdateServerReq) (*openstack.UpdateServerResp, error) {
// todo: add your logic here and delete this line
var resp openstack.UpdateServerResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/servers/"+in.ServerId, payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.UpdateServerResp{}, nil
}

View File

@ -0,0 +1,55 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateVolumeLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewUpdateVolumeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateVolumeLogic {
return &UpdateVolumeLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *UpdateVolumeLogic) UpdateVolume(in *openstack.UpdateVolumeReq) (*openstack.UpdateVolumeResp, error) {
// todo: add your logic here and delete this line
var resp openstack.UpdateVolumeResp
reqByte, err := json.Marshal(in)
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackNetworkUrl
statusCode, body, err := tool.HttpClientWithScreen(tool.PUT, openstackUrl+"/v3/"+in.ProjectId+"types"+in.VolumeTypeId, payload)
if err != nil {
return nil, err
}
if statusCode == 200 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 200 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &openstack.UpdateVolumeResp{}, nil
}

View File

@ -0,0 +1,58 @@
package logic
import (
"context"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/common"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"strings"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type UploadImageLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewUploadImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UploadImageLogic {
return &UploadImageLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *UploadImageLogic) UploadImage(in *openstack.UploadOsImageReq) (*openstack.UploadOsImageResp, error) {
// todo: add your logic here and delete this line
var resp openstack.UploadOsImageResp
reqByte, err := json.Marshal(in)
token := common.GetToken()
if err != nil {
return nil, err
}
payload := strings.NewReader(string(reqByte))
openstackUrl := l.svcCtx.Config.OpenstackComputeUrl
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.POST, openstackUrl+"/servers", payload, token)
if err != nil {
return nil, err
}
if statusCode == 202 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 202 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -0,0 +1,30 @@
package cron
import (
"context"
"github.com/zeromicro/go-zero/core/logx"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/rpc/client/participantservice"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
"gitlink.org.cn/jcce-pcm/utils/tool"
)
func ReportHeartbeat(participantRpc participantservice.ParticipantService) {
participantId, err := tool.GetParticipantId("etc/pcmopenstack.yaml")
if err != nil {
logx.Errorf("获取participant id失败 err:", err)
return
}
resp, err := participantRpc.ReportHeartbeat(context.Background(), &participantservice.ParticipantHeartbeatReq{
ParticipantId: participantId,
Host: config.HOST,
Port: config.PORT,
})
if err != nil {
logx.Error(err)
return
}
if resp.Code != 200 {
logx.Error(resp.Msg)
}
logx.Info("心跳推送成功!")
}

21
internal/pkg/cron/cron.go Normal file
View File

@ -0,0 +1,21 @@
package cron
import (
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
)
func AddCronGroup(svc *svc.ServiceContext) {
// 同步任务信息到core端
svc.Cron.AddFunc("*/5 * * * * ?", func() {
SyncTask(svc)
})
// 推送p端心跳
svc.Cron.AddFunc("*/5 * * * * ?", func() {
ReportHeartbeat(svc.ParticipantRpc)
})
// 推送节点动态信息
svc.Cron.AddFunc("*/59 * * * * ?", func() {
})
}

View File

@ -0,0 +1,32 @@
package cron
import (
"context"
"github.com/zeromicro/go-zero/core/logx"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/rpc/pcmCore"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/utils/tool"
)
func SyncTask(svc *svc.ServiceContext) {
participantId, err := tool.GetParticipantId("etc/kubernetes.yaml")
if err != nil {
return
}
// 查询core端分发下来的任务列表
infoReq := pcmCore.InfoListReq{
Kind: "cloud",
ParticipantId: participantId,
}
_, err = svc.PcmCoreRpc.InfoList(context.Background(), &infoReq)
if err != nil {
logx.Error(err)
return
}
// 提交任务
// 查询Deployment列表
// 遍历core端任务列表信息
}

View File

@ -0,0 +1,144 @@
package tracker
import (
"context"
"github.com/prometheus/client_golang/api"
v1 "github.com/prometheus/client_golang/api/prometheus/v1"
proModel "github.com/prometheus/common/model"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/model"
"gitlink.org.cn/jcce-pcm/utils/tool"
"k8s.io/apimachinery/pkg/util/json"
"time"
)
const ADDRESS = "http://10.101.15.3:32585"
const (
NODE_DISK_AVAIL = "node_filesystem_avail_bytes{fstype=~\"ext4|xfs\"}"
NODE_DISK_TOTAL = "node_filesystem_size_bytes{fstype=~\"ext4|xfs\"}"
NODE_MEMORY_AVAIL = "node_memory_MemAvailable_bytes"
NODE_MEMORY_TOTAL = "node_memory_MemTotal_bytes"
NODE_CPU_TOTAL_COUNT = "node:node_num_cpu:sum"
NODE_CPU_USAGE = "sum by (instance)(increase(node_cpu_seconds_total{mode=\"idle\"}[5m])) / sum by (instance)(increase(node_cpu_seconds_total[5m]))"
)
func MetricsQuery(statement string) (*proModel.Vector, error) {
client, err := api.NewClient(api.Config{
Address: ADDRESS,
})
if err != nil {
return nil, err
}
v1api := v1.NewAPI(client)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
metrics, _, err := v1api.Query(ctx, statement, time.Now(), v1.WithTimeout(5*time.Second))
marshal, err := json.Marshal(metrics)
if err != nil {
return nil, err
}
vector := proModel.Vector{}
json.Unmarshal(marshal, &vector)
return &vector, nil
}
// NodeDiskAvail 查询磁盘可用空间
func NodeDiskAvail(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
vectors, err := MetricsQuery(NODE_DISK_AVAIL)
if err != nil {
return nil, err
}
for index := range nodes {
for i := 0; i < vectors.Len(); i++ {
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
nodes[index].DiskAvail = tool.StringToInt64((*vectors)[index].Value.String())
}
}
}
return nodes, nil
}
// NodeDiskTotal 查询磁盘总空间
func NodeDiskTotal(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
vectors, err := MetricsQuery(NODE_DISK_TOTAL)
if err != nil {
return nil, err
}
for index := range nodes {
for i := 0; i < vectors.Len(); i++ {
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
nodes[index].DiskTotal = tool.StringToInt64((*vectors)[index].Value.String())
}
}
}
return nodes, nil
}
// NodeMemoryTotal 查询内存总大小
func NodeMemoryTotal(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
vectors, err := MetricsQuery(NODE_MEMORY_TOTAL)
if err != nil {
return nil, err
}
for index := range nodes {
for i := 0; i < vectors.Len(); i++ {
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
nodes[index].MemTotal = tool.StringToInt64((*vectors)[index].Value.String())
}
}
}
return nodes, nil
}
// NodeMemoryAvail 查询内存可用大小
func NodeMemoryAvail(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
vectors, err := MetricsQuery(NODE_MEMORY_AVAIL)
if err != nil {
return nil, err
}
for index := range nodes {
for i := 0; i < vectors.Len(); i++ {
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
nodes[index].MemAvail = tool.StringToInt64((*vectors)[index].Value.String())
}
}
}
return nodes, nil
}
// NodeCpuTotalCount 查询cpu总核数
func NodeCpuTotalCount(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
vectors, err := MetricsQuery(NODE_CPU_TOTAL_COUNT)
if err != nil {
return nil, err
}
for index := range nodes {
for i := 0; i < vectors.Len(); i++ {
if string((*vectors)[i].Metric["node"]) == nodes[index].NodeName {
nodes[index].CpuTotal = tool.StringToInt64((*vectors)[index].Value.String())
}
}
}
return nodes, nil
}
// NodeCpuUsage 查询cpu使用率
func NodeCpuUsage(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
vectors, err := MetricsQuery(NODE_CPU_USAGE)
if err != nil {
return nil, err
}
for index := range nodes {
for i := 0; i < vectors.Len(); i++ {
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
nodes[index].CpuUsable = tool.StringToFloat64((*vectors)[index].Value.String())
}
}
}
return nodes, nil
}

View File

@ -0,0 +1,39 @@
package tracker
import (
"context"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/model"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/rpc/client/participantservice"
"gitlink.org.cn/jcce-pcm/utils/tool"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
func NodesDynamicInfo(participantRpc participantservice.ParticipantService, kubeClient *kubernetes.Clientset) ([]*model.ScNodeAvailInfo, error) {
var nodes []*model.ScNodeAvailInfo
nodeList, err := kubeClient.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{})
if err != nil {
return nil, err
}
for _, node := range nodeList.Items {
nodePhy := model.ScNodeAvailInfo{
NodeName: node.ObjectMeta.Name,
}
nodes = append(nodes, &nodePhy)
}
NodeDiskAvail(nodes)
NodeDiskTotal(nodes)
NodeMemoryTotal(nodes)
NodeMemoryAvail(nodes)
NodeCpuUsage(nodes)
NodeCpuTotalCount(nodes)
nodeAvailInfo := []*participantservice.NodeAvailInfo{}
tool.Convert(nodes, &nodeAvailInfo)
req := participantservice.ParticipantAvailReq{
NodeAvailInfo: nodeAvailInfo,
}
participantRpc.ReportAvailable(context.Background(), &req)
return nodes, nil
}

View File

@ -0,0 +1,209 @@
// Code generated by goctl. DO NOT EDIT.
// Source: pcm-openstack.proto
package server
import (
"context"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/logic"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
)
type OpenstackServer struct {
svcCtx *svc.ServiceContext
openstack.UnimplementedOpenstackServer
}
func NewOpenstackServer(svcCtx *svc.ServiceContext) *OpenstackServer {
return &OpenstackServer{
svcCtx: svcCtx,
}
}
// Overview
func (s *OpenstackServer) GetComputeLimits(ctx context.Context, in *openstack.GetComputeLimitsReq) (*openstack.GetComputeLimitsResp, error) {
l := logic.NewGetComputeLimitsLogic(ctx, s.svcCtx)
return l.GetComputeLimits(in)
}
func (s *OpenstackServer) GetVolumeLimits(ctx context.Context, in *openstack.GetVolumeLimitsReq) (*openstack.GetVolumeLimitsResp, error) {
l := logic.NewGetVolumeLimitsLogic(ctx, s.svcCtx)
return l.GetVolumeLimits(in)
}
// Servers
func (s *OpenstackServer) ListServers(ctx context.Context, in *openstack.ListServersReq) (*openstack.ListServersResp, error) {
l := logic.NewListServersLogic(ctx, s.svcCtx)
return l.ListServers(in)
}
func (s *OpenstackServer) ListServersDetailed(ctx context.Context, in *openstack.ListServersDetailedReq) (*openstack.ListServersDetailedResp, error) {
l := logic.NewListServersDetailedLogic(ctx, s.svcCtx)
return l.ListServersDetailed(in)
}
func (s *OpenstackServer) CreateServer(ctx context.Context, in *openstack.CreateServerReq) (*openstack.CreateServerResp, error) {
l := logic.NewCreateServerLogic(ctx, s.svcCtx)
return l.CreateServer(in)
}
func (s *OpenstackServer) DeleteServer(ctx context.Context, in *openstack.DeleteServerReq) (*openstack.DeleteServerResp, error) {
l := logic.NewDeleteServerLogic(ctx, s.svcCtx)
return l.DeleteServer(in)
}
func (s *OpenstackServer) GetServersDetailedById(ctx context.Context, in *openstack.GetServersDetailedByIdReq) (*openstack.GetServersDetailedByIdResp, error) {
l := logic.NewGetServersDetailedByIdLogic(ctx, s.svcCtx)
return l.GetServersDetailedById(in)
}
func (s *OpenstackServer) UpdateServer(ctx context.Context, in *openstack.UpdateServerReq) (*openstack.UpdateServerResp, error) {
l := logic.NewUpdateServerLogic(ctx, s.svcCtx)
return l.UpdateServer(in)
}
func (s *OpenstackServer) StartServer(ctx context.Context, in *openstack.StartServerReq) (*openstack.StartServerResp, error) {
l := logic.NewStartServerLogic(ctx, s.svcCtx)
return l.StartServer(in)
}
func (s *OpenstackServer) StopServer(ctx context.Context, in *openstack.StopServerReq) (*openstack.StopServerResp, error) {
l := logic.NewStopServerLogic(ctx, s.svcCtx)
return l.StopServer(in)
}
func (s *OpenstackServer) RebootServer(ctx context.Context, in *openstack.RebootServerReq) (*openstack.RebootServerResp, error) {
l := logic.NewRebootServerLogic(ctx, s.svcCtx)
return l.RebootServer(in)
}
func (s *OpenstackServer) PauseServer(ctx context.Context, in *openstack.PauseServerReq) (*openstack.PauseServerResp, error) {
l := logic.NewPauseServerLogic(ctx, s.svcCtx)
return l.PauseServer(in)
}
func (s *OpenstackServer) ListFlavorsDetail(ctx context.Context, in *openstack.ListFlavorsDetailReq) (*openstack.ListFlavorsDetailResp, error) {
l := logic.NewListFlavorsDetailLogic(ctx, s.svcCtx)
return l.ListFlavorsDetail(in)
}
// network
func (s *OpenstackServer) ShowNetworkDetails(ctx context.Context, in *openstack.ShowNetworkDetailsReq) (*openstack.ShowNetworkDetailsResp, error) {
l := logic.NewShowNetworkDetailsLogic(ctx, s.svcCtx)
return l.ShowNetworkDetails(in)
}
func (s *OpenstackServer) UpdateNetwork(ctx context.Context, in *openstack.UpdateNetworkReq) (*openstack.UpdateNetworkResp, error) {
l := logic.NewUpdateNetworkLogic(ctx, s.svcCtx)
return l.UpdateNetwork(in)
}
func (s *OpenstackServer) DeleteNetwork(ctx context.Context, in *openstack.DeleteNetworkReq) (*openstack.DeleteNetworkResp, error) {
l := logic.NewDeleteNetworkLogic(ctx, s.svcCtx)
return l.DeleteNetwork(in)
}
func (s *OpenstackServer) ListNetworks(ctx context.Context, in *openstack.ListNetworksReq) (*openstack.ListNetworksResp, error) {
l := logic.NewListNetworksLogic(ctx, s.svcCtx)
return l.ListNetworks(in)
}
func (s *OpenstackServer) CreateNetwork(ctx context.Context, in *openstack.CreateNetworkReq) (*openstack.CreateNetworkResp, error) {
l := logic.NewCreateNetworkLogic(ctx, s.svcCtx)
return l.CreateNetwork(in)
}
func (s *OpenstackServer) BulkCreateNetworks(ctx context.Context, in *openstack.BulkCreateNetworksReq) (*openstack.BulkCreateNetworksResp, error) {
l := logic.NewBulkCreateNetworksLogic(ctx, s.svcCtx)
return l.BulkCreateNetworks(in)
}
func (s *OpenstackServer) CreateSubnet(ctx context.Context, in *openstack.CreateSubnetReq) (*openstack.CreateSubnetResp, error) {
l := logic.NewCreateSubnetLogic(ctx, s.svcCtx)
return l.CreateSubnet(in)
}
// Images from glance
func (s *OpenstackServer) CreateImage(ctx context.Context, in *openstack.CreateImageReq) (*openstack.CreateImageResp, error) {
l := logic.NewCreateImageLogic(ctx, s.svcCtx)
return l.CreateImage(in)
}
func (s *OpenstackServer) ListImages(ctx context.Context, in *openstack.ListImagesReq) (*openstack.ListImagesResp, error) {
l := logic.NewListImagesLogic(ctx, s.svcCtx)
return l.ListImages(in)
}
func (s *OpenstackServer) DeleteImage(ctx context.Context, in *openstack.DeleteImageReq) (*openstack.DeleteImageResp, error) {
l := logic.NewDeleteImageLogic(ctx, s.svcCtx)
return l.DeleteImage(in)
}
func (s *OpenstackServer) UploadImage(ctx context.Context, in *openstack.UploadOsImageReq) (*openstack.UploadOsImageResp, error) {
l := logic.NewUploadImageLogic(ctx, s.svcCtx)
return l.UploadImage(in)
}
// Bare Metal
func (s *OpenstackServer) ListNodes(ctx context.Context, in *openstack.ListNodesReq) (*openstack.ListNodesResp, error) {
l := logic.NewListNodesLogic(ctx, s.svcCtx)
return l.ListNodes(in)
}
func (s *OpenstackServer) CreateNode(ctx context.Context, in *openstack.CreateNodeReq) (*openstack.CreateNodeResp, error) {
l := logic.NewCreateNodeLogic(ctx, s.svcCtx)
return l.CreateNode(in)
}
func (s *OpenstackServer) DeleteNode(ctx context.Context, in *openstack.DeleteNodeReq) (*openstack.DeleteNodeResp, error) {
l := logic.NewDeleteNodeLogic(ctx, s.svcCtx)
return l.DeleteNode(in)
}
func (s *OpenstackServer) ShowNodeDetails(ctx context.Context, in *openstack.ShowNodeDetailsReq) (*openstack.ShowNodeDetailsResp, error) {
l := logic.NewShowNodeDetailsLogic(ctx, s.svcCtx)
return l.ShowNodeDetails(in)
}
// cinder(block storage) volumes
func (s *OpenstackServer) ListVolumes(ctx context.Context, in *openstack.ListVolumesReq) (*openstack.ListVolumesResp, error) {
l := logic.NewListVolumesLogic(ctx, s.svcCtx)
return l.ListVolumes(in)
}
func (s *OpenstackServer) ListVolumesDetail(ctx context.Context, in *openstack.ListVolumesDetailReq) (*openstack.ListVolumesDetailResp, error) {
l := logic.NewListVolumesDetailLogic(ctx, s.svcCtx)
return l.ListVolumesDetail(in)
}
func (s *OpenstackServer) CreateVolume(ctx context.Context, in *openstack.CreateVolumeReq) (*openstack.CreateVolumeResp, error) {
l := logic.NewCreateVolumeLogic(ctx, s.svcCtx)
return l.CreateVolume(in)
}
func (s *OpenstackServer) DeleteVolume(ctx context.Context, in *openstack.DeleteVolumeReq) (*openstack.DeleteVolumeResp, error) {
l := logic.NewDeleteVolumeLogic(ctx, s.svcCtx)
return l.DeleteVolume(in)
}
func (s *OpenstackServer) UpdateVolume(ctx context.Context, in *openstack.UpdateVolumeReq) (*openstack.UpdateVolumeResp, error) {
l := logic.NewUpdateVolumeLogic(ctx, s.svcCtx)
return l.UpdateVolume(in)
}
func (s *OpenstackServer) ListVolumeTypes(ctx context.Context, in *openstack.ListVolumeTypesReq) (*openstack.ListVolumeTypesResp, error) {
l := logic.NewListVolumeTypesLogic(ctx, s.svcCtx)
return l.ListVolumeTypes(in)
}
func (s *OpenstackServer) CreateVolumeTypes(ctx context.Context, in *openstack.CreateTypeReq) (*openstack.CreateTypeResp, error) {
l := logic.NewCreateVolumeTypesLogic(ctx, s.svcCtx)
return l.CreateVolumeTypes(in)
}
func (s *OpenstackServer) DeleteVolumeTypes(ctx context.Context, in *openstack.DeleteTypeReq) (*openstack.DeleteTypeResp, error) {
l := logic.NewDeleteVolumeTypesLogic(ctx, s.svcCtx)
return l.DeleteVolumeTypes(in)
}

View File

@ -0,0 +1,25 @@
package svc
import (
"github.com/robfig/cron/v3"
"github.com/zeromicro/go-zero/zrpc"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/rpc/client/participantservice"
"gitlink.org.cn/jcce-pcm/pcm-coordinator/rpc/client/pcmcore"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
)
type ServiceContext struct {
Config config.Config
Cron *cron.Cron
PcmCoreRpc pcmcore.PcmCore
ParticipantRpc participantservice.ParticipantService
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Cron: cron.New(cron.WithSeconds()),
Config: c,
PcmCoreRpc: pcmcore.NewPcmCore(zrpc.MustNewClient(c.PcmCoreRpcConf)),
ParticipantRpc: participantservice.NewParticipantService(zrpc.MustNewClient(c.PcmCoreRpcConf)),
}
}

22835
openstack/pcm-openstack.pb.go Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,460 @@
// Code generated by goctl. DO NOT EDIT.
// Source: pcm-openstack.proto
package openstackclient
import (
"context"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"github.com/zeromicro/go-zero/zrpc"
"google.golang.org/grpc"
)
type (
AllocationPools = openstack.AllocationPools
BulkCreateNetworksReq = openstack.BulkCreateNetworksReq
BulkCreateNetworksResp = openstack.BulkCreateNetworksResp
CreateImageReq = openstack.CreateImageReq
CreateImageResp = openstack.CreateImageResp
CreateImageResp_Locations = openstack.CreateImageResp_Locations
CreateImageResp_Tags = openstack.CreateImageResp_Tags
CreateNetworkReq = openstack.CreateNetworkReq
CreateNetworkResp = openstack.CreateNetworkResp
CreateNodeReq = openstack.CreateNodeReq
CreateNodeReq_DriverInfo = openstack.CreateNodeReq_DriverInfo
CreateNodeReq_InstanceInfo = openstack.CreateNodeReq_InstanceInfo
CreateNodeReq_NetworkData = openstack.CreateNodeReq_NetworkData
CreateNodeReq_Properties = openstack.CreateNodeReq_Properties
CreateNodeResp = openstack.CreateNodeResp
CreateNodeResp_CleanStep = openstack.CreateNodeResp_CleanStep
CreateNodeResp_DeployStep = openstack.CreateNodeResp_DeployStep
CreateNodeResp_DriverInfo = openstack.CreateNodeResp_DriverInfo
CreateNodeResp_DriverInternalInfo = openstack.CreateNodeResp_DriverInternalInfo
CreateNodeResp_Extra = openstack.CreateNodeResp_Extra
CreateNodeResp_InstanceInfo = openstack.CreateNodeResp_InstanceInfo
CreateNodeResp_Links = openstack.CreateNodeResp_Links
CreateNodeResp_NetworkData = openstack.CreateNodeResp_NetworkData
CreateNodeResp_Portgroups = openstack.CreateNodeResp_Portgroups
CreateNodeResp_Ports = openstack.CreateNodeResp_Ports
CreateNodeResp_Properties = openstack.CreateNodeResp_Properties
CreateNodeResp_RaidConfig = openstack.CreateNodeResp_RaidConfig
CreateNodeResp_States = openstack.CreateNodeResp_States
CreateNodeResp_TargetRaidConfig = openstack.CreateNodeResp_TargetRaidConfig
CreateNodeResp_Volume = openstack.CreateNodeResp_Volume
CreateServerReq = openstack.CreateServerReq
CreateServerReq_BlockDeviceMappingV2 = openstack.CreateServerReq_BlockDeviceMappingV2
CreateServerReq_Metadata = openstack.CreateServerReq_Metadata
CreateServerReq_Networks = openstack.CreateServerReq_Networks
CreateServerReq_OsSchHntSchedulerHints = openstack.CreateServerReq_OsSchHntSchedulerHints
CreateServerReq_Personality = openstack.CreateServerReq_Personality
CreateServerReq_SecurityGroups = openstack.CreateServerReq_SecurityGroups
CreateServerReq_Server = openstack.CreateServerReq_Server
CreateServerResp = openstack.CreateServerResp
CreateServerResp_Links = openstack.CreateServerResp_Links
CreateServerResp_SecurityGroups = openstack.CreateServerResp_SecurityGroups
CreateServerResp_Server = openstack.CreateServerResp_Server
CreateSubnetReq = openstack.CreateSubnetReq
CreateSubnetResp = openstack.CreateSubnetResp
CreateTypeReq = openstack.CreateTypeReq
CreateTypeReq_ExtraSpecs = openstack.CreateTypeReq_ExtraSpecs
CreateTypeReq_VolumeType = openstack.CreateTypeReq_VolumeType
CreateTypeResp = openstack.CreateTypeResp
CreateTypeResp_ExtraSpecs = openstack.CreateTypeResp_ExtraSpecs
CreateTypeResp_VolumeType = openstack.CreateTypeResp_VolumeType
CreateVolumeReq = openstack.CreateVolumeReq
CreateVolumeReq_Metadata = openstack.CreateVolumeReq_Metadata
CreateVolumeReq_Volume = openstack.CreateVolumeReq_Volume
CreateVolumeResp = openstack.CreateVolumeResp
CreateVolumeResp_Attachments = openstack.CreateVolumeResp_Attachments
CreateVolumeResp_Links = openstack.CreateVolumeResp_Links
CreateVolumeResp_Metadata = openstack.CreateVolumeResp_Metadata
CreateVolumeResp_Volume = openstack.CreateVolumeResp_Volume
DeleteImageReq = openstack.DeleteImageReq
DeleteImageResp = openstack.DeleteImageResp
DeleteNetworkReq = openstack.DeleteNetworkReq
DeleteNetworkResp = openstack.DeleteNetworkResp
DeleteNodeReq = openstack.DeleteNodeReq
DeleteNodeResp = openstack.DeleteNodeResp
DeleteServerReq = openstack.DeleteServerReq
DeleteServerResp = openstack.DeleteServerResp
DeleteTypeReq = openstack.DeleteTypeReq
DeleteTypeResp = openstack.DeleteTypeResp
DeleteVolumeReq = openstack.DeleteVolumeReq
DeleteVolumeResp = openstack.DeleteVolumeResp
GetComputeLimitsReq = openstack.GetComputeLimitsReq
GetComputeLimitsResp = openstack.GetComputeLimitsResp
GetComputeLimitsResp_Absolute = openstack.GetComputeLimitsResp_Absolute
GetComputeLimitsResp_Limits = openstack.GetComputeLimitsResp_Limits
GetComputeLimitsResp_Rate = openstack.GetComputeLimitsResp_Rate
GetServersDetailedByIdReq = openstack.GetServersDetailedByIdReq
GetServersDetailedByIdResp = openstack.GetServersDetailedByIdResp
GetServersDetailedByIdResp_Addresses = openstack.GetServersDetailedByIdResp_Addresses
GetServersDetailedByIdResp_ExtraSpecs = openstack.GetServersDetailedByIdResp_ExtraSpecs
GetServersDetailedByIdResp_Fault = openstack.GetServersDetailedByIdResp_Fault
GetServersDetailedByIdResp_Flavor = openstack.GetServersDetailedByIdResp_Flavor
GetServersDetailedByIdResp_Image = openstack.GetServersDetailedByIdResp_Image
GetServersDetailedByIdResp_Links = openstack.GetServersDetailedByIdResp_Links
GetServersDetailedByIdResp_Links1 = openstack.GetServersDetailedByIdResp_Links1
GetServersDetailedByIdResp_Metadata = openstack.GetServersDetailedByIdResp_Metadata
GetServersDetailedByIdResp_OsExtendedVolumesVolumesAttached = openstack.GetServersDetailedByIdResp_OsExtendedVolumesVolumesAttached
GetServersDetailedByIdResp_Private = openstack.GetServersDetailedByIdResp_Private
GetServersDetailedByIdResp_SecurityGroups = openstack.GetServersDetailedByIdResp_SecurityGroups
GetServersDetailedByIdResp_Servers = openstack.GetServersDetailedByIdResp_Servers
GetVolumeLimitsReq = openstack.GetVolumeLimitsReq
GetVolumeLimitsResp = openstack.GetVolumeLimitsResp
GetVolumeLimitsResp_Absolute = openstack.GetVolumeLimitsResp_Absolute
GetVolumeLimitsResp_Limits = openstack.GetVolumeLimitsResp_Limits
GetVolumeLimitsResp_Rate = openstack.GetVolumeLimitsResp_Rate
ListFlavorsDetailReq = openstack.ListFlavorsDetailReq
ListFlavorsDetailResp = openstack.ListFlavorsDetailResp
ListFlavorsDetailResp_ExtraSpecs = openstack.ListFlavorsDetailResp_ExtraSpecs
ListFlavorsDetailResp_Flavor = openstack.ListFlavorsDetailResp_Flavor
ListFlavorsDetailResp_Links = openstack.ListFlavorsDetailResp_Links
ListImagesReq = openstack.ListImagesReq
ListImagesResp = openstack.ListImagesResp
ListImagesResp_Images = openstack.ListImagesResp_Images
ListImagesResp_Tags = openstack.ListImagesResp_Tags
ListNetworksReq = openstack.ListNetworksReq
ListNetworksResp = openstack.ListNetworksResp
ListNodesReq = openstack.ListNodesReq
ListNodesResp = openstack.ListNodesResp
ListNodesResp_Links = openstack.ListNodesResp_Links
ListNodesResp_Nodes = openstack.ListNodesResp_Nodes
ListServersDetailedReq = openstack.ListServersDetailedReq
ListServersDetailedResp = openstack.ListServersDetailedResp
ListServersDetailedResp_Addresses = openstack.ListServersDetailedResp_Addresses
ListServersDetailedResp_ExtraSpecs = openstack.ListServersDetailedResp_ExtraSpecs
ListServersDetailedResp_Flavor = openstack.ListServersDetailedResp_Flavor
ListServersDetailedResp_Image = openstack.ListServersDetailedResp_Image
ListServersDetailedResp_Links = openstack.ListServersDetailedResp_Links
ListServersDetailedResp_Links1 = openstack.ListServersDetailedResp_Links1
ListServersDetailedResp_Metadata = openstack.ListServersDetailedResp_Metadata
ListServersDetailedResp_Private = openstack.ListServersDetailedResp_Private
ListServersDetailedResp_SecurityGroups = openstack.ListServersDetailedResp_SecurityGroups
ListServersDetailedResp_Servers = openstack.ListServersDetailedResp_Servers
ListServersReq = openstack.ListServersReq
ListServersResp = openstack.ListServersResp
ListServersResp_Links = openstack.ListServersResp_Links
ListServersResp_Servers = openstack.ListServersResp_Servers
ListServersResp_ServersLinks = openstack.ListServersResp_ServersLinks
ListVolumeTypesReq = openstack.ListVolumeTypesReq
ListVolumeTypesResp = openstack.ListVolumeTypesResp
ListVolumeTypesResp_ExtraSpecs = openstack.ListVolumeTypesResp_ExtraSpecs
ListVolumeTypesResp_VolumeTypes = openstack.ListVolumeTypesResp_VolumeTypes
ListVolumesDetailReq = openstack.ListVolumesDetailReq
ListVolumesDetailResp = openstack.ListVolumesDetailResp
ListVolumesDetailResp_Attachments = openstack.ListVolumesDetailResp_Attachments
ListVolumesDetailResp_Links = openstack.ListVolumesDetailResp_Links
ListVolumesDetailResp_Metadata = openstack.ListVolumesDetailResp_Metadata
ListVolumesDetailResp_VolumeDetail = openstack.ListVolumesDetailResp_VolumeDetail
ListVolumesReq = openstack.ListVolumesReq
ListVolumesResp = openstack.ListVolumesResp
ListVolumesResp_Links = openstack.ListVolumesResp_Links
ListVolumesResp_Volumes = openstack.ListVolumesResp_Volumes
Network = openstack.Network
PauseServerReq = openstack.PauseServerReq
PauseServerReq_OsPause = openstack.PauseServerReq_OsPause
PauseServerResp = openstack.PauseServerResp
RebootServerReq = openstack.RebootServerReq
RebootServerReq_Reboot = openstack.RebootServerReq_Reboot
RebootServerResp = openstack.RebootServerResp
Segment = openstack.Segment
ShowNetworkDetailsReq = openstack.ShowNetworkDetailsReq
ShowNetworkDetailsResp = openstack.ShowNetworkDetailsResp
ShowNodeDetailsReq = openstack.ShowNodeDetailsReq
ShowNodeDetailsReq_Fields = openstack.ShowNodeDetailsReq_Fields
ShowNodeDetailsResp = openstack.ShowNodeDetailsResp
ShowNodeDetailsResp_CleanStep = openstack.ShowNodeDetailsResp_CleanStep
ShowNodeDetailsResp_DeployStep = openstack.ShowNodeDetailsResp_DeployStep
ShowNodeDetailsResp_DriverInfo = openstack.ShowNodeDetailsResp_DriverInfo
ShowNodeDetailsResp_DriverInternalInfo = openstack.ShowNodeDetailsResp_DriverInternalInfo
ShowNodeDetailsResp_Extra = openstack.ShowNodeDetailsResp_Extra
ShowNodeDetailsResp_InstanceInfo = openstack.ShowNodeDetailsResp_InstanceInfo
ShowNodeDetailsResp_Links = openstack.ShowNodeDetailsResp_Links
ShowNodeDetailsResp_NetworkData = openstack.ShowNodeDetailsResp_NetworkData
ShowNodeDetailsResp_Portgroups = openstack.ShowNodeDetailsResp_Portgroups
ShowNodeDetailsResp_Ports = openstack.ShowNodeDetailsResp_Ports
ShowNodeDetailsResp_Properties = openstack.ShowNodeDetailsResp_Properties
ShowNodeDetailsResp_RaidConfig = openstack.ShowNodeDetailsResp_RaidConfig
ShowNodeDetailsResp_States = openstack.ShowNodeDetailsResp_States
ShowNodeDetailsResp_TargetRaidConfig = openstack.ShowNodeDetailsResp_TargetRaidConfig
ShowNodeDetailsResp_Traits = openstack.ShowNodeDetailsResp_Traits
ShowNodeDetailsResp_Volume = openstack.ShowNodeDetailsResp_Volume
StartServerReq = openstack.StartServerReq
StartServerReq_OsStart = openstack.StartServerReq_OsStart
StartServerResp = openstack.StartServerResp
StopServerReq = openstack.StopServerReq
StopServerReq_OsStop = openstack.StopServerReq_OsStop
StopServerResp = openstack.StopServerResp
Subnet = openstack.Subnet
SubnetResp = openstack.SubnetResp
Tags = openstack.Tags
UpdateNetworkReq = openstack.UpdateNetworkReq
UpdateNetworkResp = openstack.UpdateNetworkResp
UpdateServerReq = openstack.UpdateServerReq
UpdateServerReq_Server = openstack.UpdateServerReq_Server
UpdateServerResp = openstack.UpdateServerResp
UpdateServerResp_Addresses = openstack.UpdateServerResp_Addresses
UpdateServerResp_ExtraSpecs = openstack.UpdateServerResp_ExtraSpecs
UpdateServerResp_Flavor = openstack.UpdateServerResp_Flavor
UpdateServerResp_Image = openstack.UpdateServerResp_Image
UpdateServerResp_Links = openstack.UpdateServerResp_Links
UpdateServerResp_Links1 = openstack.UpdateServerResp_Links1
UpdateServerResp_Metadata = openstack.UpdateServerResp_Metadata
UpdateServerResp_Private = openstack.UpdateServerResp_Private
UpdateServerResp_SecurityGroups = openstack.UpdateServerResp_SecurityGroups
UpdateServerResp_Server = openstack.UpdateServerResp_Server
UpdateVolumeReq = openstack.UpdateVolumeReq
UpdateVolumeReq_Metadata = openstack.UpdateVolumeReq_Metadata
UpdateVolumeReq_Volume = openstack.UpdateVolumeReq_Volume
UpdateVolumeResp = openstack.UpdateVolumeResp
UpdateVolumeResp_Attachments = openstack.UpdateVolumeResp_Attachments
UpdateVolumeResp_Links = openstack.UpdateVolumeResp_Links
UpdateVolumeResp_Metadata = openstack.UpdateVolumeResp_Metadata
UpdateVolumeResp_Volume = openstack.UpdateVolumeResp_Volume
UploadOsImageReq = openstack.UploadOsImageReq
UploadOsImageResp = openstack.UploadOsImageResp
Openstack interface {
// Overview
GetComputeLimits(ctx context.Context, in *GetComputeLimitsReq, opts ...grpc.CallOption) (*GetComputeLimitsResp, error)
GetVolumeLimits(ctx context.Context, in *GetVolumeLimitsReq, opts ...grpc.CallOption) (*GetVolumeLimitsResp, error)
// Servers
ListServers(ctx context.Context, in *ListServersReq, opts ...grpc.CallOption) (*ListServersResp, error)
ListServersDetailed(ctx context.Context, in *ListServersDetailedReq, opts ...grpc.CallOption) (*ListServersDetailedResp, error)
CreateServer(ctx context.Context, in *CreateServerReq, opts ...grpc.CallOption) (*CreateServerResp, error)
DeleteServer(ctx context.Context, in *DeleteServerReq, opts ...grpc.CallOption) (*DeleteServerResp, error)
GetServersDetailedById(ctx context.Context, in *GetServersDetailedByIdReq, opts ...grpc.CallOption) (*GetServersDetailedByIdResp, error)
UpdateServer(ctx context.Context, in *UpdateServerReq, opts ...grpc.CallOption) (*UpdateServerResp, error)
StartServer(ctx context.Context, in *StartServerReq, opts ...grpc.CallOption) (*StartServerResp, error)
StopServer(ctx context.Context, in *StopServerReq, opts ...grpc.CallOption) (*StopServerResp, error)
RebootServer(ctx context.Context, in *RebootServerReq, opts ...grpc.CallOption) (*RebootServerResp, error)
PauseServer(ctx context.Context, in *PauseServerReq, opts ...grpc.CallOption) (*PauseServerResp, error)
ListFlavorsDetail(ctx context.Context, in *ListFlavorsDetailReq, opts ...grpc.CallOption) (*ListFlavorsDetailResp, error)
// network
ShowNetworkDetails(ctx context.Context, in *ShowNetworkDetailsReq, opts ...grpc.CallOption) (*ShowNetworkDetailsResp, error)
UpdateNetwork(ctx context.Context, in *UpdateNetworkReq, opts ...grpc.CallOption) (*UpdateNetworkResp, error)
DeleteNetwork(ctx context.Context, in *DeleteNetworkReq, opts ...grpc.CallOption) (*DeleteNetworkResp, error)
ListNetworks(ctx context.Context, in *ListNetworksReq, opts ...grpc.CallOption) (*ListNetworksResp, error)
CreateNetwork(ctx context.Context, in *CreateNetworkReq, opts ...grpc.CallOption) (*CreateNetworkResp, error)
BulkCreateNetworks(ctx context.Context, in *BulkCreateNetworksReq, opts ...grpc.CallOption) (*BulkCreateNetworksResp, error)
CreateSubnet(ctx context.Context, in *CreateSubnetReq, opts ...grpc.CallOption) (*CreateSubnetResp, error)
// Images from glance
CreateImage(ctx context.Context, in *CreateImageReq, opts ...grpc.CallOption) (*CreateImageResp, error)
ListImages(ctx context.Context, in *ListImagesReq, opts ...grpc.CallOption) (*ListImagesResp, error)
DeleteImage(ctx context.Context, in *DeleteImageReq, opts ...grpc.CallOption) (*DeleteImageResp, error)
UploadImage(ctx context.Context, in *UploadOsImageReq, opts ...grpc.CallOption) (*UploadOsImageResp, error)
// Bare Metal
ListNodes(ctx context.Context, in *ListNodesReq, opts ...grpc.CallOption) (*ListNodesResp, error)
CreateNode(ctx context.Context, in *CreateNodeReq, opts ...grpc.CallOption) (*CreateNodeResp, error)
DeleteNode(ctx context.Context, in *DeleteNodeReq, opts ...grpc.CallOption) (*DeleteNodeResp, error)
ShowNodeDetails(ctx context.Context, in *ShowNodeDetailsReq, opts ...grpc.CallOption) (*ShowNodeDetailsResp, error)
// cinder(block storage) volumes
ListVolumes(ctx context.Context, in *ListVolumesReq, opts ...grpc.CallOption) (*ListVolumesResp, error)
ListVolumesDetail(ctx context.Context, in *ListVolumesDetailReq, opts ...grpc.CallOption) (*ListVolumesDetailResp, error)
CreateVolume(ctx context.Context, in *CreateVolumeReq, opts ...grpc.CallOption) (*CreateVolumeResp, error)
DeleteVolume(ctx context.Context, in *DeleteVolumeReq, opts ...grpc.CallOption) (*DeleteVolumeResp, error)
UpdateVolume(ctx context.Context, in *UpdateVolumeReq, opts ...grpc.CallOption) (*UpdateVolumeResp, error)
ListVolumeTypes(ctx context.Context, in *ListVolumeTypesReq, opts ...grpc.CallOption) (*ListVolumeTypesResp, error)
CreateVolumeTypes(ctx context.Context, in *CreateTypeReq, opts ...grpc.CallOption) (*CreateTypeResp, error)
DeleteVolumeTypes(ctx context.Context, in *DeleteTypeReq, opts ...grpc.CallOption) (*DeleteTypeResp, error)
}
defaultOpenstack struct {
cli zrpc.Client
}
)
func NewOpenstack(cli zrpc.Client) Openstack {
return &defaultOpenstack{
cli: cli,
}
}
// Overview
func (m *defaultOpenstack) GetComputeLimits(ctx context.Context, in *GetComputeLimitsReq, opts ...grpc.CallOption) (*GetComputeLimitsResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.GetComputeLimits(ctx, in, opts...)
}
func (m *defaultOpenstack) GetVolumeLimits(ctx context.Context, in *GetVolumeLimitsReq, opts ...grpc.CallOption) (*GetVolumeLimitsResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.GetVolumeLimits(ctx, in, opts...)
}
// Servers
func (m *defaultOpenstack) ListServers(ctx context.Context, in *ListServersReq, opts ...grpc.CallOption) (*ListServersResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListServers(ctx, in, opts...)
}
func (m *defaultOpenstack) ListServersDetailed(ctx context.Context, in *ListServersDetailedReq, opts ...grpc.CallOption) (*ListServersDetailedResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListServersDetailed(ctx, in, opts...)
}
func (m *defaultOpenstack) CreateServer(ctx context.Context, in *CreateServerReq, opts ...grpc.CallOption) (*CreateServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateServer(ctx, in, opts...)
}
func (m *defaultOpenstack) DeleteServer(ctx context.Context, in *DeleteServerReq, opts ...grpc.CallOption) (*DeleteServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.DeleteServer(ctx, in, opts...)
}
func (m *defaultOpenstack) GetServersDetailedById(ctx context.Context, in *GetServersDetailedByIdReq, opts ...grpc.CallOption) (*GetServersDetailedByIdResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.GetServersDetailedById(ctx, in, opts...)
}
func (m *defaultOpenstack) UpdateServer(ctx context.Context, in *UpdateServerReq, opts ...grpc.CallOption) (*UpdateServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.UpdateServer(ctx, in, opts...)
}
func (m *defaultOpenstack) StartServer(ctx context.Context, in *StartServerReq, opts ...grpc.CallOption) (*StartServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.StartServer(ctx, in, opts...)
}
func (m *defaultOpenstack) StopServer(ctx context.Context, in *StopServerReq, opts ...grpc.CallOption) (*StopServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.StopServer(ctx, in, opts...)
}
func (m *defaultOpenstack) RebootServer(ctx context.Context, in *RebootServerReq, opts ...grpc.CallOption) (*RebootServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.RebootServer(ctx, in, opts...)
}
func (m *defaultOpenstack) PauseServer(ctx context.Context, in *PauseServerReq, opts ...grpc.CallOption) (*PauseServerResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.PauseServer(ctx, in, opts...)
}
func (m *defaultOpenstack) ListFlavorsDetail(ctx context.Context, in *ListFlavorsDetailReq, opts ...grpc.CallOption) (*ListFlavorsDetailResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListFlavorsDetail(ctx, in, opts...)
}
// network
func (m *defaultOpenstack) ShowNetworkDetails(ctx context.Context, in *ShowNetworkDetailsReq, opts ...grpc.CallOption) (*ShowNetworkDetailsResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ShowNetworkDetails(ctx, in, opts...)
}
func (m *defaultOpenstack) UpdateNetwork(ctx context.Context, in *UpdateNetworkReq, opts ...grpc.CallOption) (*UpdateNetworkResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.UpdateNetwork(ctx, in, opts...)
}
func (m *defaultOpenstack) DeleteNetwork(ctx context.Context, in *DeleteNetworkReq, opts ...grpc.CallOption) (*DeleteNetworkResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.DeleteNetwork(ctx, in, opts...)
}
func (m *defaultOpenstack) ListNetworks(ctx context.Context, in *ListNetworksReq, opts ...grpc.CallOption) (*ListNetworksResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListNetworks(ctx, in, opts...)
}
func (m *defaultOpenstack) CreateNetwork(ctx context.Context, in *CreateNetworkReq, opts ...grpc.CallOption) (*CreateNetworkResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateNetwork(ctx, in, opts...)
}
func (m *defaultOpenstack) BulkCreateNetworks(ctx context.Context, in *BulkCreateNetworksReq, opts ...grpc.CallOption) (*BulkCreateNetworksResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.BulkCreateNetworks(ctx, in, opts...)
}
func (m *defaultOpenstack) CreateSubnet(ctx context.Context, in *CreateSubnetReq, opts ...grpc.CallOption) (*CreateSubnetResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateSubnet(ctx, in, opts...)
}
// Images from glance
func (m *defaultOpenstack) CreateImage(ctx context.Context, in *CreateImageReq, opts ...grpc.CallOption) (*CreateImageResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateImage(ctx, in, opts...)
}
func (m *defaultOpenstack) ListImages(ctx context.Context, in *ListImagesReq, opts ...grpc.CallOption) (*ListImagesResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListImages(ctx, in, opts...)
}
func (m *defaultOpenstack) DeleteImage(ctx context.Context, in *DeleteImageReq, opts ...grpc.CallOption) (*DeleteImageResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.DeleteImage(ctx, in, opts...)
}
func (m *defaultOpenstack) UploadImage(ctx context.Context, in *UploadOsImageReq, opts ...grpc.CallOption) (*UploadOsImageResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.UploadImage(ctx, in, opts...)
}
// Bare Metal
func (m *defaultOpenstack) ListNodes(ctx context.Context, in *ListNodesReq, opts ...grpc.CallOption) (*ListNodesResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListNodes(ctx, in, opts...)
}
func (m *defaultOpenstack) CreateNode(ctx context.Context, in *CreateNodeReq, opts ...grpc.CallOption) (*CreateNodeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateNode(ctx, in, opts...)
}
func (m *defaultOpenstack) DeleteNode(ctx context.Context, in *DeleteNodeReq, opts ...grpc.CallOption) (*DeleteNodeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.DeleteNode(ctx, in, opts...)
}
func (m *defaultOpenstack) ShowNodeDetails(ctx context.Context, in *ShowNodeDetailsReq, opts ...grpc.CallOption) (*ShowNodeDetailsResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ShowNodeDetails(ctx, in, opts...)
}
// cinder(block storage) volumes
func (m *defaultOpenstack) ListVolumes(ctx context.Context, in *ListVolumesReq, opts ...grpc.CallOption) (*ListVolumesResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListVolumes(ctx, in, opts...)
}
func (m *defaultOpenstack) ListVolumesDetail(ctx context.Context, in *ListVolumesDetailReq, opts ...grpc.CallOption) (*ListVolumesDetailResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListVolumesDetail(ctx, in, opts...)
}
func (m *defaultOpenstack) CreateVolume(ctx context.Context, in *CreateVolumeReq, opts ...grpc.CallOption) (*CreateVolumeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateVolume(ctx, in, opts...)
}
func (m *defaultOpenstack) DeleteVolume(ctx context.Context, in *DeleteVolumeReq, opts ...grpc.CallOption) (*DeleteVolumeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.DeleteVolume(ctx, in, opts...)
}
func (m *defaultOpenstack) UpdateVolume(ctx context.Context, in *UpdateVolumeReq, opts ...grpc.CallOption) (*UpdateVolumeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.UpdateVolume(ctx, in, opts...)
}
func (m *defaultOpenstack) ListVolumeTypes(ctx context.Context, in *ListVolumeTypesReq, opts ...grpc.CallOption) (*ListVolumeTypesResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.ListVolumeTypes(ctx, in, opts...)
}
func (m *defaultOpenstack) CreateVolumeTypes(ctx context.Context, in *CreateTypeReq, opts ...grpc.CallOption) (*CreateTypeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.CreateVolumeTypes(ctx, in, opts...)
}
func (m *defaultOpenstack) DeleteVolumeTypes(ctx context.Context, in *DeleteTypeReq, opts ...grpc.CallOption) (*DeleteTypeResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.DeleteVolumeTypes(ctx, in, opts...)
}

2034
pb/pcm-openstack.proto Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,70 @@
def JOB_NAME = "${env.JOB_NAME}"
def BUILD_NUMBER = "${env.BUILD_NUMBER}"
def label = "jenkins-${JOB_NAME}-${BUILD_NUMBER}-${UUID.randomUUID().toString()}"
def code_path = "./"
def project_name = "pcm-participant-openstack"
podTemplate(label: label, containers: [
containerTemplate(name: 'golang', image: 'golang:1.20.2-alpine3.17', command: 'cat', ttyEnabled: true),
containerTemplate(name: 'docker', image: 'docker:latest', command: 'cat', ttyEnabled: true),
containerTemplate(name: 'kubectl', image: 'jcce/kubectl:1.23.7', command: 'cat', ttyEnabled: true)
], serviceAccount: 'jenkins', volumes: [
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]) {
node(label) {
def imageEndpoint = "jcce/${project_name}"
stage('拉取代码') {
checkout scmGit(branches: [[name: "*/${branches}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlink-zj', url: 'https://gitlink.org.cn/jcce-pcm/pcm-participant-openstack.git']])
echo "获取commit_id 作为镜像标签"
script {
env.imageTag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
env.image = "${registryUrl}/${imageEndpoint}:${imageTag}"
env.imageLatest = "${registryUrl}/${imageEndpoint}:latest"
}
}
stage('构建 Docker 镜像') {
withCredentials([[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'docker-auth',
usernameVariable: 'DOCKER_USER',
passwordVariable: 'DOCKER_PASSWORD'
]]) {
container('docker') {
echo "构建 Docker 镜像阶段"
sh """
docker login ${registryUrl} -u ${DOCKER_USER} -p ${DOCKER_PASSWORD}
docker build -t ${image} -t ${imageLatest} -f ${code_path}/Dockerfile .
docker push ${image}
docker push ${imageLatest}
docker rmi -f ${image} ${imageLatest}
"""
}
}
}
stage('运行 Kubectl 部署到k8s平台') {
withCredentials([file(credentialsId: 'kubeconfig', variable: 'KUBECONFIG')]) {
container('kubectl') {
echo "部署应用"
sh """
mkdir -p ~/.kube && cp ${KUBECONFIG} ~/.kube/config
cd ${code_path}
sed -i 's#image_name#${image}#' ${project_name}.yaml
sed -i 's#secret_name#${secret_name}#' ${project_name}.yaml
sed -i 's#nacos_host#${nacos_host}#' ${project_name}.yaml
cat ${project_name}.yaml
kubectl apply -f ${project_name}.yaml
"""
}
}
}
stage('清理镜像') {
container('docker') {
sh """
docker rmi -f ${image} ${imageLatest}
"""
// cleanWs notFailBuild: true
}
}
}
}

View File

@ -0,0 +1,67 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: pcm-participant-openstack-deployment
namespace: jcce-system
labels:
k8s-app: pcm-participant-openstack
spec:
replicas: 1
selector:
matchLabels:
k8s-app: pcm-participant-openstack
template:
metadata:
name: pcm-participant-openstack
labels:
k8s-app: pcm-participant-openstack
spec:
hostAliases:
- hostnames:
- nacos.jcce.dev
ip: nacos_host
imagePullSecrets:
- name: secret_name
containers:
- name: pcm-participant-openstack
image: image_name
resources: {}
imagePullPolicy: Always
securityContext:
privileged: false
procMount: Default
ports:
- containerPort: 80
volumeMounts: []
volumes: []
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
---
apiVersion: v1
kind: Service
metadata:
namespace: jcce-system
name: pcm-participant-openstack-service
labels:
k8s-service: pcm-participant-openstack
spec:
selector:
k8s-app: pcm-participant-openstack
ports:
- name: web
protocol: TCP
port: 2010
targetPort: 2010
type: ClusterIP

96
pcmopenstack.go Normal file
View File

@ -0,0 +1,96 @@
package main
import (
"flag"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/service"
"github.com/zeromicro/go-zero/zrpc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/server"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/svc"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/openstack"
"gitlink.org.cn/jcce-pcm/utils/interceptor/rpcserver"
commonConfig "gitlink.org.cn/jcce-pcm/utils/nacos"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
var configFile = flag.String("f", "etc/pcmopenstack.yaml", "the config file")
func main() {
flag.Parse()
var bootstrapConfig commonConfig.BootstrapConfig
conf.MustLoad(*configFile, &bootstrapConfig)
//解析业务配置
var c config.Config
nacosConfig := bootstrapConfig.NacosConfig
serviceConfigContent := nacosConfig.InitConfig(func(data string) {
err := conf.LoadFromYamlBytes([]byte(data), &c)
if err != nil {
panic(err)
}
})
err := conf.LoadFromYamlBytes([]byte(serviceConfigContent), &c)
if err != nil {
panic(err)
}
// start log component
logx.MustSetup(c.LogConf)
// 注册到nacos
nacosConfig.Discovery(&c.RpcServerConf)
ctx := svc.NewServiceContext(c)
ctx.Cron.Start()
s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
openstack.RegisterOpenstackServer(grpcServer, server.NewOpenstackServer(ctx))
if c.Mode == service.DevMode || c.Mode == service.TestMode {
reflection.Register(grpcServer)
}
})
//rpc log
s.AddUnaryInterceptors(rpcserver.LoggerInterceptor)
defer s.Stop()
logx.Infof("Starting rpc server at %s...\n", c.ListenOn)
//logic.InitCron(ctx)
s.Start()
}
/*// PushParticipantInfo 推送p端静态信息
func PushParticipantInfo(config config.Config, participantService participantservice.ParticipantService) {
participantId, err := tool.GetParticipantId(*configFile)
if err != nil {
return
}
// 从配置文件中读取participant标签信息
var labels []*pcmCore.ParticipantLabel
for k, v := range config.Participant.Labels {
labels = append(labels, &pcmCore.ParticipantLabel{
Key: k,
Value: v,
})
}
req := participantservice.ParticipantPhyReq{}
tool.Convert(config.Participant, &req)
req.ParticipantId = participantId
req.LabelInfo = labels
resp, err := participantService.RegisterParticipant(context.Background(), &req)
if err != nil {
return
}
// 更新本地配置文件ParticipantId
tool.UpdateParticipantId(*configFile, strconv.FormatInt(resp.ParticipantId, 10))
}*/