class Subnet(EmbeddedDocument):
cidr = StringField()
class VPC(EmbeddedDocument):
subnets = ListField(EmbeddedDocumentField(Subnet))
class Region(EmbeddedDocument):
vpcs = ListField(EmbeddedDocumentField(VPC))
class Account(Document):
regions = ListField(EmbeddedDocumentField(Region))
account = Account(
regions=[
Region(
vpcs=[
VPC(
subnets=[
Subnet(cidr="10.0.0.0/16"),
Subnet(cidr="10.0.1.0/16"),
Subnet(cidr="10.0.2.0/16"),
]
)
]
)
]
)
{
"_id": ObjectId("some-autogenerated-id"),
"regions": [
{
"vpcs": [
{
"subnets": [
{
"cidr": "10.0.0.0/16"
},
{
"cidr": "10.0.1.0/16"
},
{
"cidr": "10.0.2.0/16"
}
]
}
]
}
]
}
class Subnet(EmbeddedDocument):
subnetid = StringField()
class VPC(EmbeddedDocument):
vpcid = StringField()
subnets = ListField(EmbeddedDocumentField(Subnet))
class Region(EmbeddedDocument):
region = StringField()
vpcs = ListField(EmbeddedDocumentField(VPC))
class CloudAccount(Document):
account_id = StringField()
cloud_name = StringField(max_length=25)
account_number = IntField(required=True)
account_name = StringField()
regions = ListField(EmbeddedDocumentField(Region))
def append_subnet(self,account_name,db_host,db_port,db_username,db_password,db_name,region,vpcid,subnetid):
''' Append a Region, VPC, and Subnet to any existing account record'''
accounts = inv.db_connect(self, db_host, db_port, db_username, db_password, db_name)
account = CloudAccount.objects.get(account_name=account_name)
region_counter = 0
region_matches = 0
for r in account.regions:
if r == account.regions[region_counter].region:
region_matches = 1
print("matched")
break
print("Region_Matches = %s" % (region_matches))
if region_matches is 0:
regions = account.regions
regions.region.append(region)
regions.save()