Spinning opp en server med Openstack API

I forrige artikkel, har vi sett på Openstack API og hvordan du kommer i gang med å bruke den. Tanken er at du gjør HTTP kall til en server, som utfører den forespurte kommandoen, og gir tilbake noe informasjon. Disse kommandoene kan bare samle informasjon, som gir deg en oversikt over dine løpende servere, eller å gjøre noe mer komplisert, for eksempel tildeling av servere. Openstack inkluderer en hel API for slike operasjoner, inkludert administrerende lagring, administrerende databaser, fordele servere, de-tildeling servere, skape bilder (som er brukt i etableringen av servere), nettverk (for eksempel tildeling privat nettverk), og mer. I fremtidige artikler kan vi se på oppgaver som å fordele private nettverk.

For å gjøre bruk av API, kan du ta flere ruter. Det enkleste er å ikke gjøre samtaler gjennom kode, men bruker en konsoll applikasjon. En slik konsoll applikasjon er Horizon dashbordet. Horizon er et fullverdig dashbordet som kjører i nettleseren, og lar deg utføre Openstack oppgaver. Imidlertid er oversikten interaktiv ved at du klikker og velge hva du vil gjøre. Noen oppgaver du trenger for å automatisere, i hvilket tilfelle du ønsker å skrive skript og programmer. Det er der de APIer og SDK kommer i. Så la oss vår diskusjon av API fortsette, og prøve ut noen flere oppgaver.

Steder å teste API

Som med den forrige artikkelen, jeg 'm bruker Rackspace for disse eksemplene. Jeg er på ingen måte støttet Rackspace, men rett og slett å bruke dem fordi deres Openstack API er en nesten komplett implementering av Openstack. Og hvis du ønsker å øve med Rackspace er Openstack API, kan du gjøre det på svært liten kostnad. Men det finnes andre alternativer også.

Hvis du hodet over til Openstack nettside, vil du finne en side for å komme i gang med Openstack som omfatter en del om premium skyer (for eksempel Rackspace) samt en hyggelig nærmiljø du kan laste ned og installere kalt DevStack. (Hvis du er virkelig interessert i Openstack, vil jeg anbefale DevStack slik at du kan få litt erfaring faktisk installerer alt.) Det er også en ganske coolwebsite kalt TryStack som du kan sjekke ut .. Men for nå skal jeg holde det enkelt ved hjelp Rackspace.

Finn Images

La oss spinne opp en server med bare en API-kall. For å oppnå den API-kall, jeg kommer til å bruke cURL kommandolinjeverktøyet. For dette må du få en godkjenning token fra Rackspace, som beskrevet i forrige artikkel. Forresten, her er en rask spiss som jeg ikke gi siste gang: Når du ber den token, får du tilbake en ganske betydelig JSON objekt som ikke er formatert i det hele tatt. Det er forskjellige måter å få denne tingen formatert til noe vi mennesker kan lese; Jeg fant en Chrome plugin som jeg liker ringte Script Unpacker og Beautifier, som du kan finne på http://jsbeautifier.org/. Merk også at du kan se backslashes før skråstreker, fordi JSON strenger er rømt. Du må fjerne backslashes fra de faktiske API-kall.


For å spinne opp en server trenger vi også å vite hva bildene er tilgjengelige. Bilder har ulike betydninger avhengig av hva cloud bruker dem. Her er de i hovedsak ISO bilder som inneholder for eksempel en Ubuntu installert. Her er hvordan vi kan liste de offentlig tilgjengelige bilder med cURL:

 curl -s https://iad.images.api.rackspacecloud.com/v2/images \\ -H 'X-Auth-Token: abcdef123456 '

Du vil erstatte abcdef123456 med token din. Merk også at fordi vi ber om informasjon, bruker vi en GET-metoden, i stedet for et innlegg. (GET er standard for cURL, så vi trenger ikke å oppgi det.) Når jeg kjører denne kommandoen, får jeg tilbake en annen stor JSON objekt. Denne ene viser 25 bilder tilgjengelig. (Men det er faktisk mer, som du ser snart.)

Nå her er et annet tips for å håndtere disse JSON objekter: Gå inn i Chrome-nettleseren, og åpne opp dev verktøy ved å trykke F12. Så i konsollen, skriver

 x = 

og lime inn i JSON teksten du kom tilbake fra cURL samtalen. Dette vil lagre JSON objekt i en variabel kalt x. Deretter kan du utforske medlemmene av objektet ved å utvide tabell elementer og objektmedlemmer, som vist i figuren nedenfor.


Legg merke til helt på slutten av JSON objekt er medlem kalt neste. Det er fordi vi har nådd grensen for hvor mange Rackspace vil gi oss for bildelister. Rackspace sider dataene, så la oss anmodning annen side av data. For å gjøre dette, starter vi med nettadressen gitt av neste felt:

 "neste": "/v2 /bilder markør = abc123-f20f-454d-9f7d-abcdef" 

Dette er nettadressen vi bruker for cURL kommando, forvalgt med navn og https domenet. Og så får vi 25 mer, samt enda en neste-listen. Ser gjennom 50 så langt, jeg finne forskjellige bilder, for eksempel en Debian Wheezy. Jeg har egentlig ikke lyst til å grave seg gjennom alle disse på jakt etter den jeg vil ha, så la oss prøve en annen cURL samtale, men denne gangen skal vi ta med noen parametre.

Hvis du går til denne siden på Rackspaces dokumentasjon, kan vi se hva parametrene her. Det er to steder vi kan finne parametrene: Vi kan finne de som Openstack generelt støtter ved å gå til dokumentasjon Openstack. Men leverandørene kan omfatte ytterligere drift utover Openstack. Så jeg skal se på Rackspace egen dokumentasjon.

Hvis du ser på JSON objektene vi kom tilbake, er det enda flere medlemmer enn det som er oppført i dokumentasjonen. Et slikt parameter er os_distro. La oss prøve å søke på det. For disse parametrene, tack vi dem på nettadressen som søkeparametere. La oss finne Ubuntu distroer:

 curl -s https://iad.images.api.rackspacecloud.com/v2/images?os_distro=ubuntu \\ -H 'X-Auth-Token: abcdef123456' 

Det fungerte. Jeg fikk tilbake en stor JSON objekt. Lime den inn i Chrome dev verktøy, kan jeg se jeg kom tilbake 10 objekter. Nå la oss anta vi jobber med et prosjekt som krever en 12.04 versjon av Ubuntu. Det viser seg Rackspace har også denne informasjonen i objektene. Så vi kan søke på det også. Jeg kommer til å legge til et annet parameter til min URL, som krever en ampersand. Jeg ønsker ikke bash shell å bruke tegnet, så jeg skal legge apostrof rundt min URL. Her går:

 curl -s 'https://iad.images.api.rackspacecloud.com/v2/images?os_distro=ubuntu&org.openstack__1__os_version=12.04' \\ -H 'X-Auth-Token: abcdef123456' 

Du kan se hvordan jeg tatt med både os_distro og en parameter for den versjonen. Nå er jeg bare kom tilbake tre bilder, og jeg kan plukke en. Igjen vil jeg trekke disse inn i Chrome for å se hva som er hva. Selvfølgelig er dette fortsatt helt interaktiv, som betyr at vi må finne en måte å slipe gjennom disse gjennom koden i stedet for å kopiere dem inn Chrome. Vi vil ta det opp i en fremtidig artikkel. For nå kommer jeg til å plukke den med navnet "Ubuntu 12.04 LTS (Precise Pangolin) (PV)".

Velg en Flavor

Før vi kan spinne opp en server, vi må velge en type server, som kalles en smak. Akkurat som vi listet opp de tilgjengelige bildene, kan vi liste de tilgjengelige smaker:

 curl -s https://iad.servers.api.rackspacecloud.com/v2/12345/flavors \\ -H 'X-Auth -Token: abcdef123456 '

Du ville erstatte 12345 med leietaker ID og som vanlig abcdef123456 med autentisering token. Legg merke til at det andre ordet i URL-er "servere" fordi smaker faller under servere delen av API. Da jeg kjørte dette, fikk jeg tilbake en JSON objekt med 38 forskjellige deilige smaker. For denne testen server, vil jeg velge en liten en. Her er den andre i listen over smaker:

 {"id": "2", "linker": [{"href": "https://iad.servers.api.rackspacecloud.com/v2 /12345 /smaker /2 "," rel ":" self "}, {" href ":" https://iad.servers.api.rackspacecloud.com/12345/flavors/2 "," rel ":" bokmerke "}]," name ":" 512 Standard Forekomst "} 

Nå er en rask punkt om dette svaret; merke det er felt som href og selvtillit. Dette er i tråd med en felles tilnærming til en fredfylt grensesnitt, der du får tilbake en rekke linker som inkluderer en href (adressen) og en rel (en beskrivelse, eller mer presist, et forhold).

Bruke første href, kan jeg få tilbake detaljert informasjon om denne smaken:

 curl -s https://iad.servers.api.rackspacecloud.com/v2/12345/flavors/2 \\ -H ' X-Auth-Token: abcdef123456 '

Dette gir meg tilbake følgende opplysninger:

 {"smaken": {"OS-FLV-MED-EXT-spesifikasjoner: extra_specs": {"policy_class": "standard_flavor", "class": "Standard1", "disk_io_index": "2", "number_of_data_disks": "0"}, "name": "512 Standard Instance", "lenker": [{"href": " https://iad.servers.api.rackspacecloud.com/v2/12345/flavors/2 "," rel ":" self "}, {" href ":" https: //iad.servers.api.rackspacecloud. com /12345 /smaker /2 "," rel ":" bokmerke "}]," ram ": 512," vcpus ": 1," swap ": 512," rxtx_factor ": 80,0," OS-FLV-EXT DATA: flyktig ": 0" disk ": 20," id ":" 2 "}} 

At smaken bør arbeide for vår test. Nå endelig, før vi spinne opp serveren, jeg trenger å gjøre ett poeng. Du kan legge merke til at mens det ville være fint å kunne automatisere alt dette gjennom scripts, er det også en viss interaktivitet her som kunne låne seg til en enkel applikasjon. Du kan for eksempel bygge en liten app som ber om smaker og tilgjengelige Ubuntu bilder og gir en liste over valg for en bruker (eller deg selv). Du kan gjøre de samme API-kall som vi gjorde her, gi brukeren muligheten til å velge den smaken og bilde, og så til slutt spinne opp serveren. Det er mange muligheter her. Men merk at ved natur RESTful grensesnittet, starter vi med et API-kall som returnerer til oss et sett av data samt flere nettadresser for andre API-kall. Deretter bruker vi disse URLene for fremtidige samtaler.

Spinn opp serveren

La oss nå endelig spinne opp serveren. Du trenger id av bildet og id av smaken. Begge disse er inkludert i JSON objekter, både med medlemsnavn id. Du må også gi et navn for serveren din:

id for bildet er "71893ec7-b625-44a5-b333-

ca19885b941d"
.
id for smaken er 2.

Navnet vi vil gå med er Ubuntu-en.

(Vennligst ikke hardcode bilde IDer , men hvis du skriver en app. Cloud verter er kontinuerlig oppdatere sine bilder og utskifting av gamle bilder, noe som betyr at denne ID kan ikke være gyldig i morgen. Det er derfor du vil ønske å traversere ned gjennom de resultatene du får fra start API samtaler.)

Opprette en server krever en POST-metoden. Vi bruker samme nettadresse som notering servere, men POST-metoden forteller Rackspace for å opprette en server i stedet for å legge den til. For våre IDer og navn, vi konstruere en JSON objekt som vi passerer i gjennom -d parameter. Sørg for at du er i samsvar med ekte JSON, med medlemsnavn inne i doble anførselstegn. Here we go:

 curl -X POST -s https://iad.servers.api.rackspacecloud.com/v2/12345/servers \\ d {"server": {"name": " Ubuntu-1 "," imageRef ":" 71893ec7-b625-44a5-b333-ca19885b941d "," flavorRef ":" 2 "}} \\ -H 'X-Auth-Token: abcdef123456' \\ -H" Content-Type : application /json "

Hvis du skriver dette på feil måte, vil du få en feilmelding som beskriver hva som gikk galt (som misformet forespørsel kroppen, noe som kan skje hvis JSON ikke er kodet til høyre). Men hvis det gjøres riktig, vil du få tilbake en JSON objekt med informasjon om din server som blir bygget:

 {"server": {"OS-DCF: diskConfig": "AUTO", "id": "ABCDEF-02d0-41db-bb9f-ABCDEF", "linker": [{"href": "https://iad.servers.api.rackspacecloud.com/v2/12345/servers/abcdef-02d0-41db-bb9f -abcdef "," rel ":" self "}, {" href ":" https://iad.servers.api.rackspacecloud.com/12345/servers/f02de705-02d0-41db-bb9f-75a5eb5ebaf4 "," rel ":" bokmerke "}]," adminPass ":" abcdefXuS7KD34a "}} 

Følg nøye med på den adminPass feltet. Du trenger det for å logge inn din server

Deretter kan du bruke den første href å få informasjon om serveren:

 curl -s https: //iad.servers.api. rackspacecloud.com/v2/12345/servers/abcdef-02d0-41db-bb9f-abcdef \\ -H 'X-Auth-Token: abcdefXuS7KD34a' 

Som forteller meg mye detalj om serveren, inkludert dens IP-adresser. Her er den første delen av JSON objekt:

 {"server": {"status": "aktiv", "oppdatert": "2015-02-09T19: 35: 41Z", "hostid": " abcdef4157ab9f2fca7d5ae77720b952565c9bb45023f0a44abcdef "," adresser ": {" public ": [{" versjon ": 6," ADDR ":" 2001: 4802: 7800: 2: be76: 4Eff: fe20: 4fba "}, {" versjon ": 4, "adr": "162.209.107.187"}], "privat": [{"versjon": 4, "adr": "10.176.66.51"}]} 

Jeg kan logge inn i dette med ssh, som vist i dette skjermbilde:


Nå må du ikke glemme å slette serveren. Vi kan gjøre det gjennom Rackspace web-portal, men hvorfor ikke bruke API siden vi er her? Her er cURL:

 curl -X SLETT \\ -s https://iad.servers.api.rackspacecloud.com/v2/12345/servers/abcdef-02d0-41db-bb9f- abcdef \\ -H ' X-Auth-Token: abcdefXuS7KD34a '

Og vi er ferdige

Konklusjon

Spinning opp en server er enkelt, hvis du følger prosessen med først å innhente informasjon om bilder og smaker! , og deretter bruke IDer fra bildet og smaken du velger. Sørg for å bruke nettadressene som du får tilbake inne i JSON svar, da dette vil hjelpe din app i samsvar med reglene for en avslappende grensesnitt. Neste opp, vil vi prøve å bruke en SDK i et par språk.