当前位置:网站首页>Go calls several simple examples of openstack API
Go calls several simple examples of openstack API
2022-06-09 20:40:00 【Backend cloud】
Using open source projects gophercloud call Openstack API, It's now go Project development calls Openstack The mainstream solution of . Here are some simple examples :
- establish openstackclient
- Create a virtual machine - Equate to nova boot –image imageID –flavor flavorID –nic net-id=nicID serverName
- Query virtual machine list - Equate to nova list
- Inquire about flavor list - Equate to nova flavor-list
openstack/openstackclient.go
import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
)
type OpenStackClient struct {
IdentityEndpoint string `json:"identityEndpoint"`
Region string `json:"region"`
ProjectName string `json:"projectName"`
ProjectDomain string `json:"projectDomain"`
Username string `json:"username"`
Password string `json:"password"`
DomainName string `json:"domainName"`
}
func (c *OpenStackClient) GetAuth() (*gophercloud.ProviderClient, error) {
projectScope := gophercloud.AuthScope{
ProjectName: c.ProjectName,
DomainName: c.ProjectDomain,
}
opts := gophercloud.AuthOptions{
IdentityEndpoint: c.IdentityEndpoint,
Username: c.Username,
Password: c.Password,
DomainName: c.DomainName,
Scope: &projectScope,
}
provider, err := openstack.AuthenticatedClient(opts)
if err != nil {
return nil, err
}
return provider, nil
}language-go Copy code openstack/server.go
import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
)
func (c *OpenStackClient) GetServerProvider() (*gophercloud.ServiceClient, error) {
provider, err := c.GetAuth()
if err != nil {
return nil, err
}
return openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
Region: c.Region,
})
}
func (c *OpenStackClient) CreateServer(opts servers.CreateOpts) (*servers.Server, error) {
client, err := c.GetServerProvider()
if err != nil {
return nil, err
}
return servers.Create(client, opts).Extract()
}
func (c *OpenStackClient) GetServer(serverId string) (*servers.Server, error) {
client, err := c.GetServerProvider()
if err != nil {
return nil, err
}
return servers.Get(client, serverId).Extract()
}
func (c *OpenStackClient) ListServer() ([]servers.Server, error) {
client, err := c.GetServerProvider()
if err != nil {
return nil, err
}
opts := servers.ListOpts{}
pager, _ := servers.List(client, opts).AllPages()
allPages, err := servers.ExtractServers(pager)
if err != nil {
return nil, err
}
return allPages, nil
}language-go Copy code openstack/flavor.go
import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
)
func (c *OpenStackClient) ListFlavors() ([]flavors.Flavor, error) {
var fls []flavors.Flavor
provider, err := c.GetAuth()
if err != nil {
return fls, err
}
client, err := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
Region: c.Region,
})
if err != nil {
return fls, err
}
pager, err := flavors.ListDetail(client, flavors.ListOpts{}).AllPages()
if err != nil {
return fls, err
}
allPages, err := flavors.ExtractFlavors(pager)
if err != nil {
return fls, err
}
//fmt.Println(allPages)
return allPages, nil
}language-go Copy code main.go
import (
. "demo/openstack"
"fmt"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
)
func main() {
openStackClient := &OpenStackClient{
IdentityEndpoint: "http://openstack-keystone-vip:35357/v3",
Region: "regionone",
ProjectName: "admin",
ProjectDomain: "Default",
Username: "admin",
Password: "Admin_PWD_xx",
DomainName: "Default",
}
// create server
createServerDetail, err := openStackClient.CreateServer(servers.CreateOpts{
Name: "hanwei",
FlavorRef: "1",
ImageRef: "cbd95b01-f714-49d6-96a1-431d7f00d93d",
Networks: []servers.Network{
servers.Network{UUID: "a1512f64-3dee-4c56-9bff-d39a1b1f4ddd"}},
})
if err != nil {
panic(err)
}
//fmt.Printf("server details: %s\n", createServerDetail)
// get server by serverId
serverDetail, err := openStackClient.GetServer(createServerDetail.ID)
if err != nil {
panic(err)
}
fmt.Printf("server details: %s\n", serverDetail)
// list all servers
serverList, err := openStackClient.ListServer()
for _, s := range serverList {
fmt.Printf("server id: %s server name: %s\n", s.ID, s.Name)
}
}language-go Copy code 边栏推荐
猜你喜欢

SSL(Secure socket Layer)数字证书

ClickHouse 数据插入、更新与删除操作 SQL
![Jerry's Bluetooth distribution network [chapter]](/img/e9/6474d7523f0feb3bad4ec3221fb2e9.png)
Jerry's Bluetooth distribution network [chapter]

After 1995, programmers in big factories were sentenced to 9 months for deleting databases

College community management system

Clickhouse data insert, update and delete SQL

dump. Pcapng packet parsing

2022 Shandong Health Expo, dietotherapy and nourishing health exhibition, health management and precision medicine Exhibition

Apply for software code signing certificate

HMI 软件内存异常,导致奔溃退出的bug
随机推荐
Go 调用 Kubernetes API 的 几个简单的 example
Download the latest global epidemic history data to the two days before the current day
Problems and solutions of HMI online download failure
CVPR2022 Oral | 用于实时地图视图语义分割的跨视图Transformer
moderlarts第二次培训笔记
关于C#Unity读写文件
C#Random的作用
Initial experience of transformation of vite lerna monorepo project
Changshu science and technology applet SQL injection
Figure guessing game in C language
C# For循环的一些小细节
部署 cinder-csi-plugin 遇到的几个问题
C#中委托的应用
Extended application of C # static class
杰理之 图传、录卡或者UVC显示的摄像头-高帧率说明【篇】
2022 Shandong Health Expo, dietotherapy and nourishing health exhibition, health management and precision medicine Exhibition
杰理之蓝牙配网【篇】
Skills and experience of product planning
Learn to use PHP to implement unlimited comments and unlimited to secondary comments solutions
SSL (secure socket layer) digital certificate