Skip to content
This repository was archived by the owner on Sep 26, 2018. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 1 addition & 12 deletions packs/libcloud/actions/balancer_attach_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@
'BalancerAttachMemberAction'
]

RECORD_ATTRIBUTES = [
'id'
]


class BalancerAttachMemberAction(BaseAction):
api_type = 'loadbalancer'
Expand All @@ -20,11 +16,4 @@ def run(self, credentials, balancer_id, member_ip, member_port):
member = Member(id=None, ip=member_ip, port=member_port)
record = driver.balancer_attach_member(balancer=balancer,
member=member)
result = []

values = record.__dict__
item = dict([(k, v) for k, v in values.items()
if k in RECORD_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(record)
17 changes: 1 addition & 16 deletions packs/libcloud/actions/balancer_list_members.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,6 @@
'BalancerListMembersAction'
]

RECORD_ATTRIBUTES = [
'id',
'ip',
'port',
'extra',
]


class BalancerListMembersAction(BaseAction):
api_type = 'loadbalancer'
Expand All @@ -19,12 +12,4 @@ def run(self, credentials, balancer_id):
driver = self._get_driver_for_credentials(credentials=credentials)
balancer = driver.get_balancer(balancer_id)
members = driver.balancer_list_members(balancer=balancer)
result = []

for record in members:
values = record.__dict__
item = dict([(k, v) for k, v in values.items()
if k in RECORD_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(members)
14 changes: 1 addition & 13 deletions packs/libcloud/actions/create_balancer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@
'CreateBalancerAction'
]

RECORD_ATTRIBUTES = [
'id'
]


class CreateBalancerAction(BaseAction):
api_type = 'loadbalancer'
Expand All @@ -34,12 +30,4 @@ def run(self, credentials, name, port, protocol,
protocol=protocol,
algorithm=algorithm,
members=None)

result = []

values = record.__dict__
item = dict([(k, v) for k, v in values.items()
if k in RECORD_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(record)
6 changes: 6 additions & 0 deletions packs/libcloud/actions/lib/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
from libcloud.loadbalancer.providers import get_driver as get_lb_driver
from libcloud.compute.base import Node

from libcloud_parsers import ResultSets

from st2actions.runners.pythonrunner import Action

__all__ = [
Expand All @@ -23,6 +25,10 @@
class BaseAction(Action):
api_type = None

def __init__(self, config):
super(BaseAction, self).__init__(config)
self.resultsets = ResultSets()

def _get_driver_for_credentials(self, credentials):
"""
Retrieve Libcloud provider driver instance for a particular credentials
Expand Down
70 changes: 70 additions & 0 deletions packs/libcloud/actions/lib/libcloud_parsers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/usr/bin/env python

import libcloud.compute.base as compute_base
import libcloud.dns.base as dns_base
import libcloud.loadbalancer.base as lb_base


class FieldLists():
"""
The lists of fields we want to return for each class
"""
NODE = ['id', 'name', 'state', 'public_ips', 'private_ips', 'size', 'image']
NODE_SIZE = ['id', 'name', 'ram', 'disk', 'bandwidth', 'price']
NODE_IMAGE = ['id', 'name']
LOCATION = ['id', 'name', 'country']
NODE_KEY = ['pubkey']
NODE_PASSWORD = ['password', 'generated']
STORAGE_VOLUME = ['id', 'name', 'size', 'state']
VOLUME_SNAPSHOT = ['id', 'size', 'state']
ZONE = ['id', 'domain', 'type', 'ttl']
RECORD = ['id', 'name', 'type', 'data', 'zone']
MEMBER = ['id', 'ip', 'port', 'balancer']
BALANCER = ['id', 'name', 'state', 'port']


class ResultSets(object):

def selector(self, output):
if isinstance(output, compute_base.Node):
return self.parse(output, FieldLists.NODE)
elif isinstance(output, compute_base.NodeSize):
return self.parse(output, FieldLists.NODE_SIZE)
elif isinstance(output, compute_base.NodeImage):
return self.parse(output, FieldLists.NODE_IMAGE)
elif isinstance(output, compute_base.NodeLocation):
return self.parse(output, FieldLists.LOCATION)
elif isinstance(output, compute_base.NodeAuthSSHKey):
return self.parse(output, FieldLists.NODE_KEY)
elif isinstance(output, compute_base.NodeAuthPassword):
return self.parse(output, FieldLists.NODE_PASSWORD)
elif isinstance(output, compute_base.StorageVolume):
return self.parse(output, FieldLists.STORAGE_VOLUME)
elif isinstance(output, compute_base.VolumeSnapshot):
return self.parse(output, FieldLists.VOLUME_SNAPSHOT)
elif isinstance(output, dns_base.Zone):
return self.parse(output, FieldLists.ZONE)
elif isinstance(output, dns_base.Record):
return self.parse(output, FieldLists.RECORD)
elif isinstance(output, lb_base.Member):
return self.parse(output, FieldLists.MEMBER)
elif isinstance(output, lb_base.LoadBalancer):
return self.parse(output, FieldLists.BALANCER)
else:
return output

def formatter(self, output):
formatted = []
if isinstance(output, list):
for o in output:
formatted.append(self.selector(o))
else:
formatted = self.selector(output)
return formatted

def _getval(self, obj, field):
return self.selector(getattr(obj, field))

def parse(self, output, field_list):
instance_data = {field: self._getval(output, field) for field in field_list}
return instance_data
19 changes: 1 addition & 18 deletions packs/libcloud/actions/list_balancers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,11 @@
'ListBalancersAction'
]

RECORD_ATTRIBUTES = [
'id',
'name',
'state',
'ip',
'port',
'extra'
]


class ListBalancersAction(BaseAction):
api_type = 'loadbalancer'

def run(self, credentials):
driver = self._get_driver_for_credentials(credentials=credentials)
members = driver.list_balancers()
result = []

for record in members:
values = record.__dict__
item = dict([(k, v) for k, v in values.items()
if k in RECORD_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(members)
17 changes: 1 addition & 16 deletions packs/libcloud/actions/list_dns_records.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,6 @@
'ListDNSRecordsAction'
]

RECORD_ATTRIBUTES = [
'id',
'name',
'type',
'data',
]


class ListDNSRecordsAction(BaseAction):
api_type = 'dns'
Expand All @@ -21,12 +14,4 @@ def run(self, credentials, zone_id):
driver = self._get_driver_for_credentials(credentials=credentials)
zone = Zone(id=zone_id, domain=None, type=None, ttl=None, driver=None)
records = driver.list_records(zone=zone)
result = []

for record in records:
values = record.__dict__
item = dict([(k, v) for k, v in values.items()
if k in RECORD_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(records)
17 changes: 1 addition & 16 deletions packs/libcloud/actions/list_dns_zones.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,11 @@
'ListDNSZonesAction'
]

ZONE_ATTRIBUTES = [
'id',
'domain',
'type',
'ttl'
]


class ListDNSZonesAction(BaseAction):
api_type = 'dns'

def run(self, credentials):
driver = self._get_driver_for_credentials(credentials=credentials)
zones = driver.list_zones()
result = []

for zone in zones:
values = zone.__dict__
item = dict([(k, v) for k, v in values.items()
if k in ZONE_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(zones)
14 changes: 14 additions & 0 deletions packs/libcloud/actions/list_images.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from lib.actions import BaseAction

__all__ = [
'ListImagesAction'
]


class ListImagesAction(BaseAction):
api_type = 'compute'

def run(self, credentials):
driver = self._get_driver_for_credentials(credentials=credentials)
images = driver.list_images()
return self.resultsets.formatter(images)
11 changes: 11 additions & 0 deletions packs/libcloud/actions/list_images.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
name: list_images
runner_type: run-python
description: List available node images.
enabled: true
entry_point: list_images.py
parameters:
credentials:
type: string
description: Name of the credentials set (as defined in the config) to use.
required: true
14 changes: 14 additions & 0 deletions packs/libcloud/actions/list_sizes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from lib.actions import BaseAction

__all__ = [
'ListSizesAction'
]


class ListSizesAction(BaseAction):
api_type = 'compute'

def run(self, credentials):
driver = self._get_driver_for_credentials(credentials=credentials)
sizes = driver.list_sizes()
return self.resultsets.formatter(sizes)
11 changes: 11 additions & 0 deletions packs/libcloud/actions/list_sizes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
name: list_sizes
runner_type: run-python
description: List available node sizes.
enabled: true
entry_point: list_sizes.py
parameters:
credentials:
type: string
description: Name of the credentials set (as defined in the config) to use.
required: true
17 changes: 1 addition & 16 deletions packs/libcloud/actions/list_vms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,12 @@
'ListVMsAction'
]

NODE_ATTRIBUTES = [
'id',
'name',
'state',
'public_ips',
'private_ips'
]


class ListVMsAction(BaseAction):
api_type = 'compute'

def run(self, credentials):
driver = self._get_driver_for_credentials(credentials=credentials)
vms = driver.list_nodes()
result = []

for vm in vms:
values = vm.__dict__
item = dict([(k, v) for k, v in values.items()
if k in NODE_ATTRIBUTES])
result.append(item)

return result
return self.resultsets.formatter(vms)