You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2013/10/02 18:42:06 UTC
[36/50] [abbrv] git commit: updated refs/heads/marvin-refactor to
bbaf354
marvin_refactor: additional factories for entities
staticnat, vpc, vpcoffering, networkoffering, etc
All classes within factories don't include the redundant *Factory in
their naming.
Signed-off-by: Prasanna Santhanam <ts...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7d4b35df
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7d4b35df
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7d4b35df
Branch: refs/heads/marvin-refactor
Commit: 7d4b35df83872d71266feb9ba22af48d6ed75e54
Parents: dab5ae5
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Mon Sep 30 09:51:19 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Oct 2 20:27:58 2013 +0530
----------------------------------------------------------------------
tools/marvin/marvin/factory/data/account.py | 6 +-
tools/marvin/marvin/factory/data/cluster.py | 4 +-
.../marvin/marvin/factory/data/diskoffering.py | 4 +-
.../marvin/marvin/factory/data/firewallrule.py | 4 +-
tools/marvin/marvin/factory/data/host.py | 4 +-
tools/marvin/marvin/factory/data/network.py | 32 ++++++--
.../marvin/factory/data/networkoffering.py | 37 +++++++++-
.../marvin/marvin/factory/data/securitygroup.py | 72 ++++++++++++++++++
.../marvin/factory/data/serviceoffering.py | 2 +-
tools/marvin/marvin/factory/data/staticnat.py | 16 ++++
tools/marvin/marvin/factory/data/template.py | 2 +-
tools/marvin/marvin/factory/data/user.py | 10 +--
tools/marvin/marvin/factory/data/vm.py | 77 +++++++++++++++++---
tools/marvin/marvin/factory/data/vpc.py | 35 +++++++++
tools/marvin/marvin/factory/data/vpcoffering.py | 43 +++++++++++
tools/marvin/marvin/factory/data/zone.py | 4 +-
16 files changed, 312 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/account.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/account.py b/tools/marvin/marvin/factory/data/account.py
index 97caf16..be641d6 100644
--- a/tools/marvin/marvin/factory/data/account.py
+++ b/tools/marvin/marvin/factory/data/account.py
@@ -19,7 +19,7 @@ import factory
from marvin.factory.account import AccountFactory
from marvin.legacy.utils import random_gen
-class UserAccountFactory(AccountFactory):
+class UserAccount(AccountFactory):
accounttype = 0
firstname = factory.Sequence(lambda n: random_gen())
@@ -29,10 +29,10 @@ class UserAccountFactory(AccountFactory):
password = 'password'
-class AdminAccountFactory(UserAccountFactory):
+class AdminAccount(UserAccount):
accounttype = 1
-class DomainAdminFactory(UserAccountFactory):
+class DomainAdmin(UserAccount):
accounttype = 2
domainid = None
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/cluster.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/cluster.py b/tools/marvin/marvin/factory/data/cluster.py
index c51321d..5e8c8eb 100644
--- a/tools/marvin/marvin/factory/data/cluster.py
+++ b/tools/marvin/marvin/factory/data/cluster.py
@@ -19,12 +19,12 @@ import factory
from marvin.legacy.utils import random_gen
from marvin.factory.cluster import ClusterFactory
-class XenClusterFactory(ClusterFactory):
+class XenCluster(ClusterFactory):
clustername = factory.Sequence(lambda n: "xencluster" + random_gen())
clustertype = "XenServer"
hypervisor = "XenServer"
-class KvmClusterFactory(ClusterFactory):
+class KvmCluster(ClusterFactory):
clustername = factory.Sequence(lambda n: "kvmcluster" + random_gen())
clustertype = "KVM"
hypervisor = "KVM"
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/diskoffering.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/diskoffering.py b/tools/marvin/marvin/factory/data/diskoffering.py
index 48526b8..89a48b4 100644
--- a/tools/marvin/marvin/factory/data/diskoffering.py
+++ b/tools/marvin/marvin/factory/data/diskoffering.py
@@ -19,14 +19,14 @@ import factory
from marvin.factory.diskoffering import DiskOfferingFactory
from marvin.legacy.utils import random_gen
-class SharedDiskOfferingFactory(DiskOfferingFactory):
+class SharedDiskOffering(DiskOfferingFactory):
displaytext = "SharedDiskOffering"
name = factory.Sequence(lambda n : "SharedDiskOffering" + random_gen())
storagetype = "shared"
disksize = 10 #MB
-class LocalDiskOfferingFactory(DiskOfferingFactory):
+class LocalDiskOffering(DiskOfferingFactory):
displaytext = "LocalDiskOffering"
name = factory.Sequence(lambda n : "LocalDiskOffering" + random_gen())
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/firewallrule.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/firewallrule.py b/tools/marvin/marvin/factory/data/firewallrule.py
index 692450b..44cc17f 100644
--- a/tools/marvin/marvin/factory/data/firewallrule.py
+++ b/tools/marvin/marvin/factory/data/firewallrule.py
@@ -17,13 +17,13 @@
from marvin.factory.firewall import FirewallFactory
-class SshFirewallRuleFactory(FirewallFactory):
+class SshFirewallRule(FirewallFactory):
protocol = 'tcp'
startport = 22
endport = 22
cidrlist = '0.0.0.0/0'
-class HttpFirewallRuleFactory(FirewallFactory):
+class HttpFirewallRule(FirewallFactory):
protocol = 'tcp'
startport = 80
endport = 80
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/host.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/host.py b/tools/marvin/marvin/factory/data/host.py
index 726ceb7..02d2433 100644
--- a/tools/marvin/marvin/factory/data/host.py
+++ b/tools/marvin/marvin/factory/data/host.py
@@ -17,14 +17,14 @@
from marvin.factory.host import HostFactory
-class XenserverHostFactory(HostFactory):
+class XenserverHost(HostFactory):
hypervisor = 'XenServer'
password = 'password'
username = 'root'
-class KvmHostFactory(HostFactory):
+class KvmHost(HostFactory):
hypervisor = 'KVM'
password = 'password'
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/network.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/network.py b/tools/marvin/marvin/factory/data/network.py
index ad6101c..50c0086 100644
--- a/tools/marvin/marvin/factory/data/network.py
+++ b/tools/marvin/marvin/factory/data/network.py
@@ -18,31 +18,47 @@
import factory
from marvin.legacy.utils import random_gen
from marvin.factory.network import NetworkFactory
-from marvin.factory.data.networkoffering import DefaultIsolatedNetworkOfferingWithSourceNatServiceFactory
-from marvin.factory.data.networkoffering import DefaultSharedNetworkOfferingFactory
+from marvin.factory.data.networkoffering import DefaultIsolatedNetworkOfferingWithSourceNatService
+from marvin.factory.data.networkoffering import DefaultSharedNetworkOffering
+from marvin.factory.data.networkoffering import DefaultIsolatedNetworkOfferingForVpc
-class GuestIsolatedNetworkFactory(NetworkFactory):
+class GuestIsolatedNetwork(NetworkFactory):
displaytext = factory.Sequence(lambda n: 'GuestIsolatedNetwork-%s' % random_gen())
name = factory.Sequence(lambda n: 'GuestIsolatedNetwork-%s' % random_gen())
networkoffering =\
factory.SubFactory(
- DefaultIsolatedNetworkOfferingWithSourceNatServiceFactory,
+ DefaultIsolatedNetworkOfferingWithSourceNatService,
apiclient=factory.SelfAttribute('..apiclient'),
name=factory.Sequence(lambda n: 'GuestIsolatedNetworkOffering-%s' % random_gen()),
)
networkofferingid = factory.LazyAttribute(lambda no: no.networkoffering.id if no.networkoffering else no.networkoffering)
zoneid = None
-class SharedNetworkFactory(NetworkFactory):
+class SharedNetwork(NetworkFactory):
displaytext = factory.Sequence(lambda n: 'SharedNetwork-%s' % random_gen())
- name = factory.Sequence(lambda n: 'SharedNetwork-%d' % random_gen())
+ name = factory.Sequence(lambda n: 'SharedNetwork-%s' % random_gen())
networkoffering = \
factory.SubFactory(
- DefaultSharedNetworkOfferingFactory,
+ DefaultSharedNetworkOffering,
apiclient=factory.SelfAttribute('..apiclient'),
name=factory.Sequence(lambda n: 'SharedNetworkOffering-%s' % random_gen())
)
- networkofferingid = factory.LazyAttribute(lambda no: no.networkoffering.id if not no.networkoffering else no.networkoffering)
+ networkofferingid = factory.LazyAttribute(lambda no: no.networkoffering.id if no.networkoffering else no.networkoffering)
+ zoneid = None
+
+class DefaultVpcNetwork(NetworkFactory):
+
+ displaytext = factory.Sequence(lambda n: 'DefaultVpcNetwork-%s' % random_gen())
+ name = factory.Sequence(lambda n: 'DefaultVpcNetwork-%s' % random_gen())
+ networkoffering = \
+ factory.SubFactory(
+ DefaultIsolatedNetworkOfferingForVpc,
+ apiclient=factory.SelfAttribute('..apiclient'),
+ name=factory.Sequence(lambda n: 'DefaultVpcNetwork-%s' % random_gen())
+ )
+ gateway = '10.0.0.1'
+ netmask = '255.255.255.192'
+ networkofferingid = factory.LazyAttribute(lambda no: no.networkoffering.id if no.networkoffering else no.networkoffering)
zoneid = None
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/networkoffering.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/networkoffering.py b/tools/marvin/marvin/factory/data/networkoffering.py
index 5b64cf6..1a65f85 100644
--- a/tools/marvin/marvin/factory/data/networkoffering.py
+++ b/tools/marvin/marvin/factory/data/networkoffering.py
@@ -20,7 +20,7 @@ from marvin.factory.networkoffering import NetworkOfferingFactory
from marvin.legacy.utils import random_gen
-class DefaultIsolatedNetworkOfferingWithSourceNatServiceFactory(NetworkOfferingFactory):
+class DefaultIsolatedNetworkOfferingWithSourceNatService(NetworkOfferingFactory):
#FIXME: Service Capability Lists with CapabilityTypes (ElasticIP, RvR etc) needs handling
displaytext = factory.Sequence(lambda n : "DefaultIsolatedNetworkOfferingWithSourceNatService" + random_gen())
@@ -51,7 +51,7 @@ class DefaultIsolatedNetworkOfferingWithSourceNatServiceFactory(NetworkOfferingF
self.update(apiclient=self.apiclient, id=self.id, state='Enabled')
-class DefaultSharedNetworkOfferingWithSGServiceFactory(NetworkOfferingFactory):
+class DefaultSharedNetworkOfferingWithSGService(NetworkOfferingFactory):
displaytext = factory.Sequence(lambda n : "DefaultSharedNetworkOfferingWithSGService" + random_gen())
name = factory.Sequence(lambda n : "DefaultSharedNetworkOfferingWithSGService" + random_gen())
@@ -86,7 +86,7 @@ class DefaultSharedNetworkOfferingWithSGServiceFactory(NetworkOfferingFactory):
self.update(apiclient=self.apiclient, id=self.id, state='Enabled')
-class DefaultSharedNetworkOfferingFactory(NetworkOfferingFactory):
+class DefaultSharedNetworkOffering(NetworkOfferingFactory):
displaytext = factory.Sequence(lambda n : "DefaultSharedNetworkOfferingFactory-%s" % random_gen())
name = factory.Sequence(lambda n : "DefaultSharedNetworkOfferingFactory-%s" % random_gen())
@@ -115,3 +115,34 @@ class DefaultSharedNetworkOfferingFactory(NetworkOfferingFactory):
if not create:
return
self.update(apiclient=self.apiclient, id=self.id, state='Enabled')
+
+
+class DefaultIsolatedNetworkOfferingForVpc(NetworkOfferingFactory):
+
+ displaytext = factory.Sequence(lambda n : "DefaultIsolatedNetworkOfferingForVpc-%s" % random_gen())
+ name = factory.Sequence(lambda n : "DefaultIsolatedNetworkOfferingForVpc-%s" % random_gen())
+ availability = "Optional"
+ supportedservices = "SourceNat,Dns,Lb,PortForwarding,StaticNat,NetworkACL,Dhcp,Vpn,UserData"
+ guestiptype = "Isolated"
+ traffictype = "GUEST"
+
+ specifyVlan = False
+ specifyIpRanges = False
+ isPersistent = False
+ conserveMode = False
+
+ serviceProviderList = []
+ for service in map(lambda l: l.strip(' '), supportedservices.split(',')):
+ serviceProviderList.append(
+ {
+ 'service': service,
+ 'provider': 'VpcVirtualRouter'
+ }
+ )
+
+ # enable the offering post generation
+ @factory.post_generation
+ def enable(self, create, extracted, **kwargs):
+ if not create:
+ return
+ self.update(apiclient=self.apiclient, id=self.id, state='Enabled')
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/securitygroup.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/securitygroup.py b/tools/marvin/marvin/factory/data/securitygroup.py
new file mode 100644
index 0000000..1e6d375
--- /dev/null
+++ b/tools/marvin/marvin/factory/data/securitygroup.py
@@ -0,0 +1,72 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import factory
+from marvin.legacy.utils import random_gen
+from marvin.entity.securitygroup import SecurityGroup
+from marvin.factory.securitygroup import SecurityGroupFactory
+
+class SecurityGroupSshIngress(SecurityGroupFactory):
+ """
+ Allow port 22 (ingress) into the guest
+ """
+ name = factory.Sequence(lambda n: 'SshSecurityGroupIngress-' + random_gen())
+ protocol = 'tcp'
+ cidrlist = '0.0.0.0/0'
+ startport = 22
+ endport = 22
+
+ @factory.post_generation
+ def authorizeIngress(self, create, extracted, **kwargs):
+ if not create:
+ return
+ sg = SecurityGroup.list(name=self.name)
+ if not sg:
+ self.authorizeSecurityGroupIngress(
+ self.apiclient,
+ name=self.name,
+ protocol=self.protocol,
+ cidrlist=self.cidrlist,
+ startport=self.startport,
+ endport=self.endport
+ )
+
+
+class SecurityGroupSshEgress(SecurityGroupFactory):
+ """
+ Allow port 22 (egress) out of the guest
+ """
+ name = factory.Sequence(lambda n: 'SshSecurityGroupEgress-' + random_gen())
+ protocol = 'tcp'
+ cidrlist = '0.0.0.0/0'
+ startport = 22
+ endport = 22
+
+ @factory.post_generation
+ def authorizeEgress(self, create, extracted, **kwargs):
+ if not create:
+ return
+ sg = SecurityGroup.list(name=self.name)
+ if not sg:
+ self.authorizeSecurityGroupEgress(
+ self.apiclient,
+ name=self.name,
+ protocol=self.protocol,
+ cidrlist=self.cidrlist,
+ startport=self.startport,
+ endport=self.endport
+ )
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/serviceoffering.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/serviceoffering.py b/tools/marvin/marvin/factory/data/serviceoffering.py
index 955657e..cc62358 100644
--- a/tools/marvin/marvin/factory/data/serviceoffering.py
+++ b/tools/marvin/marvin/factory/data/serviceoffering.py
@@ -19,7 +19,7 @@ import factory
from marvin.factory.serviceoffering import ServiceOfferingFactory
from marvin.legacy.utils import random_gen
-class SmallServiceOfferingFactory(ServiceOfferingFactory):
+class SmallServiceOffering(ServiceOfferingFactory):
cpunumber = 1
cpuspeed = 100 #Mhz
memory = 100 #MB
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/staticnat.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/staticnat.py b/tools/marvin/marvin/factory/data/staticnat.py
new file mode 100644
index 0000000..13a8339
--- /dev/null
+++ b/tools/marvin/marvin/factory/data/staticnat.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/template.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/template.py b/tools/marvin/marvin/factory/data/template.py
index 4c576fb..445899e 100644
--- a/tools/marvin/marvin/factory/data/template.py
+++ b/tools/marvin/marvin/factory/data/template.py
@@ -17,7 +17,7 @@
from marvin.factory.template import TemplateFactory
-class DefaultBuiltInTemplateFactory(TemplateFactory):
+class DefaultBuiltInTemplate(TemplateFactory):
ostype = 'CentOS 5.3 (64-bit)'
displaytext = 'CentOS 5.3 (64-bit)'
name = 'CentOS 5.3 (64-bit)'
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/user.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/user.py b/tools/marvin/marvin/factory/data/user.py
index d5fa456..588c294 100644
--- a/tools/marvin/marvin/factory/data/user.py
+++ b/tools/marvin/marvin/factory/data/user.py
@@ -17,17 +17,17 @@
import factory
from marvin.factory.user import UserFactory
-from marvin.factory.data.account import UserAccountFactory
+from marvin.factory.data.account import UserAccount
from marvin.legacy.utils import random_gen
-class UserFactory(UserFactory):
+class User(UserFactory):
firstname = factory.Sequence(lambda n: random_gen())
lastname = factory.Sequence(lambda n: random_gen())
email = factory.LazyAttribute(lambda e: '{0}.{1}@cloudstack.org'.format(e.firstname, e.lastname).lower())
username = factory.Sequence(lambda n: random_gen())
password = 'password'
- account = factory.SubFactory(UserAccountFactory,
+ account = factory.SubFactory(UserAccount,
apiclient=factory.SelfAttribute('..apiclient'),
accounttype=0,
firstname=factory.SelfAttribute('..firstname'),
@@ -37,9 +37,9 @@ class UserFactory(UserFactory):
username=factory.SelfAttribute('..username'),
)
-class AdminUserFactory(UserFactory):
+class AdminUser(UserFactory):
- account = factory.SubFactory(UserAccountFactory,
+ account = factory.SubFactory(UserAccount,
apiclient=factory.SelfAttribute('..apiclient'),
accounttype=1,
firstname=factory.SelfAttribute('..firstname'),
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/vm.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/vm.py b/tools/marvin/marvin/factory/data/vm.py
index a09abe7..b9e6345 100644
--- a/tools/marvin/marvin/factory/data/vm.py
+++ b/tools/marvin/marvin/factory/data/vm.py
@@ -15,18 +15,77 @@
# specific language governing permissions and limitations
# under the License.
+import factory
from marvin.factory.virtualmachine import VirtualMachineFactory
+from marvin.entity.ipaddress import IpAddress
+from marvin.entity.network import Network
+from marvin.factory.data.firewallrule import SshFirewallRule
+from marvin.factory.data.vpc import DefaultVpc
+from marvin.factory.data.network import DefaultVpcNetwork
-class VirtualMachineIsolatedNetwork(VirtualMachineFactory):
+class VirtualMachineWithStaticNat(VirtualMachineFactory):
+ """VirtualMachine in an isolated network of an advanced zone
+
+ Open a static-nat rule to connect to the guest over port 22
+ """
+
+ @factory.post_generation
+ def staticNat(self, create, extracted, **kwargs):
+ if not create:
+ return
+ ipassoc = IpAddress(
+ apiclient=self.apiclient,
+ account=self.account,
+ domainid=self.domainid,
+ zoneid=self.zoneid,
+ )
+ ssh_fwrule = SshFirewallRule(
+ apiclient=self.apiclient,
+ ipaddressid=ipassoc.id
+ )
+ ntwks = Network.list(
+ apiclient=self.apiclient,
+ account=self.account,
+ domainid=self.domainid,
+ )
+ ntwks[0].enableStaticNat(
+ apiclient=self.apiclient,
+ ipaddressid=ipassoc.id,
+ virtualmachineid=self.id,
+ )
+ self.ssh_ip = ipassoc.ipaddress
+ self.public_ip = ipassoc.ipaddress
+
+
+class VirtualMachineWithIngress(VirtualMachineFactory):
+ """VirtualMachine created in a basic zone with security groups
+
+ Allow port 22 (ingress) into the guest
"""
- Creates a virtualmachine in an isolated network typically in an advanced zone inside a user account
+ @factory.post_generation
+ def allowIngress(self, create, extracted, **kwargs):
+ if not create:
+ return
- Uses a serviceoffering of tinyInstance of the shared storage type
- Uses a builtin template available
- Deploys in the first zone available
+
+class VpcVirtualMachine(VirtualMachineFactory):
+ """
+ VirtualMachine within a VPC created by DefaultVPC offering
"""
- apiclient = None
- serviceofferingid = None
- templateid = None
- zoneid = None
+ vpc = factory.SubFactory(
+ DefaultVpc,
+ apiclient=factory.SelfAttribute('..apiclient'),
+ account=factory.SelfAttribute('..account'),
+ domainid=factory.SelfAttribute('..domainid'),
+ zoneid=factory.SelfAttribute('..zoneid')
+ )
+ ntwk = factory.SubFactory(
+ DefaultVpcNetwork,
+ apiclient=factory.SelfAttribute('..apiclient'),
+ account=factory.SelfAttribute('..account'),
+ domainid=factory.SelfAttribute('..domainid'),
+ zoneid=factory.SelfAttribute('..zoneid'),
+ vpcid=factory.SelfAttribute('..vpc.id')
+ )
+ networkid=factory.LazyAttribute(lambda n: n.ntwk.id if n else None)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/vpc.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/vpc.py b/tools/marvin/marvin/factory/data/vpc.py
new file mode 100644
index 0000000..fc0379c
--- /dev/null
+++ b/tools/marvin/marvin/factory/data/vpc.py
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import factory
+from marvin.factory.vpc import VpcFactory
+from marvin.factory.data.vpcoffering import DefaultVpcOffering
+from marvin.legacy.utils import random_gen
+
+class DefaultVpc(VpcFactory):
+
+ name = factory.Sequence(lambda e: "DefaultVpc" + random_gen())
+ cidr = '10.0.0.1/24'
+ displaytext = name
+ zoneid = None
+ apiclient = None
+ vpcoffering = \
+ factory.SubFactory(
+ DefaultVpcOffering,
+ apiclient=factory.SelfAttribute('..apiclient')
+ )
+ vpcofferingid = factory.LazyAttribute(lambda vo: vo.vpcoffering.id if vo.vpcoffering else vo.vpcoffering)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/vpcoffering.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/vpcoffering.py b/tools/marvin/marvin/factory/data/vpcoffering.py
new file mode 100644
index 0000000..c0040c6
--- /dev/null
+++ b/tools/marvin/marvin/factory/data/vpcoffering.py
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import factory
+from marvin.factory.vpcoffering import VpcOfferingFactory
+from marvin.legacy.utils import random_gen
+
+class DefaultVpcOffering(VpcOfferingFactory):
+
+ apiclient = None
+ displaytext = factory.Sequence(lambda n: 'Default VPC offering' + random_gen())
+ name = factory.Sequence(lambda n: 'Default VPC offering' + random_gen())
+ supportedservices = 'SourceNat,Dns,Lb,PortForwarding,StaticNat,NetworkACL,Dhcp,Vpn,UserData'
+
+ serviceProviderList = []
+ for service in map(lambda l: l.strip(' '), supportedservices.split(',')):
+ serviceProviderList.append(
+ {
+ 'service': service,
+ 'provider': 'VpcVirtualRouter'
+ }
+ )
+
+ # enable the offering post generation
+ @factory.post_generation
+ def enable(self, create, extracted, **kwargs):
+ if not create:
+ return
+ self.update(id=self.id, state='Enabled')
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4b35df/tools/marvin/marvin/factory/data/zone.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/factory/data/zone.py b/tools/marvin/marvin/factory/data/zone.py
index 67c1cb4..80cb67a 100644
--- a/tools/marvin/marvin/factory/data/zone.py
+++ b/tools/marvin/marvin/factory/data/zone.py
@@ -19,14 +19,14 @@ import factory
from marvin.factory.zone import ZoneFactory
from marvin.legacy.utils import random_gen
-class AdvancedZoneFactory(ZoneFactory):
+class AdvancedZone(ZoneFactory):
name = factory.Sequence(lambda n: "advzone" + random_gen())
networktype = "Advanced"
dns1 = "8.8.8.8"
internaldns1 = "8.8.8.8"
-class BasicZoneFactory(ZoneFactory):
+class BasicZone(ZoneFactory):
name = factory.Sequence(lambda n: "basiczone" + random_gen())
networktype = "Basic"
dns1 = "8.8.8.8"