Slide 1

Slide 1 text

Use OpenStack with Zend Framework 2 Enrico Zimuel Zend Framework Team Zend Technologies Inc.

Slide 2

Slide 2 text

2 About me • Enrico Zimuel (@ezimuel) • Software Engineer since 1996 • PHP Engineer at Zend Technologies in the Zend Framework and Apigility Team • International speaker, author of books and technical articles • I was a Researcher programmer at Informatics Institute of University of Amsterdam • Co-founder of PUG Torino (Italy)

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

OpenStack ● OpenStack is an open source cloud computing platform for public and private clouds ● The goal is to enable any organization to create and offer cloud computing services running on standard hardware ● Founded by Rackspace Hosting and NASA ● http://www.openstack.org/

Slide 5

Slide 5 text

5 OpenStack architecture Image source: http://www.openstack.org/software/

Slide 6

Slide 6 text

OpenStack dashboard (Grizzly)

Slide 7

Slide 7 text

OpenStack API ● Identity Service (v. 2, 3) ● Compute and Extensions (v. 2) ● Image Service (v. 1, 2) ● Block Storage Service (v. 2) ● Networking (v. 2) ● Object Storage (v. 1) ● Orchestration (v. 1)

Slide 8

Slide 8 text

Some vendors using OpenStack

Slide 9

Slide 9 text

Do you want to try OpenStack? ● http://www.trystack.org ● A set up of clusters running OpenStack on both x86 and ARM architectures ● It's totally free for you to try & test your apps

Slide 10

Slide 10 text

ZendService\OpenStack

Slide 11

Slide 11 text

11 Status of the project ● ZendService\OpenStack is a PHP library to use the API of OpenStack in a OO fashion way ● The project started in Feb 2013 ● It's 100% compatible with the API specifications of OpenStack ● It uses the ZendService\Api component to interact with the HTTP API call https://github.com/zendframework/ZendService_Api

Slide 12

Slide 12 text

12 Specification ● Right now we support the following API: – BlockStorage – Compute – Identity – ObjectStorage ● We are going to release these others soon: – Networking – Image

Slide 13

Slide 13 text

13 Installation ● Using composer: "require": { "zendframework/zendservice­openstack": "dev­master" } ● Or from github (download or fork) https://github.com/zendframework/ZendService_OpenStack – curl ­s https://getcomposer.org/installer | php – php composer.phar install

Slide 14

Slide 14 text

Class structure ● ZendService\OpenStack – AbstractOpenStack – Identity – BlockStorage – ObjectStorage – Compute – Networking – Image

Slide 15

Slide 15 text

Identity API – Auth and Token ● authenticate($name, $password, $tenantName = null) ● autenticateByKey($name, $key) ● validateToken($token, $belongsTo = null) ● checkToken($token, $belongsTo = null) ● listEndpointsToken($token, $belongsTo = null)

Slide 16

Slide 16 text

16 Identity API – User and Tenant ● listUsers() ● addUser(array $user) ● updateUser(array $user) ● deleteUser($id) ● listGlobalRoles($id, $serviceId = null) ● addTenant(array $tenant) ● updateTenant(array $tenant) ● deleteTenant($id)

Slide 17

Slide 17 text

Example: authentication

Slide 18

Slide 18 text

Example: user management

Slide 19

Slide 19 text

ObjectStorage API - containers ● listContainers(array $options = array()) ● createContainer($name, $metadata = array()) ● deleteContainer($name) ● getContainerMetadata($container) ● setContainerMetadata($container, array $metadata) ● deleteContainerMetadata($container, array $metadata)

Slide 20

Slide 20 text

ObjectStorage API - objects ● listObjects($container, $options= array()) ● getObject($container, $object) ● setObject($container, $object, $content, $metadata = array(), $expire = null) ● deleteObject($container, $object) ● copyObject($containerFrom, $objectFrom, $containerTo, $objectTo) ● setObjectMetadata($container, $object, array $metadata) ● getObjectMetadata($container, $object)

Slide 21

Slide 21 text

Example – container and object

Slide 22

Slide 22 text

Example – metadata

Slide 23

Slide 23 text

Compute API - servers ● listServers(array $options = array(), $details = false) ● createServer(array $options) ● getServer($id) ● updateServer($id, array $options) ● deleteServer($id) ● listAddresses($id) ● listAddressesByNetwork($id, $network)

Slide 24

Slide 24 text

Compute API – server actions ● changeAdminPass($id, $password) ● rebootServer($id, $soft = true) ● rebuildServer($id, array $options) ● resizeServer($id, $flavorRef) ● confirmResizeServer($id) ● revertResizeServer($id)

Slide 25

Slide 25 text

Compute API – flavor and image ● createImage($id, array $options) ● listFlavors(array $options = array(), $details = false) ● getFlavor($id) ● listImages(array $options = array(), $details = false) ● getImage($id) ● deleteImage($id)

Slide 26

Slide 26 text

Compute API – metadata ● listServerMetadata($id) ● listImageMetadata($id) ● setServerMetadata($id, array $metadata) ● setImageMetadata($id, array $metadata) ● updateServerMetadata($id, array $metadata) ● updateImageMetadata($id, array $metadata) ● getServerMetadataItem($id, $key) ● getImageMetadataItem($id, $key) ● setServerMetadataItem($id, $key, $value = '') ● setImageMetadataItem($id, $key, $value = '') ● deleteServerMetadataItem($id, $key) ● deleteImageMetadataItem($id, $key)

Slide 27

Slide 27 text

Example: create a server

Slide 28

Slide 28 text

Example: list existing servers

Slide 29

Slide 29 text

29 Under the hood ● We use ZendService\Api library to consume the OpenStack API ● Simple PHP configuration file to build HTTP request. For instance: https://github.com/zendframework/ZendService_OpenSta ck/blob/master/library/ZendService/OpenStack/api/ide ntity/authenticate.php

Slide 30

Slide 30 text

30 Future works ● Complete the Networking and Image services ● Support API versioning (?) ● Documentation! Do you want to contribute? Fork the project on github and contact me!

Slide 31

Slide 31 text

Thanks! Vote this talk at https://joind.in/9082 Comments and feedbacks: enrico@zend.com