Introduksjon til Openstack API

Openstack er en åpen kildekode, standard cloud computing plattform. Følger med Openstack er en API som du kan bruke til å skrive programvare som styrer en sky. Du kan skrive skript som kjøres som jobber for å tildele servere, for eksempel, eller skrive applikasjoner som tillater brukeren å administrere sine egne cloud-servere. Mulighetene er uendelige. Men for å oppnå slike oppgaver, trenger din programvare for å kommunisere med Openstack installasjonen ved hjelp av API. I denne opplæringen får jeg deg opp og kjører med Openstack API

Det er to måter du kan bruke Openstack -. API og SDK - og jeg har funnet ut at noen mennesker får litt forvirret om dette, så jeg skal prøve å klargjøre det. På grunnleggende nivå, Openstack tjenester gir en API der programvaren kan kommunisere med tjenesten. API er et avslappende grensesnitt, noe som betyr at du sender URL-forespørsler til tjenesten for å utstede dine kommandoer. Formatet på banen i URL avgjør hva kommandoen du utstede. Disse nettadressene bruker samme HTTP-protokollen som nettlesere gjør. Det betyr med noen RESTful grensesnitt du kan gjøre noen av forespørsler rett fra et nettleserens adressefelt, men som bare vil fungere hvis det er ingen tilpasset informasjon som skal inkluderes med forespørselen. (Og det er egentlig ikke hensikten med nettleseren, uansett.) Vanligvis det er ikke tilfelle. I stedet vil du få forespørslene rett fra programkode, eller ved hjelp av et kommandolinjeverktøy som for eksempel en som heter cURL. cURL er en av de enkleste måtene å sende forespørsler til tjenestene.

Mye av det jeg beskriver her i utgangspunktet gjelder ikke bare bare å Openstack. Disse begrepene typisk gjelde mange forskjellige RESTful grensesnitt. For eksempel har Amazon en hel API for selgere å administrere sine produkter på Amazon nettsted. API bruker de samme begrepene, begge med den RESTful API og SDK.

De fleste slike APIer, inkludert Openstack, er satt opp slik at anmodninger er bygget som URL-baner, ofte med en del som er en kommando etterfulgt med en skråstrek, etterfulgt av flere parametere atskilt med skråstreker. Så du sender forespørselen ved hjelp av en HTTP GET eller en HTTP POST. (Det finnes andre muligheter i tillegg til GET og POST, men disse er de mest brukte.) I tillegg til nettadressen selv, for en GET-forespørsel du noen ganger sende tilleggsdata i form av header forespørsler, og for et innlegg du kan spesifisere data som blir sendt sammen med forespørselen i form av POST data.

Den første delen av URL kalles et endepunkt. Ulike tjenester bruker forskjellige endepunkter, og du kan finne ut endepunkt fra deres online dokumentasjon.



Begrunnelsen SDK

Mens API er den grunnleggende rørledning for kommunikasjon for å tjenesten, kan med API være litt tungvint. Med mindre du bare å gjøre noen forespørsler og til, bruker cURL å ringe API kan være fine. Men hvis du skriver apps som trenger å gjøre en rekke samtaler, vil du finne deg selv å måtte gjenta mye av den samme koden igjen og igjen. Avhengig av hvilket språk du bruker, må du sette sammen dataene du ønsker å sende med forespørselen, bygge URL, og ringe til hva bibliotekene språket har tilgjengelig for å lage HTTP-forespørsler. Da får du tilbake en HTTP-statuskode og et svar, som du kan ha til å dekode til et objekt programmeringsspråk kan forstå.

Det er der SDK komme inn og gjøre det mye enklere. I stedet for å sette sammen nettadresser og lage HTTP-forespørsler, vil du bare gjøre funksjonskall. Bak kulissene, er disse funksjonene sette sammen webadresser og data og gjør API-kall for deg. Men fra slutten din, det fungerer akkurat som alle andre koder i språket.

Vanligvis vil du bruke SDK som er tilgjengelig for din programmeringsspråk, og du vil bare bruke API hvis det ikke en SDK tilgjengelig. I tilfelle av Openstack, er det SDK for mest populære språk. Men før du stuper uti SDK, jeg synes det er best å først studere dokumentasjonen for API seg selv, slik at du vet nøyaktig hva SDK gjør. Og på den måten hvis SDK mangler noe, vet du hva du trenger for å komme seg rundt manglene. Også, siden vi snakker om åpen kildekode her, hvis SDK ikke oppfyller dine expecations, kan du endre det eller opprette en ny SDK helt.



Forstå Openstack API

For å komme i gang med Openstack, la oss først utforske API selv. For å kunne bruke en Openstack service, må du bli godkjent. Hvordan dette fungerer avhenger av hvilken tjeneste du bruker. Jeg bestemte meg for å bruke Rackspace for disse demonstrasjonene, først og fremst fordi Rackspace har en av de mest komplette Openstack implementeringer. (Grunnen til dette er ganske enkelt at Openstack oppsto på Rackspace i forbindelse med NASA.)

Den prosessen vil jobbe litt annerledes med andre tilbydere; du kan få informasjon fra API dokumentasjon på tilbydernes egne nettsider.

For Rackspace, du sende en anmodning (enten gjennom cURL eller i koden) for å få det som kalles en autentisering token. Du sender sammen med forespørselen din brukernavnet og passordet du brukte til å sette opp kontoen din med Rackspace Cloud Control Panel. Så gi deg en forespørsel ved å bruke dette endepunktet:

 https://identity.api.rackspacecloud.com/v2.0 

Vi vil bruke dette fra Linux kommandolinjen ved hjelp cURL. Nå er dette bare endepunktet; du har å gi ytterligere informasjon i form av ditt brukernavn og passord. Å sende brukernavn og passord, setter vi sammen en JSON objekt og passerer det som POST data (som igjen betyr at vi bruker en POST-forespørsel, ikke GET). JSON må være formatert til å overholde den JSON-spesifikasjonen. Det betyr at medlemsnavnene må oppgis, og vi bruker doble anførselstegn, ikke apostrof. Så la oss prøve det. Først, her er hva JSON objekt ser slik ut:

 {"auth": {"passwordCredentials": {"brukernavn": "MyRackspaceAcct", "passord": "MyRackspacePwd"}}} 

der du erstatte MyRackspaceAcct og MyRackspacePwd med ditt brukernavn og passord. For å inkludere disse dataene i en curl samtale som POST data, bruker du en -d kommandolinje alternativ, og omgir JSON med apostrof så Linux shell griper det hele som en enkelt parameter. Du må også angi endepunktet, en innholdstype, og fortelle cURL vi gjør en POST. Her er hva den komplette kommando ser slik ut:

 curl -s https://identity.api.rackspacecloud.com/v2.0/tokens -X 'POST' \\ d {"auth": {" passwordCredentials ": {" brukernavn ":" MyRackspaceAcct "," passord ":" MyRackspacePwd "}}} \\ -H" Content-Type: application /json "

curl kommandoen vil deretter gjøre HTTP-forespørsel og skrive ut resultatene av forespørselen. Rackspace gir deg tilbake en godkjennings token som du kan bruke for fremtidige forespørsler (men den utløper etter 24 timer, etter som du trenger for å gjøre denne forespørselen på nytt), sammen med endepunktene vil du bruke for påfølgende API-kall.
< p> Når jeg kjørte denne curl kommando, fikk jeg tilbake en stor gjenstand. Plasshensyn vil jeg ikke liste opp hele greia her. Men det viktigste er på toppen av objektet er et medlem som heter tilgang, som igjen inneholder et medlem som heter token. Token objekt inneholder et medlem som heter id, som er tegnet strengen du vil bruke i fremtidige forespørsler. Det er også en leietaker medlem, som du skal bruke i forespørsler, samt en utløpsdato og tid slik at du vet når du trenger å be om en annen token:

 {"access": {"token": { "id": "1234567890abcdef", "utløper": "2015-01-13T21: 48: 11.877Z", "leietaker": {"id": "1234", "name": "1234"}, "RAX- AUTH: authenticatedBy ": [" PASSORD "]}, ... 

Etter at tilgangs objekt er et objekt kalt serviceCatalog, som inneholder alle endepunkter. Det er et endepunkt for hver tjeneste du ønsker å bruke, inkludert cloudBlockStorage, cloudImages, autoskalering, cloudDatabases, cloudBackup, cloudMonitoring, cloudDNS, cloudServers, cloudFilesCDN, cloudFiles, og mer. Hver av disse er i seg selv en JSON objekt med et medlem som heter publicURL som gir endepunktet. Det er også en internalURL som du kan bruke hvis du kjører på servere innen Rackspace nettverket. I tillegg er det egne nettadresser for hver region: ORD (Chicago), SYD (Sydney), DFW (Dallas), HKG (Hong Kong), IAD (Northern Virginia). Merk at disse regionene er ikke en del av Openstack, men snarere er en del av Rackspace, og er beskrevet i dokumentasjonen Rackspace.

Å gjøre en API Call

Med godkjenning token og endepunktene i hånd, er vi klare til å gjøre et API-kall. La oss liste våre servere. Nettadressen vi satt sammen avhenger av tjenesten vi ønsker å bruke. Hele listen over tilgjengelige tjenester er oppført i API-dokumentasjon. Vi ønsker å liste våre servere, som er i Compute delen av API. Du kan se i API at det er en kommando som heter List servere, og det ser ut som dette:

 /v2 /{tenant_id} /servere 

tenant_id er funnet i aksessdelen av godkjenning respons. Rackspace fyller det i for oss i sin liste over endepunkter det ga oss, som så:

 https://iad.servers.api.rackspacecloud.com/v2/1234 

Så vi konstruerer vår nettadresse etter legge til /servere ordet på slutten:

 https://iad.servers.api.rackspacecloud.com/v2/1234/servers 

Men vi kan ikke bare sende dette. Vi trenger å tråkle på vår autentiseringsinformasjon. Legg merke til i dokumentasjonen for List servere som du bruker en GET-metoden. Med GET metoder, du angi tilleggsinformasjon som overskrifter. For å bestå en autentisering token, bruker du en overskrift som heter X-Auth-Token. Og med det er vi endelig klar

Her er cURL kommandoen for notering våre servere.

 curl -s https://iad.servers.api.rackspacecloud.com/v2/1234 /servere \\ -H 'X-Auth-Token: 1234567890abcdef' 

Når jeg utstede denne curl kommando, får jeg tilbake en liste over mine servere. Jeg har bare en som kjører akkurat nå:

 {"servere": [{"id": "abcdef123456", "linker": [{"href": "https: //iad.servers.api. rackspacecloud.com/v2/1234/servers/abcdef123456 "," rel ":" self "}, {" href ":" https://iad.servers.api.rackspacecloud.com/1234/servers/abcdef123456 "," rel ":" bokmerke "}]," name ":" Cloud-Server-01 "}]} 

Følger med hver server er linker for å få tilgang til informasjon om selve serveren. Når jeg prøver det, inkludert den samme -H alternativet jeg gjorde for et øyeblikk siden, får jeg en ganske betydelig JSON objekt som inneholder mange detaljer om serveren, inkludert dens IP-adresser (både v4 og v6), informasjon om bildet som brukes til å lage serveren, navnet på serveren, og mer.

Nå er her der det blir viktig å vite når du skal bruke GET og når du bruker POST. Normalt GET er for å be om informasjon, og POST er for å sende informasjon. For å få informasjon om serverne, brukte vi en GET-metoden. For å opprette en server, bruker vi en svært lik URL, men i stedet bruke en POST-metoden.

Konklusjon

Det er bare toppen av isfjellet av API. I followup artikler vil vi se på flere API-kommandoer, inkludert hvordan du oppretter eller klar servere, og hvordan håndtere dem. Så når vi forstår hva vi gjør det, vil vi prøve ut et par SDK. Følg med! Anmeldelser