def url_for(self, **kwargs):
return self.client.service_catalog.url_for(**kwargs)
+
+ @property
+ def auth_token(self):
+ return self.client.auth_token
self._quantum = None
self._cinder = None
+ @property
+ def auth_token(self):
+ # if there is no auth token in the context
+ # attempt to get one using the context username and password
+ return self.context.auth_token or self.keystone().auth_token
+
def keystone(self):
if self._keystone:
return self._keystone
return self._nova[service_type]
con = self.context
+ if self.auth_token is None:
+ logger.error("Nova connection failed, no auth_token!")
+ return None
+
args = {
'project_id': con.tenant,
'auth_url': con.auth_url,
'service_type': service_type,
+ 'username': None,
+ 'api_key': None
}
- if con.password is not None:
- args['username'] = con.username
- args['api_key'] = con.password
- elif con.auth_token is not None:
- args['username'] = None
- args['api_key'] = None
- else:
- logger.error("Nova connection failed, no password or auth_token!")
- return None
-
client = novaclient.Client(1.1, **args)
- if con.password is None and con.auth_token is not None:
- management_url = self.url_for(service_type=service_type)
- client.client.auth_token = con.auth_token
- client.client.management_url = management_url
+ management_url = self.url_for(service_type=service_type)
+ client.client.auth_token = self.auth_token
+ client.client.management_url = management_url
self._nova[service_type] = client
return client
return self._swift
con = self.context
+ if self.auth_token is None:
+ logger.error("Swift connection failed, no auth_token!")
+ return None
+
args = {
'auth_version': '2.0',
'tenant_name': con.tenant,
- 'user': con.username
+ 'user': con.username,
+ 'key': None,
+ 'authurl': None,
+ 'preauthtoken': self.auth_token,
+ 'preauthurl': self.url_for(service_type='object-store')
}
-
- if con.password is not None:
- args['key'] = con.password
- args['authurl'] = con.auth_url
- elif con.auth_token is not None:
- args['key'] = None
- args['authurl'] = None
- args['preauthtoken'] = con.auth_token
- args['preauthurl'] = self.url_for(service_type='object-store')
- else:
- logger.error("Swift connection failed, no password or " +
- "auth_token!")
- return None
self._swift = swiftclient.Connection(**args)
return self._swift
if quantumclient is None:
return None
if self._quantum:
- logger.debug('using existing _quantum')
return self._quantum
con = self.context
+ if self.auth_token is None:
+ logger.error("Quantum connection failed, no auth_token!")
+ return None
+
args = {
'auth_url': con.auth_url,
'service_type': 'network',
+ 'token': self.auth_token,
+ 'endpoint_url': self.url_for(service_type='network')
}
- if con.password is not None:
- args['username'] = con.username
- args['password'] = con.password
- args['tenant_name'] = con.tenant
- elif con.auth_token is not None:
- args['token'] = con.auth_token
- args['endpoint_url'] = self.url_for(service_type='network')
- else:
- logger.error("Quantum connection failed, "
- "no password or auth_token!")
- return None
- logger.debug('quantum args %s', args)
-
self._quantum = quantumclient.Client(**args)
return self._quantum
return self._cinder
con = self.context
+ if self.auth_token is None:
+ logger.error("Cinder connection failed, no auth_token!")
+ return None
+
args = {
'service_type': 'volume',
'auth_url': con.auth_url,
- 'project_id': con.tenant
+ 'project_id': con.tenant,
+ 'username': None,
+ 'api_key': None
}
- if con.password is not None:
- args['username'] = con.username
- args['api_key'] = con.password
- elif con.auth_token is not None:
- args['username'] = None
- args['api_key'] = None
- else:
- logger.error("Cinder connection failed, "
- "no password or auth_token!")
- return None
- logger.debug('cinder args %s', args)
-
self._cinder = cinderclient.Client('1', **args)
- if con.password is None and con.auth_token is not None:
- management_url = self.url_for(service_type='volume')
- self._cinder.client.auth_token = con.auth_token
- self._cinder.client.management_url = management_url
+ management_url = self.url_for(service_type='volume')
+ self._cinder.client.auth_token = self.auth_token
+ self._cinder.client.management_url = management_url
return self._cinder
self.access = access
self.secret = secret
self.creds = None
+ self.auth_token = 'abcd1234'
def create_stack_user(self, username, password=''):
self.username = username
from heat.engine import scheduler
from heat.engine import template
+from heat.tests.fakes import FakeKeystoneClient
from heat.tests.common import HeatTestCase
from heat.tests.utils import dummy_context
from heat.tests.utils import setup_dummy_db
self.assertEqual(stack.state, (None, None))
self.assertEqual(stack.status_reason, '')
+ def test_no_auth_token(self):
+ ctx = dummy_context()
+ ctx.auth_token = None
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
+ clients.OpenStackClients.keystone().AndReturn(FakeKeystoneClient())
+
+ self.m.ReplayAll()
+ stack = parser.Stack(ctx, 'test_stack', parser.Template({}))
+ self.assertEqual('abcd1234', stack.clients.auth_token)
+
+ self.m.VerifyAll()
+
def test_state(self):
stack = parser.Stack(self.ctx, 'test_stack', parser.Template({}),
action=parser.Stack.CREATE,
from testtools import skipIf
+from heat.engine import clients
from heat.common import exception
from heat.common import template_format
from heat.engine import properties
from heat.engine.resources.quantum.quantum import QuantumResource as qr
from heat.openstack.common.importutils import try_import
from heat.tests.common import HeatTestCase
+from heat.tests import fakes
from heat.tests import utils
from heat.tests.utils import setup_dummy_db
from heat.tests.utils import parse_stack
self.m.StubOutWithMock(quantumclient.Client, 'create_network')
self.m.StubOutWithMock(quantumclient.Client, 'delete_network')
self.m.StubOutWithMock(quantumclient.Client, 'show_network')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
setup_dummy_db()
def create_net(self, t, stack, resource_name):
return rsrc
def test_net(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_network({
'network': {'name': u'the_network', 'admin_state_up': True}
}).AndReturn({"network": {
self.m.StubOutWithMock(quantumclient.Client, 'create_subnet')
self.m.StubOutWithMock(quantumclient.Client, 'delete_subnet')
self.m.StubOutWithMock(quantumclient.Client, 'show_subnet')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
setup_dummy_db()
def create_subnet(self, t, stack, resource_name):
def test_subnet(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_subnet({
'subnet': {
'name': utils.PhysName('test_stack', 'test_subnet'),
def test_subnet_disable_dhcp(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_subnet({
'subnet': {
'name': utils.PhysName('test_stack', 'test_subnet'),
self.m.StubOutWithMock(quantumclient.Client, 'remove_interface_router')
self.m.StubOutWithMock(quantumclient.Client, 'add_gateway_router')
self.m.StubOutWithMock(quantumclient.Client, 'remove_gateway_router')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
setup_dummy_db()
def create_router(self, t, stack, resource_name):
return rsrc
def test_router(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_router({
'router': {
'name': utils.PhysName('test_stack', 'router'),
self.m.VerifyAll()
def test_router_interface(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.add_interface_router(
'3e46229d-8fce-4733-819a-b5fe630550f8',
{'subnet_id': '91e47a57-7508-46fe-afc9-fc454e8580e1'}
self.m.VerifyAll()
def test_gateway_router(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.add_gateway_router(
'3e46229d-8fce-4733-819a-b5fe630550f8',
{'network_id': 'fc68ea2c-b60b-4b4f-bd82-94ec81110766'}
self.m.StubOutWithMock(quantumclient.Client, 'create_port')
self.m.StubOutWithMock(quantumclient.Client, 'delete_port')
self.m.StubOutWithMock(quantumclient.Client, 'show_port')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
setup_dummy_db()
def test_floating_ip(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_floatingip({
'floatingip': {'floating_network_id': u'abcd1234'}
}).AndReturn({'floatingip': {
def test_port(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_port({'port': {
'network_id': u'xyz1234',
'fixed_ips': [
def test_floatip_port(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
quantumclient.Client.create_floatingip({
'floatingip': {'floating_network_id': u'abcd1234'}
}).AndReturn({'floatingip': {
from heat.openstack.common.importutils import try_import
from heat.engine.resources import s3
from heat.engine import resource
+from heat.engine import clients
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
from heat.tests import utils
+from heat.tests import fakes
from heat.tests.utils import setup_dummy_db
from heat.tests.utils import parse_stack
self.m.StubOutWithMock(swiftclient.Connection, 'put_container')
self.m.StubOutWithMock(swiftclient.Connection, 'delete_container')
self.m.StubOutWithMock(swiftclient.Connection, 'get_auth')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
setup_dummy_db()
return rsrc
def test_attributes(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_public_read(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
utils.PhysName('test_stack', 'test_resource'),
self.m.VerifyAll()
def test_public_read_write(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_authenticated_read(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_website(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_delete_exception(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
def test_delete_retain(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
# first run, with retain policy
swiftclient.Connection.put_container(
utils.PhysName('test_stack', 'test_resource'),
from heat.engine import parser
from heat.engine import resource
from heat.tests.common import HeatTestCase
+from heat.tests.fakes import FakeKeystoneClient
from heat.tests.utils import dummy_context
from heat.tests.utils import setup_dummy_db
from heat.tests.v1_1 import fakes
super(SecurityGroupTest, self).setUp()
self.fc = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, 'nova')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'create')
self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'delete')
self.m.StubOutWithMock(nova_sg.SecurityGroupManager, 'create')
@stack_delete_after
def test_security_group_quantum(self):
#create script
+ clients.OpenStackClients.keystone().AndReturn(
+ FakeKeystoneClient())
sg_name = utils.PhysName('test_stack', 'the_sg')
quantumclient.Client.create_security_group({
'security_group': {
@stack_delete_after
def test_security_group_quantum_exception(self):
#create script
+ clients.OpenStackClients.keystone().AndReturn(
+ FakeKeystoneClient())
sg_name = utils.PhysName('test_stack', 'the_sg')
quantumclient.Client.create_security_group({
'security_group': {
from heat.common import template_format
from heat.openstack.common.importutils import try_import
from heat.engine.resources import swift
+from heat.engine import clients
from heat.engine import resource
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
+from heat.tests import fakes
from heat.tests import utils
from heat.tests.utils import setup_dummy_db
from heat.tests.utils import parse_stack
self.m.StubOutWithMock(swiftclient.Connection, 'delete_container')
self.m.StubOutWithMock(swiftclient.Connection, 'head_container')
self.m.StubOutWithMock(swiftclient.Connection, 'get_auth')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
setup_dummy_db()
"x-container-bytes-used": "17680980",
"content-type": "text/plain; charset=utf-8"}
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_public_read(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_public_read_write(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_website(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
self.m.VerifyAll()
def test_delete_exception(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
container_name = utils.PhysName('test_stack', 'test_resource')
swiftclient.Connection.put_container(
container_name,
def test_delete_retain(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
# first run, with retain policy
swiftclient.Connection.put_container(
utils.PhysName('test_stack', 'test_resource'),
from heat.common import exception
from heat.common import template_format
from heat.engine import parser
+from heat.engine import clients
from heat.engine import resource
from heat.tests.common import HeatTestCase
+from heat.tests import fakes
from heat.tests import utils
from heat.tests.utils import dummy_context
from heat.tests.utils import setup_dummy_db
quantumclient.Client, 'create_security_group_rule')
self.m.StubOutWithMock(
quantumclient.Client, 'delete_security_group_rule')
+ self.m.StubOutWithMock(clients.OpenStackClients, 'keystone')
def create_stack(self, template):
t = template_format.parse(template)
stack.store()
return stack
+ def mock_keystone(self):
+ clients.OpenStackClients.keystone().AndReturn(
+ fakes.FakeKeystoneClient())
+
def mock_create_network(self):
self.vpc_name = utils.PhysName('test_stack', 'the_vpc')
quantumclient.Client.create_network(
'''
def test_vpc(self):
+ self.mock_keystone()
self.mock_create_network()
self.mock_delete_network()
self.m.ReplayAll()
'''
def test_subnet(self):
+ self.mock_keystone()
self.mock_create_network()
self.mock_create_subnet()
self.mock_delete_subnet()
quantumclient.Client.delete_port('dddd').AndReturn(None)
def test_network_interface(self):
+ self.mock_keystone()
self.mock_create_security_group()
self.mock_create_network()
self.mock_create_subnet()
self.m.VerifyAll()
def test_network_interface_no_groupset(self):
+ self.mock_keystone()
self.mock_create_network()
self.mock_create_subnet()
self.mock_show_subnet()
self.assertEquals(str(expected_exception), str(real_exception))
def test_network_interface_error_no_ref(self):
+ self.mock_keystone()
self.mock_create_network()
self.mock_create_subnet()
self.mock_show_subnet()
quantumclient.Client.remove_gateway_router('ffff').AndReturn(None)
def test_internet_gateway(self):
+ self.mock_keystone()
self.mock_create_internet_gateway()
self.mock_create_network()
self.mock_create_subnet()
'''
def test_route_table(self):
+ self.mock_keystone()
self.mock_create_network()
self.mock_create_subnet()
self.mock_create_route_table()
'username': user,
'password': password,
'roles': roles,
- 'auth_url': 'http://localhost:5000/v2.0'
+ 'auth_url': 'http://localhost:5000/v2.0',
+ 'auth_token': 'abcd1234'
})