当前位置:网站首页>Go 调用 Openstack API 的 几个简单的 example
Go 调用 Openstack API 的 几个简单的 example
2022-06-09 20:36:00 【后端云】
使用开源项目 gophercloud 调用 Openstack API,是现在go项目的开发中调用Openstack的主流方案。下面给几个简单的例子:
- 创建 openstackclient
- 创建虚拟机 - 等同于 nova boot –image imageID –flavor flavorID –nic net-id=nicID serverName
- 查询虚拟机列表 - 等同于 nova list
- 查询flavor列表 - 等同于 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复制代码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复制代码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复制代码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复制代码边栏推荐
- C # learning about abstract classes
- Knowledge points of string in C #
- Examples of operator overloading in C #
- UTM转经纬度
- Neo4j desktop database backup
- Pyqt QWidget prohibits operations that are not current windows
- Tar: exiting with failure status due to previous errors
- 目标分割之--Unet对多类别数据集的语义分割
- Apple Announces Winner of the 2022 Apple Design Award
- Jerry's application of camera [chapter]
猜你喜欢

dump. Pcapng packet parsing

从源码解析flutter_redux 的精准局部刷新

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

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

Neo4j desktop database backup

College community management system

Skills and experience of product planning
![Jerry's Bluetooth distribution network [chapter]](/img/e9/6474d7523f0feb3bad4ec3221fb2e9.png)
Jerry's Bluetooth distribution network [chapter]

Apple Announces Winner of the 2022 Apple Design Award

Blog recommended | bookkeeper - Apache pulsar high availability / strong consistency / low latency storage implementation
随机推荐
College community management system
Role of C random
C#中委托与事件之间的一些应用
数据处理基本流程
NoSQL redis configuration and optimization (I blew the night breeze of Qinhuai River for you when you were not in Nanjing)
【mysql】主从复制原理、搭建
Sauvegarde de la base de données neo4j Desktop
杰理之有关摄像头帧数,以及图层【篇】
Jerry's use of network diagram to replace LwIP library and WiFi library [chapter]
Changshu science and technology applet SQL injection
华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
Knowledge points of string in C #
LeetCode 497. Random points in non overlapping rectangles**
MobX初探
Examples of operator overloading in C #
Jerry's Bluetooth distribution network [chapter]
Skills and experience of product planning
Chief architect of Huawei cloud stack: create a "hands-on" digital tool and answer the necessary topic of government enterprise IT digital transformation
关于C#Unity读写文件
每日一题——leecode59( 螺旋矩阵 II)