Build Your First Openstack Application
Build Your First Openstack Application
APPLICATION
WITH OPENSTACK PYTHONSDK
VICTORIA MARTINEZ DE LA
CRUZ
SOFTWARE ENGINEER AT RED HAT
CO-FOUNDER LINUXCHIX ARGENTINA
WHAT IS OPENSTACK?
BRIEF OVERVIEW
OPENSTACK OVERVIEW
IAAS... AND MORE!
+
RUNNING APPS ON OPENSTACK
HOW IT WAS... A FEW YEARS BACK
OSD GRACE HOPPER CELEBRATION 2014
OSD GRACE HOPPER CELEBRATION 2014
Leveraging OpenStack scalability and resiliency in times of
need and disaster
Defining a cloud-ready architecture for an standard
application
Deploying the application in no-time by just running an script
IN PREPARATION FOR OSD GHC 2014
Architecture the app to be cloud-ready → 2 webservers + 1 db +
1 load balancer
Webserver
DB LB
Webserver
IN PREPARATION FOR OSD GHC 2014
Talk with an OpenStack cloud using python-*client
OPENSTACK PYTHON NOVA CLIENT
# List servers in Nova
from novaclient.v1_1 import client
import libcloud.security
libcloud.security.VERIFY_SSL_CERT = False
OpenStack = get_driver(Provider.OPENSTACK)
nodes = driver.list_nodes()
images = driver.list_images()
sizes = driver.list_sizes()
size = [s for s in sizes if s.ram == 512][0]
image = [i for i in images if i.name == 'natty-server-cloudimg-amd64'][0]
# Initialize cloud
# Cloud configs are read with os-client-config
cloud = shade.openstack_cloud(cloud='epcloud')
Connection
Application developer consuming an
OpenStack cloud
Connection Maintains your session, authentication,
transport, and profile
Resource Resource
OpenStack developer requiring finer-grained
control
SOME SNIPPETS
Establishing a connection with the cloud
# Connect
def create_connection():
conn = connection.Connection(auth_url=AUTH_URL,
project_name=TENANT_NAME,
username=USER_NAME,
password=USER_PASS)
return conn
SOME SNIPPETS
Creating a server
def create_server(conn):
print("Create Server:")
image = conn.compute.find_image(IMAGE_NAME)
flavor = conn.compute.find_flavor(FLAVOR_NAME)
network = conn.network.find_network(NETWORK_NAME)
keypair = create_keypair(conn)
server = conn.compute.create_server(
name=SERVER_NAME, image_id=image.id, flavor_id=flavor.id,
key_name=keypair.name, user_data=CLOUD_INIT)
server = conn.compute.wait_for_server(server)
SOME SNIPPETS
Creating a keypair
import os
def create_keypair(conn):
keypair = conn.compute.find_keypair(KEYPAIR_NAME)
if not keypair:
print("Create Key Pair:")
keypair = conn.compute.create_keypair(name=KEYPAIR_NAME)
try:
os.mkdir(SSH_DIR)
except OSError as e:
if e.errno != errno.EEXIST:
raise e
os.chmod(PRIVATE_KEYPAIR_FILE, 0o400)
return keypair
MAKING YOUR APP CLOUD-
READY
SOME GROUND RULES
CLOUD READY & CLOUD CENTRIC
Common classification
Q&A
vkmc at irc.freenode.org