Skip to content
This repository has been archived by the owner on Apr 24, 2024. It is now read-only.

Commit

Permalink
[WIP] add async job support + very broken authorize ingress
Browse files Browse the repository at this point in the history
  • Loading branch information
imduffy15 committed Feb 22, 2014
1 parent 4be4a55 commit e28cee2
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 13 deletions.
1 change: 1 addition & 0 deletions ec2stack/controllers/default.py
Expand Up @@ -25,6 +25,7 @@ def index():

def _get_action(action):
actions = {
'AuthorizeSecurityGroupIngress': security_group.authenticate_security_group_ingress,
'CreateKeyPair': keypair.create_keypair,
'CreateSecurityGroup': security_group.create_security_group,
'CreateVolume': volume.create_volume,
Expand Down
25 changes: 25 additions & 0 deletions ec2stack/providers/cloudstack/requester.py
Expand Up @@ -6,6 +6,7 @@
from base64 import b64encode
import hmac
import json
import time

from flask import current_app, abort, request
import requests
Expand Down Expand Up @@ -40,6 +41,30 @@ def make_request(args):
return response_data


def make_request_async(args, poll_period=2, timeout=3600):
response = make_request(args)
responsekey = filter(lambda x: 'response' in x, response.keys())[0]

if 'jobid' in response[responsekey]:
args = {}
args['command'] = 'queryAsyncJobResult'
args['jobid'] = response[responsekey]['jobid']

time.sleep(poll_period)
timeout = timeout - poll_period

response = make_request(args)

response = response['queryasyncjobresultresponse']
job_status = response['jobstatus']

if job_status == 1:
return response['jobresult']
elif job_status == 0:
return make_request_async(args, poll_period=poll_period,
timeout=timeout)


def _generate_request_url(args, secretkey):
keys = sorted(args.keys())
values = map(args.get, keys)
Expand Down
55 changes: 43 additions & 12 deletions ec2stack/providers/cloudstack/security_group.py
@@ -1,26 +1,26 @@
#!/usr/bin/env python
# encoding: utf-8

from flask import request
from flask import request, abort

from ec2stack import helpers
from ec2stack.helpers import authentication_required
from ec2stack.helpers import authentication_required, get, \
contains_parameter, missing_paramater, require_one_paramater, require_parameters
from ec2stack.core import Ec2stackError
from ec2stack.providers.cloudstack import requester


@authentication_required
def create_security_group():
helpers.require_parameters(['GroupName', 'GroupDescription'])
require_parameters(['GroupName', 'GroupDescription'])
response = _create_security_group_request()
return _create_security_group_response(response)


def _create_security_group_request():
args = {}
args['command'] = 'createSecurityGroup'
args['name'] = helpers.get('GroupName', request.form)
args['description'] = helpers.get('GroupDescription', request.form)
args['name'] = get('GroupName', request.form)
args['description'] = get('GroupDescription', request.form)

response = requester.make_request(args)

Expand All @@ -31,7 +31,7 @@ def _create_security_group_request():

def _create_security_group_response(response):
if 'errortext' in response:
groupname = helpers.get('GroupName', request.form)
groupname = get('GroupName', request.form)
raise Ec2stackError(
'400',
'InvalidGroupName.Duplicate',
Expand All @@ -56,14 +56,14 @@ def delete_security_group():
def _delete_security_group_request():
args = {}

if helpers.contains_parameter('GroupName'):
args['name'] = helpers.get('GroupName', request.form)
if contains_parameter('GroupName'):
args['name'] = get('GroupName', request.form)

elif helpers.contains_parameter('GroupId'):
args['id'] = helpers.get('GroupId', request.form)
elif contains_parameter('GroupId'):
args['id'] = get('GroupId', request.form)

else:
helpers.missing_paramater('GroupName')
missing_paramater('GroupName')

args['command'] = 'deleteSecurityGroup'

Expand All @@ -78,3 +78,34 @@ def _delete_security_group_response(response):
'response_type': 'DeleteSecurityGroupResponse',
'return': 'true'
}


@authentication_required
def authenticate_security_group_ingress():
require_one_paramater(['GroupName', 'GroupId'])
_authenticate_security_group_request()
return abort(400)
#return _authenticate_security_group_response(response)


def _authenticate_security_group_request(args=None):
if not args:
args = {}

args['command'] = 'authorizeSecurityGroupIngress'

if contains_parameter('GroupName'):
args['securityGroupName'] = get('GroupName', request.form)
elif contains_parameter('GroupId'):
args['securityGroupId'] = get('GroupId', request.form)

args['protocol'] = get('IpPermissions.1.IpProtocol', request.form)
args['startPort'] = get('FromPort', request.form)
args['endPort'] = get('ToPort', request.form)
args['cidrlist'] = get('CidrIp', request.form)

response = requester.make_request_async(args)

response = response['securitygroup']

return response
2 changes: 1 addition & 1 deletion pylint.rc
Expand Up @@ -33,7 +33,7 @@ load-plugins=
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
disable=C0111,F0401,E1102,W0401,W0614,E0611,E1101,W0231,C0103,W0613,W0141,R0904,R0201,E1003,W0142,R0801
disable=C0111,F0401,E1102,W0401,W0614,E0611,E1101,W0231,C0103,W0613,W0141,R0904,R0201,E1003,W0142,R0801,W0110



Expand Down

0 comments on commit e28cee2

Please sign in to comment.