Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OpenStack and PHP
Search
Glen Campbell
March 15, 2014
Programming
1
270
OpenStack and PHP
An introduction to OpenStack and how to access it using PHP.
Glen Campbell
March 15, 2014
Tweet
Share
More Decks by Glen Campbell
See All by Glen Campbell
Cache Strategies for Web Apps
gecampbell
0
360
Succeeding at Open Source
gecampbell
0
100
Cache strategies for microservice-based web apps
gecampbell
1
4.6k
OpenStack: the good, the bad, and the ugly
gecampbell
0
190
Open-Source in the Real World
gecampbell
1
180
The Future of PHP is in the Clouds
gecampbell
0
36
Other Decks in Programming
See All in Programming
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
4k
AI駆動のマルチエージェントによる業務フロー自動化の設計と実践
h_okkah
0
170
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
220
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
120
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
400
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
18k
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
450
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
13k
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
180
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
160
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.6k
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
13
4.7k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Designing Experiences People Love
moore
142
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
740
Into the Great Unknown - MozCon
thekraken
40
1.9k
RailsConf 2023
tenderlove
30
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Being A Developer After 40
akosma
90
590k
Embracing the Ebb and Flow
colly
86
4.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Speed Design
sergeychernyshev
32
1k
Transcript
March 2014 OpenStack and PHP Glen Campbell • Midwest PHP
2014
None
http://rack.to/mwphp14
01
01
None
OpenStack concepts ✤ virtual infrastructure services ✤ accessed via HTTP
(RESTful) API ✤ developed by an open-source community ✤ highly configurable
OpenStack governance ✤ Independent foundation ✤ Board of Directors: some
directors appointed by funding companies, others elected at-large ✤ Technical Committee: elected by active members ✤ Biannual releases and summit/workshops ✤ Project Technical Leaders
OpenStack APIs ✤ Native REST ✤ EC2-compatible ✤ Internal (python)
Compute ✤ Project “Nova” ✤ Supports multiple hypervisors including KVM,
Xen ✤ Massively-scalable architecture ✤ Working towards interoperable workloads
Storage ✤ Project “Swift” ✤ Elastic “blob” storage ✤ Can
scale to regional or even global deployments ✤ Eventually consistent
Networking ✤ Project “Neutron” (formerly “Quantum”) ✤ Dynamically create and
manage L2/L3 networks ✤ Works with plugins for virtual network devices (OpenVSwitch, others)
Dashboard ✤ Project “Horizon” ✤ Clean, simple user interface ✤
Uses native API to communicate to services
Shared Services ✤ Identity—“Keystone” ✤ Image—“Glance” ✤ Telemetry—“Ceilometer” ✤ Orchestration—“Heat”
Other Projects ✤ OpenStack-SDKs ✤ Savanna—Hadoop provisioning ✤ Trove—Database ✤
Bare metal—Ironic ✤ Queue—Marconi
How to interact with OpenStack ✤ Control panel ✤ Command
line client ✤ cURL ✤ SDK
First Q&A
Resources ✤ http://github.com/rackspace/php-opencloud ✤ http://developer.rackspace.com/ ✤ http://docs.openstack.org/
Installing php-opencloud # Install Composer curl -sS https://getcomposer.org/installer | php
# Require php-opencloud as a dependency php composer.phar require rackspace/php- opencloud:dev-master
Example 1. Create a server
1.1 Authentication <?php require 'vendor/autoload.php'; use OpenCloud\Rackspace; print "Creating client...\n";
$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array( 'username' => getenv('OS_USERNAME'), 'apiKey' => getenv('NOVA_API_KEY'), 'tenantName' => getenv('OS_TENANT_NAME') ));
1.2 Attach print "Attaching to compute...\n"; try { $compute =
$client->computeService( 'cloudServersOpenStack', 'IAD'); } catch (\Guzzle\Http\Exception\BadResponseException $e) { echo $e->getResponse(); die("OOPS\n"); }
1.3 Image print "Getting an image...\n"; $centos = $compute->image('85019bd8-fb5d-4230-b3bc-63b192800f28');
1.4 Flavor print "Getting a flavor...\n"; $flavor = $compute->flavor('performance1-1');
1.5 Create print "Creating a server...\n"; use OpenCloud\Compute\Constants\Network; $server =
$compute->server(); try { $response = $server->create(array( 'name' => 'My lovely server', 'image' => $centos, 'flavor' => $flavor, 'networks' => array( $compute->network(Network::RAX_PUBLIC), $compute->network(Network::RAX_PRIVATE) ) ));
1.6 Exception Handling } catch (\Guzzle\Http\Exception\BadResponseException $e) { // No!
Something failed. Let's find out: $responseBody = (string) $e->getResponse()->getBody(); $statusCode = $e->getResponse()->getStatusCode(); $headers = $e->getResponse()->getHeaderLines(); echo sprintf("Status: %s\nBody: %s\nHeaders: %s", $statusCode, $responseBody, implode(', ', $headers)); }
1.7 Poll use OpenCloud\Compute\Constants\ServerState; $callback = function($server) { if (!empty($server->error))
{ var_dump($server->error); exit; } else { echo sprintf( "\rWaiting on %s/%-12s %4s%%", $server->name(), $server->status(), isset($server->progress) ? $server->progress : 0 ); } }; $server->waitFor(ServerState::ACTIVE, 600, $callback);
1.8 Let's try it out LIVE DEMO
Example 2. Listing flavors print "Attaching to compute...\n"; try {
$compute = $client->computeService( 'cloudServersOpenStack', getenv('OS_REGION_NAME')); } catch (\Guzzle\Http\Exception\BadResponseException $e) { echo $e->getResponse(); } $list = $compute->flavorList(true); foreach($list as $flavor) { printf("%20s %-20s\n", $flavor->id(), $flavor->name()); }
Example 3. File upload print "Attaching to object storage...\n"; try
{ $storage = $client->objectStoreService( 'cloudFiles', getenv('OS_REGION_NAME')); } catch (\Guzzle\Http\Exception\BadResponseException $e) { echo $e->getResponse(); die("OOPS\n"); }
3.1 create a container // create a container $container =
$storage->createContainer('MidWestPHP'); if ($container === false) $container = $storage-
3.2 upload a file // create an object (empty) print
"Creating an object...\n"; use OpenCloud\ObjectStore\Resource\DataObject; $container->uploadObject('myfile', fopen('upload_file.php', 'r+'));
3.3 list objects // list objects print "Listing objects:\n"; $files
= $container->objectList(); while ($file = $files->next()) { printf("* %s (%d)\n.", $file->getName(), $file->getContentLength()); }
Final Q&A
https://github.com/gecampbell/mwphp14
Let's keep in touch ✤
[email protected]
✤ Twitter: @glenc ✤
http://developer.rackspace.com