Skip to content

Commit

Permalink
Add cloud provider AliCloud
Browse files Browse the repository at this point in the history
  • Loading branch information
hicrazyboy committed Nov 4, 2015
1 parent b8981ea commit 7e659de
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 120 deletions.
47 changes: 24 additions & 23 deletions perfkitbenchmarker/alicloud/ali_disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
disk.LOCAL: 'ephemeral_ssd'
}


class AliDiskSpec(disk.BaseDiskSpec):
"""Object holding the information needed to create an AliDisk."""

Expand Down Expand Up @@ -64,12 +65,12 @@ def __init__(self, disk_spec, zone):
def _Create(self):
"""Creates the disk."""
create_cmd = util.ALI_PREFIX + [
'ecs',
'CreateDisk',
'--RegionId %s' % self.region,
'--ZoneId %s' % self.zone,
'--Size %s' % self.disk_size,
'--DiskCategory %s' % DISK_TYPE[self.disk_type]]
'ecs',
'CreateDisk',
'--RegionId %s' % self.region,
'--ZoneId %s' % self.zone,
'--Size %s' % self.disk_size,
'--DiskCategory %s' % DISK_TYPE[self.disk_type]]
create_cmd = util.GetEncodedCmd(create_cmd)
stdout, _, _ = vm_util.IssueCommand(create_cmd)
response = json.loads(stdout)
Expand All @@ -78,12 +79,12 @@ def _Create(self):
def _Delete(self):
"""Deletes the disk."""
delete_cmd = util.ALI_PREFIX + [
'ecs',
'DeleteDisk',
'--RegionId %s' % self.region,
'--DiskId %s' % self.id]
'ecs',
'DeleteDisk',
'--RegionId %s' % self.region,
'--DiskId %s' % self.id]
logging.info('Deleting AliCloud disk %s. This may fail if the disk is not '
'yet detached, but will be retried.', self.id)
'yet detached, but will be retried.', self.id)
delete_cmd = util.GetEncodedCmd(delete_cmd)
vm_util.IssueCommand(delete_cmd)

Expand All @@ -102,23 +103,23 @@ def Attach(self, vm):
AliDisk.vm_devices[self.attached_vm_id].remove(self.device_letter)

attach_cmd = util.ALI_PREFIX + [
'ecs',
'AttachDisk',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.attached_vm_id,
'--DiskId %s' % self.id,
'--Device %s' % self.GetDevicePath()]
'ecs',
'AttachDisk',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.attached_vm_id,
'--DiskId %s' % self.id,
'--Device %s' % self.GetDevicePath()]
attach_cmd = util.GetEncodedCmd(attach_cmd)
vm_util.IssueRetryableCommand(attach_cmd)

def Detach(self):
"""Detaches the disk from a VM."""
detach_cmd = util.ALI_PREFIX + [
'ecs',
'DetachDisk',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.attached_vm_id,
'--DiskId %s' % self.id]
'ecs',
'DetachDisk',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.attached_vm_id,
'--DiskId %s' % self.id]
detach_cmd = util.GetEncodedCmd(detach_cmd)
vm_util.IssueRetryableCommand(detach_cmd)

Expand All @@ -130,4 +131,4 @@ def Detach(self):

def GetDevicePath(self):
"""Returns the path to the device inside the VM."""
return '/dev/xvd%s' % self.device_letter #TODO IoOptimized
return '/dev/xvd%s' % self.device_letter
59 changes: 29 additions & 30 deletions perfkitbenchmarker/alicloud/ali_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import threading
import json
import uuid
import shlex

from perfkitbenchmarker import flags
from perfkitbenchmarker import network
Expand All @@ -46,58 +45,58 @@ def __init__(self, name, region):
def _Create(self):
"""Creates the affinity group."""
create_cmd = util.ALI_PREFIX + [
'ecs',
'CreateSecurityGroup',
'--SecurityGroupName %s' % self.name,
'--RegionId %s' % self.region]
'ecs',
'CreateSecurityGroup',
'--SecurityGroupName %s' % self.name,
'--RegionId %s' % self.region]
create_cmd = util.GetEncodedCmd(create_cmd)
stdout, _ = vm_util.IssueRetryableCommand(create_cmd)
self.group_id = json.loads(stdout)['SecurityGroupId']

auth_sg_cmd = util.ALI_PREFIX + [
'ecs',
'AuthorizeSecurityGroup',
'--SecurityGroupId %s' % self.group_id,
'--RegionId %s' % self.region,
'--IpProtocol tcp',
'--PortRange 22/22',
'--SourceCidrIp 0.0.0.0/0']
'ecs',
'AuthorizeSecurityGroup',
'--SecurityGroupId %s' % self.group_id,
'--RegionId %s' % self.region,
'--IpProtocol tcp',
'--PortRange 22/22',
'--SourceCidrIp 0.0.0.0/0']
auth_sg_cmd = util.GetEncodedCmd(auth_sg_cmd)
vm_util.IssueRetryableCommand(auth_sg_cmd)

def _Delete(self):
"""Deletes the affinity group."""
delete_cmd = util.ALI_PREFIX + [
'ecs',
'DeleteSecurityGroup',
'--RegionId %s' % self.region,
'--SecurityGroupId %s' % self.group_id]
'ecs',
'DeleteSecurityGroup',
'--RegionId %s' % self.region,
'--SecurityGroupId %s' % self.group_id]
delete_cmd = util.GetEncodedCmd(delete_cmd)
vm_util.IssueRetryableCommand(delete_cmd)

def _Exists(self):
"""Returns true if the affinity group exists."""
show_cmd = util.ALI_PREFIX + [
'ecs',
'DescribeSecurityGroupAttribute',
'--RegionId %s' % self.region,
'--SecurityGroupId %s' % self.group_id]
'ecs',
'DescribeSecurityGroupAttribute',
'--RegionId %s' % self.region,
'--SecurityGroupId %s' % self.group_id]
show_cmd = util.GetEncodedCmd(show_cmd)
stdout, _ = vm_util.IssueRetryableCommand(show_cmd)
return 'SecurityGroupId' in json.loads(stdout)

def AllowPort(self, port):
for proto in ('tcp', 'udp'):
allow_cmd = util.ALI_PREFIX + [
'ecs',
'AuthorizeSecurityGroup',
'--IpProtocol %s' % proto,
'--PortRange %s/%s' % (port, port),
'--SourceCidrIp 0.0.0.0/0',
'--RegionId %s' % self.region,
'--SecurityGroupId %s' % self.group_id]
allow_cmd = util.GetEncodedCmd(allow_cmd)
vm_util.IssueRetryableCommand(allow_cmd)
allow_cmd = util.ALI_PREFIX + [
'ecs',
'AuthorizeSecurityGroup',
'--IpProtocol %s' % proto,
'--PortRange %s/%s' % (port, port),
'--SourceCidrIp 0.0.0.0/0',
'--RegionId %s' % self.region,
'--SecurityGroupId %s' % self.group_id]
allow_cmd = util.GetEncodedCmd(allow_cmd)
vm_util.IssueRetryableCommand(allow_cmd)


class AliFirewall(network.BaseFirewall):
Expand Down
100 changes: 53 additions & 47 deletions perfkitbenchmarker/alicloud/ali_virtual_machine.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@
IMAGE = 'image'
SNAPSHOT = 'snapshot'
DISK = 'disk'
NONE = 'none'
NONE = 'none'
IO_OPTIMIZED = 'io_optimized'
RESOURCE_TYPE = {
INSTANCE : 'instance',
IMAGE: 'image',
SNAPSHOT: 'snapshot',
DISK: 'disk',
INSTANCE: 'instance',
IMAGE: 'image',
SNAPSHOT: 'snapshot',
DISK: 'disk',
}
IO_STRATAGE = {
NONE : 'none',
IO_OPTIMIZED : 'optimized',
NONE: 'none',
IO_OPTIMIZED: 'optimized',
}

NUM_LOCAL_VOLUMES = {
Expand Down Expand Up @@ -138,11 +138,11 @@ def _GetDefaultImage(cls, region):
# the image with the 'largest' name.
return max(images, key=lambda image: image['ImageName'])['ImageId']

#TODO seemed to do nothing
@vm_util.Retry()
def _PostCreate(self):
"""Get the instance's data and tag it."""
describe_cmd = util.ALI_PREFIX + ['ecs',
describe_cmd = util.ALI_PREFIX + [
'ecs',
'DescribeInstances',
'--RegionId %s' % self.region,
'--InstanceIds \'["%s"]\'' % self.id]
Expand All @@ -157,7 +157,10 @@ def _PostCreate(self):
self.group_id = instance['SecurityGroupIds']['SecurityGroupId'][0]

key_file = vm_util.GetPublicKeyPath()
util.AddPubKeyToHost(self.ip_address, self.password, key_file, self.user_name)
util.AddPubKeyToHost(self.ip_address,
self.password,
key_file,
self.user_name)
util.AddDefaultTags(self.id, RESOURCE_TYPE[INSTANCE], self.region)

def _CreateDependencies(self):
Expand All @@ -179,24 +182,25 @@ def _Create(self):
self.password = util.GeneratePassword()

create_cmd = util.ALI_PREFIX + [
'ecs',
'CreateInstance',
'--InstanceName perfkit-%s' % FLAGS.run_uri,
'--RegionId %s' % self.region,
'--ZoneId %s' % self.zone,
'--ImageId %s' % self.image,
'--InstanceType %s' % self.machine_type,
'--InternetChargeType PayByTraffic',
'--InternetMaxBandwidthIn %s' % self.bandwidth_in,
'--InternetMaxBandwidthOut %s' % self.bandwidth_out,
'--SecurityGroupId %s' % self.network.security_group.group_id,
'--Password %s' % self.password]
'ecs',
'CreateInstance',
'--InstanceName perfkit-%s' % FLAGS.run_uri,
'--RegionId %s' % self.region,
'--ZoneId %s' % self.zone,
'--ImageId %s' % self.image,
'--InstanceType %s' % self.machine_type,
'--InternetChargeType PayByTraffic',
'--InternetMaxBandwidthIn %s' % self.bandwidth_in,
'--InternetMaxBandwidthOut %s' % self.bandwidth_out,
'--SecurityGroupId %s' % self.network.security_group.group_id,
'--Password %s' % self.password]

if FLAGS.scratch_disk_type == disk.LOCAL:
disk_cmd = ['--SystemDiskCategory ephemeral_ssd',
'--DataDisk1Category ephemeral_ssd',
'--DataDisk1Size %s' % self.scratch_disk_size,
'--DataDisk1Device /dev/xvd%s' % DRIVE_START_LETTER]
disk_cmd = [
'--SystemDiskCategory ephemeral_ssd',
'--DataDisk1Category ephemeral_ssd',
'--DataDisk1Size %s' % self.scratch_disk_size,
'--DataDisk1Device /dev/xvd%s' % DRIVE_START_LETTER]
create_cmd += disk_cmd

if FLAGS.io_optimized == IO_STRATAGE[IO_OPTIMIZED]:
Expand All @@ -209,48 +213,48 @@ def _Create(self):
self.id = response['InstanceId']

allocateip_cmd = util.ALI_PREFIX + [
'ecs',
'AllocatePublicIpAddress',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
'ecs',
'AllocatePublicIpAddress',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
allocateip_cmd = util.GetEncodedCmd(allocateip_cmd)
stdout, _ = vm_util.IssueRetryableCommand(allocateip_cmd)
response = json.loads(stdout)
self.ip_address = response['IpAddress']

start_cmd = util.ALI_PREFIX + [
'ecs',
'StartInstance',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
'ecs',
'StartInstance',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
start_cmd = util.GetEncodedCmd(start_cmd)
vm_util.IssueRetryableCommand(start_cmd)

def _Delete(self):
"""Delete a VM instance."""
stop_cmd = util.ALI_PREFIX + [
'ecs',
'StopInstance',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
'ecs',
'StopInstance',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
stop_cmd = util.GetEncodedCmd(stop_cmd)
vm_util.IssueRetryableCommand(stop_cmd)

delete_cmd = util.ALI_PREFIX + [
'ecs',
'DeleteInstance',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
'ecs',
'DeleteInstance',
'--RegionId %s' % self.region,
'--InstanceId %s' % self.id]
delete_cmd = util.GetEncodedCmd(delete_cmd)
vm_util.IssueRetryableCommand(delete_cmd)

def _Exists(self):
"""Returns true if the VM exists."""
describe_cmd = util.ALI_PREFIX + [
'ecs',
'DescribeInstances',
'--RegionId %s' % self.region,
'--InstanceIds \'["%s"]\'' % str(self.id)] #TODO what's the problem?
'ecs',
'DescribeInstances',
'--RegionId %s' % self.region,
'--InstanceIds \'["%s"]\'' % str(self.id)]
describe_cmd = util.GetEncodedCmd(describe_cmd)
stdout, _ = vm_util.IssueRetryableCommand(describe_cmd)
response = json.loads(stdout)
Expand Down Expand Up @@ -295,15 +299,17 @@ def AddMetadata(self, **kwargs):
"""Adds metadata to the VM."""
util.AddTags(self.id, RESOURCE_TYPE[INSTANCE], self.region, **kwargs)


class DebianBasedAliVirtualMachine(AliVirtualMachine,
linux_virtual_machine.DebianMixin):
IMAGE_NAME_FILTER = 'ubuntu1404_64*aliaegis*.vhd'


class RhelBasedAliVirtualMachine(AliVirtualMachine,
linux_virtual_machine.RhelMixin):
pass

#TODO

class WindowsAliVirtualMachine(AliVirtualMachine,
windows_virtual_machine.WindowsMixin):
pass
Loading

0 comments on commit 7e659de

Please sign in to comment.