summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-03-03 20:06:52 +0000
committerGerrit Code Review <review@openstack.org>2013-03-03 20:06:52 +0000
commita9ffc4760bf5f5bc782b53d47f9c53948a868df2 (patch)
treecf0ed1514360629a0235ea98ab87f3a47de1c853
parent5d8e6130e4c1f5abf85dc87456b3844c4e6ccf0f (diff)
parent762d5bb38fc39327a318f301291687c6e312f008 (diff)
downloadnova-a9ffc4760bf5f5bc782b53d47f9c53948a868df2.tar.gz
nova-a9ffc4760bf5f5bc782b53d47f9c53948a868df2.tar.xz
nova-a9ffc4760bf5f5bc782b53d47f9c53948a868df2.zip
Merge "Add ssh port and key based auth to VPD."
-rw-r--r--nova/tests/baremetal/test_virtual_power_driver.py21
-rw-r--r--nova/virt/baremetal/virtual_power_driver.py19
-rw-r--r--nova/virt/powervm/common.py6
3 files changed, 39 insertions, 7 deletions
diff --git a/nova/tests/baremetal/test_virtual_power_driver.py b/nova/tests/baremetal/test_virtual_power_driver.py
index 5a38ed87b..4b140f66a 100644
--- a/nova/tests/baremetal/test_virtual_power_driver.py
+++ b/nova/tests/baremetal/test_virtual_power_driver.py
@@ -49,6 +49,7 @@ BAREMETAL_FLAGS = dict(
virtual_power_type='vbox',
virtual_power_host_user=None,
virtual_power_host_pass=None,
+ virtual_power_host_key=None,
group='baremetal',
)
@@ -128,7 +129,7 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase):
self.flags(virtual_power_host_user='user', group="baremetal")
self.flags(virtual_power_host_pass='password', group="baremetal")
- def test_get_conn_success(self):
+ def test_get_conn_success_pass(self):
self._create_node()
self._create_pm()
self._conn = self.pm._get_conn()
@@ -139,6 +140,24 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase):
self.assertEqual(self.pm.connection_data.host, '127.0.0.1')
self.assertEqual(self.pm.connection_data.username, 'user')
self.assertEqual(self.pm.connection_data.password, 'password')
+ self.assertEqual(self.pm.connection_data.keyfile, None)
+ self.mox.VerifyAll()
+
+ def test_get_conn_success_key(self):
+ self.flags(virtual_power_host_pass='', group="baremetal")
+ self.flags(virtual_power_host_key='/id_rsa_file.txt',
+ group="baremetal")
+ self._create_node()
+ self._create_pm()
+ self._conn = self.pm._get_conn()
+ self.mox.StubOutWithMock(connection, 'ssh_connect')
+ connection.ssh_connect(mox.IsA(self._conn)).AndReturn(True)
+ self.mox.ReplayAll()
+ self.pm._set_connection()
+ self.assertEqual(self.pm.connection_data.host, '127.0.0.1')
+ self.assertEqual(self.pm.connection_data.username, 'user')
+ self.assertEqual(self.pm.connection_data.password, '')
+ self.assertEqual(self.pm.connection_data.keyfile, '/id_rsa_file.txt')
self.mox.VerifyAll()
def test_get_full_node_list(self):
diff --git a/nova/virt/baremetal/virtual_power_driver.py b/nova/virt/baremetal/virtual_power_driver.py
index a18a2f9d3..d3f612ddd 100644
--- a/nova/virt/baremetal/virtual_power_driver.py
+++ b/nova/virt/baremetal/virtual_power_driver.py
@@ -31,8 +31,11 @@ opts = [
cfg.StrOpt('virtual_power_ssh_host',
default='',
help='ip or name to virtual power host'),
+ cfg.StrOpt('virtual_power_ssh_port',
+ default='22',
+ help='Port to use for ssh to virtual power host'),
cfg.StrOpt('virtual_power_type',
- default='vbox',
+ default='virsh',
help='base command to use for virtual power(vbox,virsh)'),
cfg.StrOpt('virtual_power_host_user',
default='',
@@ -40,6 +43,10 @@ opts = [
cfg.StrOpt('virtual_power_host_pass',
default='',
help='password for virtual power host_user'),
+ cfg.StrOpt('virtual_power_host_key',
+ default=None,
+ help='ssh key for virtual power host_user'),
+
]
baremetal_vp = cfg.OptGroup(name='baremetal',
@@ -101,13 +108,17 @@ class VirtualPowerManager(base.PowerManager):
_('virtual_power_host_user not defined. Can not Start'))
if not CONF.baremetal.virtual_power_host_pass:
- raise exception.NovaException(
- _('virtual_power_host_pass not defined. Can not Start'))
+ # it is ok to not have a password if you have a keyfile
+ if CONF.baremetal.virtual_power_host_key is None:
+ raise exception.NovaException(
+ _('virtual_power_host_pass/key not set. Can not Start'))
_conn = connection.Connection(
CONF.baremetal.virtual_power_ssh_host,
CONF.baremetal.virtual_power_host_user,
- CONF.baremetal.virtual_power_host_pass)
+ CONF.baremetal.virtual_power_host_pass,
+ CONF.baremetal.virtual_power_ssh_port,
+ CONF.baremetal.virtual_power_host_key)
return _conn
def _set_connection(self):
diff --git a/nova/virt/powervm/common.py b/nova/virt/powervm/common.py
index c1d5d7f07..b36fa57f3 100644
--- a/nova/virt/powervm/common.py
+++ b/nova/virt/powervm/common.py
@@ -31,11 +31,12 @@ LOG = logging.getLogger(__name__)
class Connection(object):
- def __init__(self, host, username, password, port=22):
+ def __init__(self, host, username, password, port=22, keyfile=None):
self.host = host
self.username = username
self.password = password
self.port = port
+ self.keyfile = keyfile
def ssh_connect(connection):
@@ -51,7 +52,8 @@ def ssh_connect(connection):
ssh.connect(connection.host,
username=connection.username,
password=connection.password,
- port=connection.port)
+ port=connection.port,
+ key_filename=connection.keyfile)
return ssh
except Exception:
LOG.exception(_('Connection error connecting PowerVM manager'))