diff --git a/flameclient/cmd.py b/flameclient/cmd.py index 55c747f..bd6eec9 100644 --- a/flameclient/cmd.py +++ b/flameclient/cmd.py @@ -27,7 +27,7 @@ from __future__ import print_function import argparse import os -from flame import TemplateGenerator +from flameclient import flame def main(args=None): @@ -67,8 +67,9 @@ def main(args=None): "stack data file.") args = parser.parse_args() - template = TemplateGenerator(args.username, args.password, args.project, - args.auth_url, args.insecure) + template = flame.TemplateGenerator(args.username, args.password, + args.project, args.auth_url, + args.insecure) template.extract_vm_details(args.exclude_servers, args.exclude_volumes, args.generate_stack_data) template.extract_data() diff --git a/flameclient/flame.py b/flameclient/flame.py index 26d4b5d..b902f00 100644 --- a/flameclient/flame.py +++ b/flameclient/flame.py @@ -24,7 +24,7 @@ import logging -import ipaddr +import netaddr import yaml from flameclient import managers @@ -193,8 +193,10 @@ class TemplateGenerator(object): port_resource_name: { 'type': resource_type, 'properties': { - 'subnet_id': {'get_resource': subnet_resource_name}, - 'router_id': {'get_resource': router_resource_name} + 'subnet_id': { + 'get_resource': subnet_resource_name}, + 'router_id': { + 'get_resource': router_resource_name} } } } @@ -229,7 +231,7 @@ class TemplateGenerator(object): router) def _extract_networks(self): - for n, network in self.networks.itervalues(): + for n, network in self.networks.values(): if network['router:external']: self.external_networks.append(network['id']) continue @@ -261,7 +263,7 @@ class TemplateGenerator(object): return "subnet_%d" % self.subnets[subnet_id][0] def _extract_subnets(self): - for n, subnet in self.subnets.itervalues(): + for n, subnet in self.subnets.values(): if subnet['network_id'] in self.external_networks: continue subnet_resource_name = "subnet_%d" % n @@ -306,12 +308,12 @@ class TemplateGenerator(object): del rule['tenant_id'] del rule['id'] del rule['security_group_id'] - rule = dict((k, v) for k, v in rule.iteritems() if v is not None) + rule = dict((k, v) for k, v in rule.items() if v is not None) brules.append(rule) return brules def _extract_secgroups(self): - for n, secgroup in self.secgroups.itervalues(): + for n, secgroup in self.secgroups.values(): resource_name = "security_group_%d" % n resource_type = 'OS::Neutron::SecurityGroup' @@ -340,7 +342,7 @@ class TemplateGenerator(object): self.template['resources'].update(resource) def _extract_keys(self): - for n, key in self.keys.itervalues(): + for n, key in self.keys.values(): key_resource_name = "key_%d" % n resource_type = 'OS::Nova::KeyPair' @@ -389,9 +391,9 @@ class TemplateGenerator(object): networks = [] for net_name in addresses: ip = addresses[net_name][0]['addr'] - for s, subnet in self.subnets.itervalues(): - if ipaddr.IPAddress(ip) in ipaddr.IPNetwork(subnet['cidr']): - for n, network in self.networks.itervalues(): + for s, subnet in self.subnets.values(): + if netaddr.IPAddress(ip) in netaddr.IPNetwork(subnet['cidr']): + for n, network in self.networks.values(): if (network['name'] == net_name and network['id'] == subnet['network_id']): net = self.get_network_resource_name( @@ -400,7 +402,7 @@ class TemplateGenerator(object): return networks def _extract_servers(self): - for n, server in self.servers.itervalues(): + for n, server in self.servers.values(): resource_name = "server_%d" % n resource_type = 'OS::Nova::Server' @@ -533,7 +535,7 @@ class TemplateGenerator(object): self.template['resources'].update(floating_resource) def _extract_volumes(self): - for n, volume in self.volumes.itervalues(): + for n, volume in self.volumes.values(): resource_name = "volume_%d" % n resource_type = 'OS::Cinder::Volume' diff --git a/flameclient/managers.py b/flameclient/managers.py index 152c6e1..c64d314 100644 --- a/flameclient/managers.py +++ b/flameclient/managers.py @@ -48,7 +48,7 @@ class KeystoneManager(object): insecure=self.insecure) return self._client - def set_client(client): + def set_client(self, client): self._client = client def get_token(self): @@ -138,8 +138,8 @@ class NovaManager(object): def client(self): if not self._client: self._client = nova_client.Client(self.username, self.password, - self.project, self.auth_url, - insecure=self.insecure) + self.project, self.auth_url, + insecure=self.insecure) return self._client def set_client(self, client): diff --git a/flameclient/tests/test_flame.py b/flameclient/tests/test_flame.py index 2e2e591..cef9e7e 100644 --- a/flameclient/tests/test_flame.py +++ b/flameclient/tests/test_flame.py @@ -26,7 +26,6 @@ import datetime import mock -import flameclient from flameclient.flame import TemplateGenerator # noqa from flameclient.tests import base @@ -85,21 +84,23 @@ class FakeSecurityGroup(FakeBase): class FakeNeutronManager(object): - groups = [] - routers = [{'name': 'myrouter', - 'id': '1234', - 'admin_state_up': 'true', - 'external_gateway_info': None}, ] - ports = [] - subnets = [] - networks = [{'status': 'ACTIVE', - 'subnets': ['1111'], - 'name': 'mynetwork', - 'router:external': False, - 'admin_state_up': True, - 'shared': False, - 'id': '2222'}, ] - floatingips = [] + + def __init__(self): + self.groups = [] + self.routers = [{'name': 'myrouter', + 'id': '1234', + 'admin_state_up': 'true', + 'external_gateway_info': None}, ] + self.ports = [] + self.subnets = [] + self.networks = [{'status': 'ACTIVE', + 'subnets': ['1111'], + 'name': 'mynetwork', + 'router:external': False, + 'admin_state_up': True, + 'shared': False, + 'id': '2222'}, ] + self.floatingips = [] def subnet_list(self): return self.subnets @@ -125,10 +126,12 @@ class FakeNeutronManager(object): class FakeNovaManager(object): - servers = [FakeServer()] - flavors = [FakeFlavor(id='2', name='m1.small')] - groups = {} - keypairs = [FakeKeypair(name='testkey', public_key='ssh-rsa XXXX')] + def __init__(self): + self.servers = [FakeServer()] + self.flavors = [FakeFlavor(id='2', name='m1.small')] + self.groups = {} + self.keypairs = [FakeKeypair(name='testkey', + public_key='ssh-rsa XXXX')] def keypair_list(self): return self.keypairs @@ -145,7 +148,8 @@ class FakeNovaManager(object): class FakeCinderManager(object): - volumes = [FakeVolume(), ] + def __init__(self): + self.volumes = [FakeVolume(), ] def volume_list(self): return self.volumes @@ -266,9 +270,9 @@ class StackDataTests(base.TestCase): 'mac_address': 'fa:16:3e:4b:8c:98', 'fixed_ips': [{'subnet_id': '1111', 'ip_address': '10.123.2.3'}], - 'id': '1234567', - 'security_groups': [], - 'device_id': '1234'}, ] + 'id': '1234567', + 'security_groups': [], + 'device_id': '1234'}, ] fake.subnets = [{'name': 'subnet_1111', 'enable_dhcp': True, 'network_id': '1234', @@ -313,7 +317,6 @@ class StackDataTests(base.TestCase): self.assertEqual(expected, generator.stack_data) def test_network(self): - fake = FakeNeutronManager() self.mock_neutron.return_value = FakeNeutronManager() generator = TemplateGenerator('x', 'x', 'x', 'x', True) generator.extract_vm_details(False, False, True) @@ -422,18 +425,16 @@ class StackDataTests(base.TestCase): self.assertEqual(expected, generator.stack_data) def test_security_group(self): - rules = [{ - 'remote_group_id': None, - 'direction': 'ingress', - 'remote_ip_prefix': '0.0.0.0/0', - 'protocol': 'tcp', - 'ethertype': 'IPv4', - 'tenant_id': '7777', - 'port_range_max': 22, - 'port_range_min': 22, - 'id': '8901', - 'security_group_id': '1234' - }, ] + rules = [{'remote_group_id': None, + 'direction': 'ingress', + 'remote_ip_prefix': '0.0.0.0/0', + 'protocol': 'tcp', + 'ethertype': 'IPv4', + 'tenant_id': '7777', + 'port_range_max': 22, + 'port_range_min': 22, + 'id': '8901', + 'security_group_id': '1234'}, ] fake = FakeNeutronManager() fake.groups = [{'tenant_id': '7777', 'name': 'somename', @@ -464,18 +465,16 @@ class StackDataTests(base.TestCase): self.assertEqual(expected, generator.stack_data) def test_default_security_group(self): - rules = [{ - 'remote_group_id': None, - 'direction': 'ingress', - 'remote_ip_prefix': '0.0.0.0/0', - 'protocol': 'tcp', - 'ethertype': 'IPv4', - 'tenant_id': '7777', - 'port_range_max': 22, - 'port_range_min': 22, - 'id': '8901', - 'security_group_id': '1234' - }, ] + rules = [{'remote_group_id': None, + 'direction': 'ingress', + 'remote_ip_prefix': '0.0.0.0/0', + 'protocol': 'tcp', + 'ethertype': 'IPv4', + 'tenant_id': '7777', + 'port_range_max': 22, + 'port_range_min': 22, + 'id': '8901', + 'security_group_id': '1234'}, ] fake = FakeNeutronManager() fake.groups = [{'tenant_id': '7777', 'name': 'default', @@ -735,9 +734,9 @@ class NetworkTests(base.TestCase): 'mac_address': 'fa:16:3e:4b:8c:98', 'fixed_ips': [{'subnet_id': '1111', 'ip_address': '10.123.2.3'}], - 'id': '1234567', - 'security_groups': [], - 'device_id': '1234'}, ] + 'id': '1234567', + 'security_groups': [], + 'device_id': '1234'}, ] fake.subnets = [{'name': 'subnet_1111', 'enable_dhcp': True, 'network_id': '1234', @@ -779,7 +778,6 @@ class NetworkTests(base.TestCase): self.assertEqual(expected, generator.template) def test_network(self): - fake = FakeNeutronManager() self.mock_neutron.return_value = FakeNeutronManager() generator = TemplateGenerator('x', 'x', 'x', 'x', True) generator.extract_vm_details(False, False, True) @@ -1231,12 +1229,11 @@ class NetworkTests(base.TestCase): 'description': 'security_group_1', 'security_group_rules': rules1, 'id': '1111'}, - {'tenant_id': '7777', + {'tenant_id': '7777', 'name': 'security_group_2', 'description': 'security_group_2', 'security_group_rules': rules2, - 'id': '2222'}, - ] + 'id': '2222'}, ] self.mock_neutron.return_value = fake generator = TemplateGenerator('x', 'x', 'x', 'x', True) diff --git a/requirements.txt b/requirements.txt index c08190c..5bb4f4c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ pbr>=0.6,!=0.7,<1.0 Babel>=1.3 argparse -ipaddr +netaddr>=0.7.12 python-keystoneclient python-neutronclient python-novaclient