Hvordan bruke Openstack SDK for Go

I dag la oss bruke vår kunnskap om Openstack API (fra Intro til Openstack API og Spinning opp en server med Openstack API) for å ta i bruk en Openstack SDK.

API er den grunnleggende grensesnitt der du kan kommunisere med Openstack infrastruktur. Med API du gjør RESTful samtaler. Mens du er fri til å bruke et bibliotek som libcurl innenfor programmene dine, noe som gjør rett HTTP samtaler er litt tungvint. Så i stedet, er det ulike biblioteker i ulike programmeringsspråk som forenkler prosessen med å kalle inn i Openstack API. Disse bibliotekene kalles SDK. La oss se på en av dem.

For disse eksemplene, bestemte jeg meg for å bruke Go programmeringsspråk. Grunnen til at jeg valgte det er at det er en morsom, kul språk som skal brukes, og jeg ønsket å styre mot noe forskjellig fra den vanlige Python brukes i Openstack. (Den eneste SDK offisielt skape av Openstack gruppen er for Python. Alle de andre SDK, inkludert en for Go, er uoffisielle.)

Legg merke til at som jeg nevnte tidligere, jeg bruker Rackspace for disse eksempler. (Se den første artikkelen om en forklaring på hvorfor.)

Gå Språk

Det finnes flere ulike SDK for Go språk; Jeg valgte en opprettet av Rackspace kalt Gophercloud. Jeg kommer til å anta at du allerede har Go installert og din GOPATH satt opp på riktig måte. Nå la oss installere Gophercloud og prøve det ut. For å installere den Type:

gå får github.com/rackspace/gophercloud

Enkelt nok. Nå opprette en ny tekstfil ved hjelp av din favoritt editor. Jeg kommer til å ringe min fil test1.go. Fordi jeg vil at du skal være i stand til å prøve dette ut, i stedet for å gi tekstutdrag, kommer jeg til å gi deg et helt program du kan skrive (eller lim) inn.

 pakke hoved 

import ( "FMT" "github.com/rackspace/gophercloud" "github.com/rackspace/gophercloud/openstack" "github.com/rackspace/gophercloud/pagination" "github.com/rackspace/gophercloud/openstack/compute/v2/servers ")

func main () {

opts: = gophercloud.AuthOptions {IdentityEndpoint:" https://identity.api.rackspacecloud.com/v2.0 ", Brukernavn:" RackspaceUsername "Passord:" RackspacePassword ",} leverandør, err: = openstack.AuthenticatedClient (Valg) hvis feile = nil {fmt.Println! (" AuthenticatedClient ") fmt.Println (err) avkastning} klient, err: = openstack.NewComputeV2 (leverandøren, gophercloud.EndpointOpts {Region: "IAD",}) hvis feile = nil {fmt.Println ("NewComputeV2 Feil:") fmt.Println (err) avkastning}! opts2: = servers.ListOpts {} personsøker: = servers.List (klient, opts2) pager.EachPage (func (side pagination.Page) (bool, feil) {serverList, err: = servers.ExtractServers (side) hvis err = nil {return false, err} for _, s: = range serverList {fmt.Println (s.ID, s.Name, s.Status) //servers.Delete (klient, s.ID);

} return true, null})}

I denne koden, erstatte RackspaceUsername med ditt brukernavn og RackspacePassword med passordet ditt.

Neste, logge inn på din Rackspace konsollen og opprette en server. (Vi kunne bruke koden til å lage en server, men jeg vil bare vise de løpende servere i denne korte eksempel.) Gå foran og skape et par servere. Lag dem begge i en enkelt region. Så i koden ovenfor, erstatte IAD med forkortelsen for regionen hvis du bruker en annen enn Northern Virginia.

Til slutt kjøre koden din ved å skrive

 Gå kjøre test1.go 

erstatte test1.go med hva filnavnet du valgte. Her er hva jeg ser når jeg kjører det:

 jeff @ JeffLinuxMint16 ~ /dev /tester /Openstack /gå $ go kjøre test1.go dce631ce-71ff-4b9a-89f0-0ea7bf4a6770 Cloud-Server-02 BUILD5500e1d6-2782 -4971-9045-72c9b744d482 Cloud-Server-01 AKTIV 

Jeg kjørte test1.go program etter at en av serverne ble ferdig bygget og var aktiv, og den andre var fortsatt i ferd med å bygge. Du kan se på denne listen som faktisk en er oppført som BUILD, og ​​den andre som aktiv.

Grave i koden

La oss nå se på koden i detalj. Den import delen viser de eksterne pakkene du trenger i koden din. Jeg bruker FMT slik at jeg kan skrive ut informasjon, samt flere av de gophercloud pakker. Denne delen er litt vanskelig; du trenger å se på dokumentasjonen og bare liste nøyaktig de gophercloud pakkene du trenger, så er det forskjellige pakker for ulike deler av API.

Den første delen av koden inne i hoved funksjonen lager en godkjenningsalternativer objekt, fylle det inn med brukernavn, passord og URL brukes til å godkjenne. Husk å autentisere gjennom API, sender du en forespørsel til URL, passerer ditt brukernavn og passord; du får tilbake en godkjennings token. Bak kulissene, som er nøyaktig hva som kommer til å skje her, men med mindre koding. Her skal vi fylle denne informasjonen inn i en struktur; deretter i linjen som følger vi kaller openstack.AuthenticatedClient, passerer i denne strukturen. Vi vil enten få tilbake en feilmelding eller token informasjon, og vi lagrer token informasjonen i en variabel kalt leverandør. (Jeg bare brukt variabelnavnet "leverandør", fordi det er hva prøvene brukes i dokumentasjonen Gophercloud.) Deretter sjekker vi om det er en feil, og hvis så, skrive den ut og avslutte. Ellers fortsetter.

Det neste trinnet er å bruke Compute service. For å gjøre dette, kaller vi openstack.NewComputeV2, passerer leverandør variabel fra forrige samtale, og endepunktene for denne samtalen. Den andre parameteren til denne samtalen er en EndpointOpts struktur, som angir endepunktene for samtalen. I vårt tilfelle, det er bare en region, så vi setter den til IAD, eller hva regionen du bruker. Den NewComputeV2 funksjonen vil enten returnere en feil eller et objekt som representerer Compute service. Vi kan bruke som objekt for å gjøre ytterligere API-kall.

For ytterligere API-kall, skal vi kalle servers.list. Denne delen er litt rart med tanke på objektorientert programmering. Vi vil ikke kalle en metode på Compute tjenesten objekt å liste servere; i stedet, kaller vi kaller listen metoden funnet i servere pakken (som vi importert på toppen av filen), passerer i Compute tjenesten objektet.

Vi deretter bla gjennom listen over servere. Husk, vi er begrenset på hvor mye informasjon vi vil komme tilbake i hver API-kall. Hvis det er mer informasjon, må vi gjøre flere forespørsler om å få tilbake flere data, fortsetter inntil det er ingen flere data. Det er derfor vi bruker en personsøker objekt og kaller sin EachPage funksjon. At funksjonen tar en tilbakeringingsfunksjonen som et parameter; tilbakeringing i sin tur har en parameter som representerer den aktuelle siden. Med bruk av denne siden, kan vi trekke serverne 'informasjon fra dataside. Til slutt, vi sløyfe gjennom listen av servere hentet fra siden. For hver server skrive vi ut ID, Navn og status.

Nå er du kanskje lurer på hvordan jeg visste at jeg kunne skrive ut ID, Navn og status. Hva andre parametere er det? For at jeg så på dokumentasjonen. Dokumentasjonen har nettadresser som samsvarer med nettadresser i import uttalelser, takket være en kul nettside som heter godoc.org. Importen uttalelse i spørsmålet er dette:

github.com/rackspace/gophercloud/openstack/compute/v2/servers

Dermed tack på http://godoc.org/før det og åpne den resulterende adressen din browser:

http://godoc.org/github.com/rackspace/gophercloud/openstack/compute/v2/servers

This er det full dokumentasjon for servere pakken. Her er en skjermdump:


Om halvveis ned dette skjermbilde, for eksempel, kan du se listefunksjonen og parametrene som trengs: en ServiceClient og en struktur som inneholder alternativer. Funksjonen returnerer en personsøker objekt. Lenger ned på denne siden er en type som heter Server. Det er der jeg fant medlemmene for Server objekt, inkludert navn, og så videre. Du kan se andre viktige parametere er AccessIPv4 og HostID.

Testing for feil

Du kan se de ulike typer feil som du får ved å endre noen av parameterne. For eksempel, hvis du endrer Region parameter i NewComputeV2 anrop til en ikke-eksisterende region som så:

 Region: "ABCDEF" 

så vil du se følgende resultat:

 NewComputeV2 Feil: Ingen passende endepunkt ble funnet i service catalog.Shutting ned servere 

Ikke glem å stenge serverne! Ellers må du betale mer enn du hadde tenkt til på slutten av måneden. La oss endre koden ovenfor for å stenge serverne. (Sett regionen tilbake til din region hvis du har endret den til å teste ut feilen.) Nå, hvis du ser på servere siden av dokumentasjonen, finner du en slettefunksjon. At funksjonen tar to parametere: en ServiceClient og en id. La oss legge til en linje med kode til vårt program som sletter serverne rett etter utskrift ut informasjon.

Advarsel! Advarsel! Dette vil slette alle serverne på kontoen for regionen. Hvis det ikke er det du ønsker, må du ikke kjøre denne. I stedet, slette dem manuelt fra Rackspace web konsollen!

Her er hvordan du kan slette alle serverne. Du kan se i koden over at det er en kommen-out linje. Uncomment det slik at det ser slik ut:

 servers.Delete (klient, s.ID); 

Så, hvis du ønsker å slette alle dine servere, kjøre programmet på nytt. Denne gangen vil slette hver server som det skriver dem ut. Vent noen sekunder til å gi Rackspace klokkeslett for sletting av servere. Deretter kjøre programmet på nytt, og du vil ikke se noen servere oppført. Ferdig!

Finne alle docs

Du kan utforske dokumentasjonen i sin helhet på godoc server. Starter på denne siden, og derfra kan du bore ned i de ulike tjenestene. Det er også noen grunnleggende å få startet på informasjon. Rull til helt nederst på siden, og du vil se en seksjon kalt kataloger der du kan finne de tilgjengelige tjenester og gjenstander som finnes.

Konklusjon

Openstack SDK gjør det enklere å ringe inn i Openstack APIer. Det er ulike SDK for ulike språk. Noen språk er litt ufullstendig (for eksempel, det er ikke mye tilgjengelig for C ++). Andre språk har flere valg. Velg språket du er komfortabel i, og sørg for at du forstår API før du tar fatt i SDK. Da SDK vil gjøre mye mer fornuftig. Dette vil konkludere med våre kort introduksjon til Openstack API og SDK. Er det mer du ønsker å se? Hvis ja, gi oss beskjed i kommentarfeltet

Se de to foregående artiklene i denne tredelte serien.

Intro til Openstack API

Spinning opp en server med den Openstack API