openstack golang sdk使用

1. go get github.com/gophercloud/gophercloud



import (
	"github.com/gophercloud/gophercloud"
	"github.com/gophercloud/gophercloud/openstack"
	"fmt"
	"crypto/rand"

	"github.com/gophercloud/gophercloud/pagination"
	"golang.org/x/crypto/ssh"
	"time"
	"net"
	"github.com/golang/glog"
	"os"
	"github.com/gophercloud/gophercloud/openstack/identity/v3/projects"
	"encoding/json"
	"github.com/gophercloud/gophercloud/openstack/identity/v3/domains"
	"github.com/gophercloud/gophercloud/openstack/imageservice/v2/images"
	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
	"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/availabilityzones"
)
//认证
scop := gophercloud.AuthScope{
		ProjectName:"xx",
		DomainName: "xx",
	}
	opts := gophercloud.AuthOptions{
		IdentityEndpoint: "http://xx:5000/v3",
		Username: "xx",
		Password: "xxxxxxx",
		DomainName: "default",
		Scope:&scop,
	}
	provider, err := openstack.AuthenticatedClient(opts)
	if err != nil {
		fmt.Printf("AuthenticatedClient : %v" , err)
		return
	}

func ListZones(provider *gophercloud.ProviderClient) (result []availabilityzones.AvailabilityZone) {

	method := "ListZones"
	client, err := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	fmt.Println(client)
	if err != nil {
		fmt.Printf("%s : %v" , method, err)
		return result
	}
	pager,_ := availabilityzones.List(client).AllPages()

	result, err = availabilityzones.ExtractAvailabilityZones(pager)

	return result
}
func ListProject(provider *gophercloud.ProviderClient) (result []projects.Project) {
	method := "ListProject"
	client, err := openstack.NewIdentityV3(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	fmt.Println(client)
	if err != nil {
		fmt.Printf("%s : %v" , method, err)
		return result
	}
	pager := projects.List(client, projects.ListOpts{})
	fmt.Println(pager)
	err = pager.EachPage(func(page pagination.Page) (bool, error) {
		extract, _ := projects.ExtractProjects(page)
		result = extract
		return true, nil
	})
	return result
}

func ListDomain(provider *gophercloud.ProviderClient) (result []domains.Domain) {
	method := "ListProject"
	client, err := openstack.NewIdentityV3(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	fmt.Println(client)
	if err != nil {
		fmt.Printf("%s : %v" , method, err)
		return result
	}
	pager := domains.List(client, domains.ListOpts{})
	fmt.Println(pager)
	err = pager.EachPage(func(page pagination.Page) (bool, error) {
		extract, _ := domains.ExtractDomains(page)
		result = extract
		return true, nil
	})
	return result
}

func ListImage(provider *gophercloud.ProviderClient) (result []images.Image) {
	method := "ListProject"
	client, err := openstack.NewImageServiceV2(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	fmt.Println(client)
	if err != nil {
		fmt.Printf("%s : %v" , method, err)
		return result
	}
	pager := images.List(client, images.ListOpts{})
	fmt.Println(pager)
	err = pager.EachPage(func(page pagination.Page) (bool, error) {
		extract, _ := images.ExtractImages(page)
		result = extract
		return true, nil
	})
	return result
}

func ListNetwork(provider *gophercloud.ProviderClient) (result []networks.Network) {
	method := "ListNetwork"
	client, err := openstack.NewNetworkV2(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	fmt.Println(client)
	if err != nil {
		fmt.Printf("%s : %v" , method, err)
		return result
	}
	pager := networks.List(client, networks.ListOpts{})
	fmt.Println(pager)
	err = pager.EachPage(func(page pagination.Page) (bool, error) {
		extract, _ := networks.ExtractNetworks(page)
		result = extract
		return true, nil
	})
	return result
}

func ListFlavor(provider *gophercloud.ProviderClient) (result []flavors.Flavor) {
	method := "ListNetwork"
	client, err := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	fmt.Println(client)
	if err != nil {
		fmt.Printf("%s : %v" , method, err)
		return result
	}
	pager := flavors.ListDetail(client, flavors.ListOpts{})
	fmt.Println(pager)
	err = pager.EachPage(func(page pagination.Page) (bool, error) {
		extract, _ := flavors.ExtractFlavors(page)
		result = extract
		return true, nil
	})
	return result
}

func CreateInstance(provider *gophercloud.ProviderClient, name string) {

	fmt.Println("create instance..........")
	client, err := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
		Region: "RegionOne",
	})
	ss, err := servers.Create(client, servers.CreateOpts{
		Name:      name,
		FlavorRef: "64",
		ImageRef:  "aba55c25-60b5-4097-882d-9625fbc8fc11",
		AvailabilityZone:"nova",
		Networks: []servers.Network{
			servers.Network{UUID:"79e9b0c2-7e49-49f9-a7e2-0e03dd2055b3"},
		},
		AdminPass:"root",

	}).Extract()

	if err != nil {
		fmt.Printf("Create : %v", err)
		return
	}
	fmt.Println(ss)
}

原文地址:https://www.cnblogs.com/gaoyawei/p/9962758.html

时间: 2024-10-08 09:09:52

openstack golang sdk使用的相关文章

GOLANG SDK下载

如果没有FQ的话是不能访问国外网站的,但是golang提供了中国站点,要下载sdk可以在中国站点下载 中国站点: http://www.golangtc.com/download

openstack 扩展开发最佳实践之计算节点高可用

前言:注意是扩展开发,这个词是我杜撰的,大概意思是指基于openstack的rest api做的一些开发,用于辅助相关功能,而不是直接改动openstack内的代码,怎么修改添加openstack各个组件的代码不在此文章内容内. 首先,千万,千万,千万不要用Openstack提供的SDK,原因如下. 一,SDK的相关文档并不健全. 二,版本不够统一,即兼容的问题. 所以不要使用openstack的SDK而是自己查阅openstack的API文档,通过requests库发http请求要比SDK灵活

IntelliJ IDEA 14安装Golang插件go-lang-idea-plugin

1,下载IntelliJ IDEA旗舰版,我用的是14.1.3版本: http://www.jetbrains.com/idea/download/ 2. 下载golang官方SDK和go-lang-idea-plugin插件源码 http://golang.org/dl/(要翻==墙) https://github.com/go-lang-plugin-org/go-lang-idea-plugin 3,将下载的go-lang-idea-plugin压缩包解压,IDEA点击File -> op

二、OpenStack入门 之 架构分析

OpenStack入门 之 架构分析 写在前面 学习目标: 了解 OpenStack 各组件的逻辑关系: 了解 OpenStack 的各组件的通信和部署关系: 了解 OpenStack 的工作流程: 接下来我会掌握: OpenStack 组件间的逻辑关系: OpenStack 的API: OpenStack 组件间的通信关系: OpenStack 中几种不同的存储: OpenStack 工作流程: OpenStack 的部署架构: OpenStack 各组件之间的关系有:逻辑关系,通信关系,部署

2017.4.5 OpenStack简介

OpenStack 管理的资源不是单机的而是一个分布的系统,把分布的计算.存储.网络.设备.资源组织起来,形成一个完整的云计算系统:OpenStack 也提供一个 UI,这里包括一个图形化的 UI:Horizon,也提供命令行的界面,还提供了一套 API 支持用户开发自己的软件- OpenStack是什么? OpenStack是一套框架,有下面这两个特点: 它是一个中间层,可以创建.管理和销毁虚拟机,但是要完成这些操作需要依赖于第三方的 Hypervisor,通过这个 Hypervisor 去完

OpenStack入门 之 架构分析

学习目标: 了解 OpenStack 各组件的逻辑关系: 了解 OpenStack 的各组件的通信和部署关系: 了解 OpenStack 的工作流程: 接下来我会掌握: OpenStack 组件间的逻辑关系: OpenStack 的API: OpenStack 组件间的通信关系: OpenStack 中几种不同的存储: OpenStack 工作流程: OpenStack 的部署架构: OpenStack 各组件之间的关系有:逻辑关系,通信关系,部署关系- 1. OpenStack组件之间的逻辑关

Windows搭建golang开发平台

Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea.LiteIDE.Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj IDEA. 搭建golang环境步骤,这里只介绍LiteIDE的. 1.下载golang SDK安装包 golang SDK包分为zip版和msi版本 然后安装即可,当安装完成以后,在环境变量设置GOROOT和GOPATH. GOROOT设置为golang SDK的安装路径,GOPATH即为项目开

golang环境

Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea.LiteIDE.Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj IDEA,但是Inteillj IDEA插件更新太慢,以及存在一些问题(go sdk版本支持为1.2,当前最新的SDK版本是1.4Beta).LiteIDE是一个Gubit开源项目,现在已经更新至24.2版本. 搭建golang环境步骤,这里只介绍LiteIDE的. 1.下载golang SDK安

Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】

一.安装Golang的SDK 在官网 http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入go,检测Golang SDK是否安装成功,如下显示,则表示安装成功: 你也可以输入go version 查看你所安装的Golang的版本 二.环境变量配置(GOPATH) GOPATH是用来告诉Golang命令和其他相关工具,在哪里可以找到你系统上的Go包目录. GOPATH是一个路径列表,类似于