Giter Club home page Giter Club logo

gokcps's Introduction

gokcps

This package is based on xanzy/go-cloudstack.

Description

A KDDI Cloud Platform Service API client enabling Go programs to interact with KCPS in a simple and uniform way.

Example

// API Clientを生成する
cli := gokcps.NewAsyncClient("api_endpoint", "api_key", "secret_key" , false) 

// APIを叩くためのパラメータを生成する.  
// gokcpsでKCPSのAPIを叩く場合は対称のAPIのパラメータオブジェクトを生成し、そのパラメータオブジェクトを実際にAPIを叩くメソッドの引数とする.
// パラメータオブジェクト生成するメソッドは全てNew***Paramsの命名規則を持つ.
// パラメータオブジェクト生成時にはAPIを叩くために必須のパラメータを引数として渡す必要がある(一部例外あり)
p := cli.VirtualMachine.NewDeployValueVirtualMachineParams(
	"service-offering-id", 
	"template-id", 
	"zone-id",
	"vmname",
)

// パラメータオブジェクトにはAPIで利用可能なその他のオプションをSet***メソッドで追加可能.
p.SetName("vmname2")

// 上記で生成したパラメータを引数にAPIを実行.
// 全てのAPI実行メソッドには一つ目の返り値にResponseオブジェクトと、二つ目の返り値に実行エラーが帰ってくる.(成功時にはnil)
r, err := cli.VirtualMachine.DeployValueVirtualMachine(p)
if err != nil {
	log.Fatalf("Error creating the new instance %s: %s", name, err)
}

fmt.Printf("UUID or the newly created machine: %s", r.ID)

ToDo

  • godoc
  • implementation of some convinient method.

Getting Help

Author

uesyn

License

Apache License, Version 2.0

gokcps's People

Contributors

andrestc avatar benjvi avatar example123 avatar glenjamin avatar jalemieux avatar pdube avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

takahiro-impara

gokcps's Issues

ListSnapshotPoliciesParamsにでvolumeidをセットできるようにする

KCPSのAPIコマンドlistSnapshotPoliciesはvolumeidが必須パラメータですhttps://iaas.cloud-platform.kddi.ne.jp/developer/listSnapshotPolicies/

gokcpsでは、NewListSnapshotPoliciesParamsが引数をとらず、setterはSetIdしか実装されていないため、ListSnapshotPoliciesParamsにvolumeidをセットする術がありません

NewListSnapshotPoliciesParams(volumeid string)

と定義し直し、volumeidをセットできるようにすべきです

構造体の型を使い回すようにする

たとえばSnapshotService.goで定義されているCreateSnapshotResponseなんですが

type CreateSnapshotResponse struct {
	JobID        string `json:"jobid,omitempty"`
	Account      string `json:"account,omitempty"`
	Created      string `json:"created,omitempty"`
	Domain       string `json:"domain,omitempty"`
	Domainid     string `json:"domainid,omitempty"`
	Id           string `json:"id,omitempty"`
	Intervaltype string `json:"intervaltype,omitempty"`
	Name         string `json:"name,omitempty"`
	Physicalsize int64  `json:"physicalsize,omitempty"`
	Project      string `json:"project,omitempty"`
	Projectid    string `json:"projectid,omitempty"`
	Revertable   bool   `json:"revertable,omitempty"`
	Snapshottype string `json:"snapshottype,omitempty"`
	State        string `json:"state,omitempty"`
	Tags         []struct {
		Account      string `json:"account,omitempty"`
		Customer     string `json:"customer,omitempty"`
		Domain       string `json:"domain,omitempty"`
		Domainid     string `json:"domainid,omitempty"`
		Key          string `json:"key,omitempty"`
		Project      string `json:"project,omitempty"`
		Projectid    string `json:"projectid,omitempty"`
		Resourceid   string `json:"resourceid,omitempty"`
		Resourcetype string `json:"resourcetype,omitempty"`
		Value        string `json:"value,omitempty"`
	} `json:"tags,omitempty"`
	Volumeid   string `json:"volumeid,omitempty"`
	Volumename string `json:"volumename,omitempty"`
	Volumetype string `json:"volumetype,omitempty"`
	Zoneid     string `json:"zoneid,omitempty"`
}

これはTagsService.goで定義されたTag型を用いて

type CreateSnapshotResponse struct {
	JobID        string `json:"jobid,omitempty"`
	Account      string `json:"account,omitempty"`
	Created      string `json:"created,omitempty"`
	Domain       string `json:"domain,omitempty"`
	Domainid     string `json:"domainid,omitempty"`
	Id           string `json:"id,omitempty"`
	Intervaltype string `json:"intervaltype,omitempty"`
	Name         string `json:"name,omitempty"`
	Physicalsize int64  `json:"physicalsize,omitempty"`
	Project      string `json:"project,omitempty"`
	Projectid    string `json:"projectid,omitempty"`
	Revertable   bool   `json:"revertable,omitempty"`
	Snapshottype string `json:"snapshottype,omitempty"`
	State        string `json:"state,omitempty"`
	Tags         []Tag `json:"tags,omitempty"`
	Volumeid   string `json:"volumeid,omitempty"`
	Volumename string `json:"volumename,omitempty"`
	Volumetype string `json:"volumetype,omitempty"`
	Zoneid     string `json:"zoneid,omitempty"`
}

このように書き換えることが可能かと思います。

現在あらゆる構造体中のTagsフィールドはTag型ではない(型が定義されていない)ので、たとえばCreateSnapshotResponseやDeployValueVirtualMachineResponseのTagsを引数にとるような関数が作れません。

Tags以外にもEgressrule、Securitygroup、Nic(Networknameのフィールドを持つものとそうでないものがある)なども型で定義して、それを使い回すとよいと思います

NewRegisterIsoParamsでostypeidにzoneidがセットされている

修正よろしくお願いします

ISOService.go (Lines 565-574)

func (s *ISOService) NewRegisterIsoParams(displaytext string, name string, url string, zoneid string, ostypeid string) *RegisterIsoParams {
	p := &RegisterIsoParams{}
	p.p = make(map[string]interface{})
	p.p["displaytext"] = displaytext
	p.p["name"] = name
	p.p["url"] = url
	p.p["zoneid"] = zoneid
	p.p["ostypeid"] = zoneid  #ここ
	return p
}

CreateSnapshotPolicyで&{false 0 0 }が返却される

CreateSnapshotPolicy実行後、定期スナップショットの設定に成功しているにも関わらず、返り値(CreateSnapshotPolicyResponse型)が&{false 0 0 }となっています。errの方はnilです。

createLBStickinessPolicyのparamに対応する

createLBStickinessPolicyコマンドのparamに対応できていません

createLBStickinessPolicyは複数のparamをセットできます。またparamnamevalueの組み合わせです。(https://iaas.cloud-platform.kddi.ne.jp/developer/createLBStickinessPolicy/)

下記は複数のparamをセットした場合のcreateLBStickinessPolicyの例です

./kick_api.sh command=createLBStickinessPolicy lbruleid=10c00c09-8e47-499b-85c8-f6eb29f46c8e methodname=AppCookie name=test param[0].value=bbb param[1].name=mode param[1].value=cccc param[2].name=length param[2].value=50 param[3].name=holdtime param[3].value=1000 param[4].name=request-learn param[4].value=true param[5].name=prefix param[5].value=true

現状のgokcpsで以下の2つの問題が確認できました

  • 複数のparamをセットできない
    • SetParam関数は引数の型はmap[string]stringで、1つのmapしか渡せない
    • リスト化
  • URLにparamをセットする際、namekeyにしてしまっている
    • ここは単純にパラメータの名前を変更すれば良い

リファレンスに書かれていないコマンドのパラメータにも対応する

KCPSのAPIコマンドのリファレンスに書いていないパラメータもセットできるようにしてほしいです。

以下に現在確認しているリファレンスに書かれていないパラメータ一覧を示します(パラメータを全て網羅するには仕様書でも読まないと厳しい)

コマンド パラメータ デフォルト値 内容
createPortForwardingRule openfirewall bool true ポートフォワードのルール作成時、自動でFirewallのルールを追加するかどうか。作成されるFirewallのルールはcidrが0.0.0.0/0、portの範囲はポートフォワードのルールのパブリックポートと同じ範囲になる。
registerTemplate details[n].nicAdapter string nil NICアダプタの設定(例: details[0].nicAdapter=E1000)
registerTemplate details[n].keyboard string nil keyboardの設定(例: details[0].keyboard=us)
createTemplate ispublic bool false テンプレートの公開設定
createSnapshot quiescevm bool false VMの休止
createVMSnapshot snapshotmemory bool false メモリを含めるか否か
createLoadBalancerRule openfirewall bool true ポートフォワードのルール作成時、自動でFirewallのルールを追加するかどうか

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.