Merge "xenapi: Move settings to their own config section"
This commit is contained in:
commit
d9692ec5ce
|
@ -2209,229 +2209,6 @@
|
|||
#powervm_img_local_path=/tmp
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.agent
|
||||
#
|
||||
|
||||
# number of seconds to wait for agent reply (integer value)
|
||||
#agent_timeout=30
|
||||
|
||||
# number of seconds to wait for agent to be fully operational
|
||||
# (integer value)
|
||||
#agent_version_timeout=300
|
||||
|
||||
# number of seconds to wait for agent reply to resetnetwork
|
||||
# request (integer value)
|
||||
#agent_resetnetwork_timeout=60
|
||||
|
||||
# Specifies the path in which the xenapi guest agent should be
|
||||
# located. If the agent is present, network configuration is
|
||||
# not injected into the image. Used if
|
||||
# compute_driver=xenapi.XenAPIDriver and flat_injected=True
|
||||
# (string value)
|
||||
#xenapi_agent_path=usr/sbin/xe-update-networking
|
||||
|
||||
# Disables the use of the XenAPI agent in any image regardless
|
||||
# of what image properties are present. (boolean value)
|
||||
#xenapi_disable_agent=false
|
||||
|
||||
# Determines if the xenapi agent should be used when the image
|
||||
# used does not contain a hint to declare if the agent is
|
||||
# present or not. The hint is a glance property
|
||||
# "xenapi_use_agent" that has the value "true" or "false".
|
||||
# Note that waiting for the agent when it is not present will
|
||||
# significantly increase server boot times. (boolean value)
|
||||
#xenapi_use_agent_default=false
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.driver
|
||||
#
|
||||
|
||||
# URL for connection to XenServer/Xen Cloud Platform. A
|
||||
# special value of unix://local can be used to connect to the
|
||||
# local unix socket. Required if
|
||||
# compute_driver=xenapi.XenAPIDriver (string value)
|
||||
#xenapi_connection_url=<None>
|
||||
|
||||
# Username for connection to XenServer/Xen Cloud Platform.
|
||||
# Used only if compute_driver=xenapi.XenAPIDriver (string
|
||||
# value)
|
||||
#xenapi_connection_username=root
|
||||
|
||||
# Password for connection to XenServer/Xen Cloud Platform.
|
||||
# Used only if compute_driver=xenapi.XenAPIDriver (string
|
||||
# value)
|
||||
#xenapi_connection_password=<None>
|
||||
|
||||
# Maximum number of concurrent XenAPI connections. Used only
|
||||
# if compute_driver=xenapi.XenAPIDriver (integer value)
|
||||
#xenapi_connection_concurrent=5
|
||||
|
||||
# The interval used for polling of coalescing vhds. Used only
|
||||
# if compute_driver=xenapi.XenAPIDriver (floating point value)
|
||||
#xenapi_vhd_coalesce_poll_interval=5.0
|
||||
|
||||
# Ensure compute service is running on host XenAPI connects
|
||||
# to. (boolean value)
|
||||
#xenapi_check_host=true
|
||||
|
||||
# Max number of times to poll for VHD to coalesce. Used only
|
||||
# if compute_driver=xenapi.XenAPIDriver (integer value)
|
||||
#xenapi_vhd_coalesce_max_attempts=5
|
||||
|
||||
# Base path to the storage repository (string value)
|
||||
#xenapi_sr_base_path=/var/run/sr-mount
|
||||
|
||||
# iSCSI Target Host (string value)
|
||||
#target_host=<None>
|
||||
|
||||
# iSCSI Target Port, 3260 Default (string value)
|
||||
#target_port=3260
|
||||
|
||||
# IQN Prefix (string value)
|
||||
#iqn_prefix=iqn.2010-10.org.openstack
|
||||
|
||||
# Used to enable the remapping of VBD dev (Works around an
|
||||
# issue in Ubuntu Maverick) (boolean value)
|
||||
#xenapi_remap_vbd_dev=false
|
||||
|
||||
# Specify prefix to remap VBD dev to (ex. /dev/xvdb ->
|
||||
# /dev/sdb) (string value)
|
||||
#xenapi_remap_vbd_dev_prefix=sd
|
||||
|
||||
# Timeout in seconds for XenAPI login. (integer value)
|
||||
#xenapi_login_timeout=10
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.image.bittorrent
|
||||
#
|
||||
|
||||
# Base URL for torrent files. (string value)
|
||||
#xenapi_torrent_base_url=<None>
|
||||
|
||||
# Probability that peer will become a seeder. (1.0 = 100%)
|
||||
# (floating point value)
|
||||
#xenapi_torrent_seed_chance=1.0
|
||||
|
||||
# Number of seconds after downloading an image via BitTorrent
|
||||
# that it should be seeded for other peers. (integer value)
|
||||
#xenapi_torrent_seed_duration=3600
|
||||
|
||||
# Cached torrent files not accessed within this number of
|
||||
# seconds can be reaped (integer value)
|
||||
#xenapi_torrent_max_last_accessed=86400
|
||||
|
||||
# Beginning of port range to listen on (integer value)
|
||||
#xenapi_torrent_listen_port_start=6881
|
||||
|
||||
# End of port range to listen on (integer value)
|
||||
#xenapi_torrent_listen_port_end=6891
|
||||
|
||||
# Number of seconds a download can remain at the same progress
|
||||
# percentage w/o being considered a stall (integer value)
|
||||
#xenapi_torrent_download_stall_cutoff=600
|
||||
|
||||
# Maximum number of seeder processes to run concurrently
|
||||
# within a given dom0. (-1 = no limit) (integer value)
|
||||
#xenapi_torrent_max_seeder_processes_per_host=1
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.pool
|
||||
#
|
||||
|
||||
# To use for hosts with different CPUs (boolean value)
|
||||
#use_join_force=true
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.vif
|
||||
#
|
||||
|
||||
# Name of Integration Bridge used by Open vSwitch (string
|
||||
# value)
|
||||
#xenapi_ovs_integration_bridge=xapi1
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.vm_utils
|
||||
#
|
||||
|
||||
# Cache glance images locally. `all` will cache all images,
|
||||
# `some` will only cache images that have the image_property
|
||||
# `cache_in_nova=True`, and `none` turns off caching entirely
|
||||
# (string value)
|
||||
#cache_images=all
|
||||
|
||||
# Compression level for images, e.g., 9 for gzip -9. Range is
|
||||
# 1-9, 9 being most compressed but most CPU intensive on dom0.
|
||||
# (integer value)
|
||||
#xenapi_image_compression_level=<None>
|
||||
|
||||
# Default OS type (string value)
|
||||
#default_os_type=linux
|
||||
|
||||
# Time to wait for a block device to be created (integer
|
||||
# value)
|
||||
#block_device_creation_timeout=10
|
||||
|
||||
# Maximum size in bytes of kernel or ramdisk images (integer
|
||||
# value)
|
||||
#max_kernel_ramdisk_size=16777216
|
||||
|
||||
# Filter for finding the SR to be used to install guest
|
||||
# instances on. To use the Local Storage in default
|
||||
# XenServer/XCP installations set this flag to other-config
|
||||
# :i18n-key=local-storage. To select an SR with a different
|
||||
# matching criteria, you could set it to other-
|
||||
# config:my_favorite_sr=true. On the other hand, to fall back
|
||||
# on the Default SR, as displayed by XenCenter, set this flag
|
||||
# to: default-sr:true (string value)
|
||||
#sr_matching_filter=default-sr:true
|
||||
|
||||
# Whether to use sparse_copy for copying data on a resize down
|
||||
# (False will use standard dd). This speeds up resizes down
|
||||
# considerably since large runs of zeros won't have to be
|
||||
# rsynced (boolean value)
|
||||
#xenapi_sparse_copy=true
|
||||
|
||||
# Maximum number of retries to unplug VBD (integer value)
|
||||
#xenapi_num_vbd_unplug_retries=10
|
||||
|
||||
# Whether or not to download images via Bit Torrent
|
||||
# (all|some|none). (string value)
|
||||
#xenapi_torrent_images=none
|
||||
|
||||
# Name of network to use for booting iPXE ISOs (string value)
|
||||
#xenapi_ipxe_network_name=<None>
|
||||
|
||||
# URL to the iPXE boot menu (string value)
|
||||
#xenapi_ipxe_boot_menu_url=<None>
|
||||
|
||||
# Name and optionally path of the tool used for ISO image
|
||||
# creation (string value)
|
||||
#xenapi_ipxe_mkisofs_cmd=mkisofs
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.vmops
|
||||
#
|
||||
|
||||
# number of seconds to wait for instance to go to running
|
||||
# state (integer value)
|
||||
#xenapi_running_timeout=60
|
||||
|
||||
# The XenAPI VIF driver using XenServer Network APIs. (string
|
||||
# value)
|
||||
#xenapi_vif_driver=nova.virt.xenapi.vif.XenAPIBridgeDriver
|
||||
|
||||
# Dom0 plugin driver used to handle image uploads. (string
|
||||
# value)
|
||||
#xenapi_image_upload_handler=nova.virt.xenapi.image.glance.GlanceStore
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.vnc
|
||||
#
|
||||
|
@ -3091,6 +2868,231 @@
|
|||
#password=<None>
|
||||
|
||||
|
||||
[xenserver]
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.agent
|
||||
#
|
||||
|
||||
# number of seconds to wait for agent reply (integer value)
|
||||
#agent_timeout=30
|
||||
|
||||
# number of seconds to wait for agent to be fully operational
|
||||
# (integer value)
|
||||
#agent_version_timeout=300
|
||||
|
||||
# number of seconds to wait for agent reply to resetnetwork
|
||||
# request (integer value)
|
||||
#agent_resetnetwork_timeout=60
|
||||
|
||||
# Specifies the path in which the xenapi guest agent should be
|
||||
# located. If the agent is present, network configuration is
|
||||
# not injected into the image. Used if
|
||||
# compute_driver=xenapi.XenAPIDriver and flat_injected=True
|
||||
# (string value)
|
||||
#agent_path=usr/sbin/xe-update-networking
|
||||
|
||||
# Disables the use of the XenAPI agent in any image regardless
|
||||
# of what image properties are present. (boolean value)
|
||||
#disable_agent=false
|
||||
|
||||
# Determines if the xenapi agent should be used when the image
|
||||
# used does not contain a hint to declare if the agent is
|
||||
# present or not. The hint is a glance property
|
||||
# "xenapi_use_agent" that has the value "true" or "false".
|
||||
# Note that waiting for the agent when it is not present will
|
||||
# significantly increase server boot times. (boolean value)
|
||||
#use_agent_default=false
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.driver
|
||||
#
|
||||
|
||||
# URL for connection to XenServer/Xen Cloud Platform. A
|
||||
# special value of unix://local can be used to connect to the
|
||||
# local unix socket. Required if
|
||||
# compute_driver=xenapi.XenAPIDriver (string value)
|
||||
#connection_url=<None>
|
||||
|
||||
# Username for connection to XenServer/Xen Cloud Platform.
|
||||
# Used only if compute_driver=xenapi.XenAPIDriver (string
|
||||
# value)
|
||||
#connection_username=root
|
||||
|
||||
# Password for connection to XenServer/Xen Cloud Platform.
|
||||
# Used only if compute_driver=xenapi.XenAPIDriver (string
|
||||
# value)
|
||||
#connection_password=<None>
|
||||
|
||||
# Maximum number of concurrent XenAPI connections. Used only
|
||||
# if compute_driver=xenapi.XenAPIDriver (integer value)
|
||||
#connection_concurrent=5
|
||||
|
||||
# The interval used for polling of coalescing vhds. Used only
|
||||
# if compute_driver=xenapi.XenAPIDriver (floating point value)
|
||||
#vhd_coalesce_poll_interval=5.0
|
||||
|
||||
# Ensure compute service is running on host XenAPI connects
|
||||
# to. (boolean value)
|
||||
#check_host=true
|
||||
|
||||
# Max number of times to poll for VHD to coalesce. Used only
|
||||
# if compute_driver=xenapi.XenAPIDriver (integer value)
|
||||
#vhd_coalesce_max_attempts=5
|
||||
|
||||
# Base path to the storage repository (string value)
|
||||
#sr_base_path=/var/run/sr-mount
|
||||
|
||||
# iSCSI Target Host (string value)
|
||||
#target_host=<None>
|
||||
|
||||
# iSCSI Target Port, 3260 Default (string value)
|
||||
#target_port=3260
|
||||
|
||||
# IQN Prefix (string value)
|
||||
#iqn_prefix=iqn.2010-10.org.openstack
|
||||
|
||||
# Used to enable the remapping of VBD dev (Works around an
|
||||
# issue in Ubuntu Maverick) (boolean value)
|
||||
#remap_vbd_dev=false
|
||||
|
||||
# Specify prefix to remap VBD dev to (ex. /dev/xvdb ->
|
||||
# /dev/sdb) (string value)
|
||||
#remap_vbd_dev_prefix=sd
|
||||
|
||||
# Timeout in seconds for XenAPI login. (integer value)
|
||||
#login_timeout=10
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.image.bittorrent
|
||||
#
|
||||
|
||||
# Base URL for torrent files. (string value)
|
||||
#torrent_base_url=<None>
|
||||
|
||||
# Probability that peer will become a seeder. (1.0 = 100%)
|
||||
# (floating point value)
|
||||
#torrent_seed_chance=1.0
|
||||
|
||||
# Number of seconds after downloading an image via BitTorrent
|
||||
# that it should be seeded for other peers. (integer value)
|
||||
#torrent_seed_duration=3600
|
||||
|
||||
# Cached torrent files not accessed within this number of
|
||||
# seconds can be reaped (integer value)
|
||||
#torrent_max_last_accessed=86400
|
||||
|
||||
# Beginning of port range to listen on (integer value)
|
||||
#torrent_listen_port_start=6881
|
||||
|
||||
# End of port range to listen on (integer value)
|
||||
#torrent_listen_port_end=6891
|
||||
|
||||
# Number of seconds a download can remain at the same progress
|
||||
# percentage w/o being considered a stall (integer value)
|
||||
#torrent_download_stall_cutoff=600
|
||||
|
||||
# Maximum number of seeder processes to run concurrently
|
||||
# within a given dom0. (-1 = no limit) (integer value)
|
||||
#torrent_max_seeder_processes_per_host=1
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.pool
|
||||
#
|
||||
|
||||
# To use for hosts with different CPUs (boolean value)
|
||||
#use_join_force=true
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.vif
|
||||
#
|
||||
|
||||
# Name of Integration Bridge used by Open vSwitch (string
|
||||
# value)
|
||||
#ovs_integration_bridge=xapi1
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.vm_utils
|
||||
#
|
||||
|
||||
# Cache glance images locally. `all` will cache all images,
|
||||
# `some` will only cache images that have the image_property
|
||||
# `cache_in_nova=True`, and `none` turns off caching entirely
|
||||
# (string value)
|
||||
#cache_images=all
|
||||
|
||||
# Compression level for images, e.g., 9 for gzip -9. Range is
|
||||
# 1-9, 9 being most compressed but most CPU intensive on dom0.
|
||||
# (integer value)
|
||||
#image_compression_level=<None>
|
||||
|
||||
# Default OS type (string value)
|
||||
#default_os_type=linux
|
||||
|
||||
# Time to wait for a block device to be created (integer
|
||||
# value)
|
||||
#block_device_creation_timeout=10
|
||||
|
||||
# Maximum size in bytes of kernel or ramdisk images (integer
|
||||
# value)
|
||||
#max_kernel_ramdisk_size=16777216
|
||||
|
||||
# Filter for finding the SR to be used to install guest
|
||||
# instances on. To use the Local Storage in default
|
||||
# XenServer/XCP installations set this flag to other-config
|
||||
# :i18n-key=local-storage. To select an SR with a different
|
||||
# matching criteria, you could set it to other-
|
||||
# config:my_favorite_sr=true. On the other hand, to fall back
|
||||
# on the Default SR, as displayed by XenCenter, set this flag
|
||||
# to: default-sr:true (string value)
|
||||
#sr_matching_filter=default-sr:true
|
||||
|
||||
# Whether to use sparse_copy for copying data on a resize down
|
||||
# (False will use standard dd). This speeds up resizes down
|
||||
# considerably since large runs of zeros won't have to be
|
||||
# rsynced (boolean value)
|
||||
#sparse_copy=true
|
||||
|
||||
# Maximum number of retries to unplug VBD (integer value)
|
||||
#num_vbd_unplug_retries=10
|
||||
|
||||
# Whether or not to download images via Bit Torrent
|
||||
# (all|some|none). (string value)
|
||||
#torrent_images=none
|
||||
|
||||
# Name of network to use for booting iPXE ISOs (string value)
|
||||
#ipxe_network_name=<None>
|
||||
|
||||
# URL to the iPXE boot menu (string value)
|
||||
#ipxe_boot_menu_url=<None>
|
||||
|
||||
# Name and optionally path of the tool used for ISO image
|
||||
# creation (string value)
|
||||
#ipxe_mkisofs_cmd=mkisofs
|
||||
|
||||
|
||||
#
|
||||
# Options defined in nova.virt.xenapi.vmops
|
||||
#
|
||||
|
||||
# number of seconds to wait for instance to go to running
|
||||
# state (integer value)
|
||||
#running_timeout=60
|
||||
|
||||
# The XenAPI VIF driver using XenServer Network APIs. (string
|
||||
# value)
|
||||
#vif_driver=nova.virt.xenapi.vif.XenAPIBridgeDriver
|
||||
|
||||
# Dom0 plugin driver used to handle image uploads. (string
|
||||
# value)
|
||||
#image_upload_handler=nova.virt.xenapi.image.glance.GlanceStore
|
||||
|
||||
|
||||
[ssl]
|
||||
|
||||
#
|
||||
|
|
|
@ -30,9 +30,10 @@ CONF.import_opt('compute_driver', 'nova.virt.driver')
|
|||
class ComputeXenTestCase(stubs.XenAPITestBaseNoDB):
|
||||
def setUp(self):
|
||||
super(ComputeXenTestCase, self).setUp()
|
||||
self.flags(compute_driver='xenapi.XenAPIDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
self.flags(compute_driver='xenapi.XenAPIDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
self.compute = importutils.import_object(CONF.compute_manager)
|
||||
|
|
|
@ -35,9 +35,10 @@ class TestBittorrentStore(stubs.XenAPITestBaseNoDB):
|
|||
self.store = bittorrent.BittorrentStore()
|
||||
self.mox = mox.Mox()
|
||||
|
||||
self.flags(xenapi_torrent_base_url='http://foo',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
self.flags(torrent_base_url='http://foo',
|
||||
connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
|
||||
self.context = context.RequestContext(
|
||||
'user', 'project', auth_token='foobar')
|
||||
|
@ -121,18 +122,20 @@ class LookupTorrentURLTestCase(test.NoDBTestCase):
|
|||
return []
|
||||
|
||||
def test_default_fetch_url_no_base_url_set(self):
|
||||
self.flags(xenapi_torrent_base_url=None)
|
||||
self.flags(torrent_base_url=None,
|
||||
group='xenserver')
|
||||
self.stubs.Set(pkg_resources, 'iter_entry_points',
|
||||
self._mock_iter_none)
|
||||
|
||||
exc = self.assertRaises(
|
||||
RuntimeError, self.store._lookup_torrent_url_fn)
|
||||
self.assertEqual(_('Cannot create default bittorrent URL without'
|
||||
' xenapi_torrent_base_url set'),
|
||||
' torrent_base_url set'),
|
||||
str(exc))
|
||||
|
||||
def test_default_fetch_url_base_url_is_set(self):
|
||||
self.flags(xenapi_torrent_base_url='http://foo')
|
||||
self.flags(torrent_base_url='http://foo',
|
||||
group='xenserver')
|
||||
self.stubs.Set(pkg_resources, 'iter_entry_points',
|
||||
self._mock_iter_none)
|
||||
|
||||
|
|
|
@ -33,9 +33,10 @@ class TestGlanceStore(stubs.XenAPITestBaseNoDB):
|
|||
|
||||
self.flags(glance_host='1.1.1.1',
|
||||
glance_port=123,
|
||||
glance_api_insecure=False,
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
glance_api_insecure=False)
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
|
||||
self.context = context.RequestContext(
|
||||
'user', 'project', auth_token='foobar')
|
||||
|
|
|
@ -53,31 +53,31 @@ class AgentTestCaseBase(test.NoDBTestCase):
|
|||
|
||||
class AgentImageFlagsTestCase(AgentTestCaseBase):
|
||||
def test_agent_is_present(self):
|
||||
self.flags(xenapi_use_agent_default=False)
|
||||
self.flags(use_agent_default=False, group='xenserver')
|
||||
instance = {"system_metadata":
|
||||
[{"key": "image_xenapi_use_agent", "value": "true"}]}
|
||||
self.assertTrue(agent.should_use_agent(instance))
|
||||
|
||||
def test_agent_is_disabled(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True, group='xenserver')
|
||||
instance = {"system_metadata":
|
||||
[{"key": "image_xenapi_use_agent", "value": "false"}]}
|
||||
self.assertFalse(agent.should_use_agent(instance))
|
||||
|
||||
def test_agent_uses_deafault_when_prop_invalid(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True, group='xenserver')
|
||||
instance = {"system_metadata":
|
||||
[{"key": "image_xenapi_use_agent", "value": "bob"}],
|
||||
"uuid": "uuid"}
|
||||
self.assertTrue(agent.should_use_agent(instance))
|
||||
|
||||
def test_agent_default_not_present(self):
|
||||
self.flags(xenapi_use_agent_default=False)
|
||||
self.flags(use_agent_default=False, group='xenserver')
|
||||
instance = {"system_metadata": []}
|
||||
self.assertFalse(agent.should_use_agent(instance))
|
||||
|
||||
def test_agent_default_present(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True, group='xenserver')
|
||||
instance = {"system_metadata": []}
|
||||
self.assertTrue(agent.should_use_agent(instance))
|
||||
|
||||
|
|
|
@ -36,8 +36,8 @@ class XenAPIDriverTestCase(stubs.XenAPITestBaseNoDB):
|
|||
'host_cpu_info': {'cpu_count': 50}}
|
||||
|
||||
def test_available_resource(self):
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass', group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
|
||||
driver = xenapi.XenAPIDriver(fake.FakeVirtAPI(), False)
|
||||
|
@ -58,8 +58,8 @@ class XenAPIDriverTestCase(stubs.XenAPITestBaseNoDB):
|
|||
self.assertEqual(50, resources['cpu_info'])
|
||||
|
||||
def test_overhead(self):
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass', group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
driver = xenapi.XenAPIDriver(fake.FakeVirtAPI(), False)
|
||||
instance = {'memory_mb': 30720}
|
||||
|
|
|
@ -325,9 +325,10 @@ class FetchVhdImageTestCase(VMUtilsTestBase):
|
|||
self.mox.VerifyAll()
|
||||
|
||||
def test_fetch_vhd_image_works_with_bittorrent(self):
|
||||
cfg.CONF.import_opt('xenapi_torrent_base_url',
|
||||
'nova.virt.xenapi.image.bittorrent')
|
||||
self.flags(xenapi_torrent_base_url='http://foo')
|
||||
cfg.CONF.import_opt('torrent_base_url',
|
||||
'nova.virt.xenapi.image.bittorrent',
|
||||
group='xenserver')
|
||||
self.flags(torrent_base_url='http://foo', group='xenserver')
|
||||
|
||||
self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent')
|
||||
vm_utils._image_uses_bittorrent(
|
||||
|
@ -384,9 +385,10 @@ class FetchVhdImageTestCase(VMUtilsTestBase):
|
|||
self.mox.VerifyAll()
|
||||
|
||||
def test_fallback_to_default_handler(self):
|
||||
cfg.CONF.import_opt('xenapi_torrent_base_url',
|
||||
'nova.virt.xenapi.image.bittorrent')
|
||||
self.flags(xenapi_torrent_base_url='http://foo')
|
||||
cfg.CONF.import_opt('torrent_base_url',
|
||||
'nova.virt.xenapi.image.bittorrent',
|
||||
group='xenserver')
|
||||
self.flags(torrent_base_url='http://foo', group='xenserver')
|
||||
|
||||
self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent')
|
||||
vm_utils._image_uses_bittorrent(
|
||||
|
@ -417,9 +419,10 @@ class FetchVhdImageTestCase(VMUtilsTestBase):
|
|||
self.mox.VerifyAll()
|
||||
|
||||
def test_default_handler_doesnt_fallback_to_itself(self):
|
||||
cfg.CONF.import_opt('xenapi_torrent_base_url',
|
||||
'nova.virt.xenapi.image.bittorrent')
|
||||
self.flags(xenapi_torrent_base_url='http://foo')
|
||||
cfg.CONF.import_opt('torrent_base_url',
|
||||
'nova.virt.xenapi.image.bittorrent',
|
||||
group='xenserver')
|
||||
self.flags(torrent_base_url='http://foo', group='xenserver')
|
||||
|
||||
self.mox.StubOutWithMock(vm_utils, '_image_uses_bittorrent')
|
||||
vm_utils._image_uses_bittorrent(
|
||||
|
@ -439,11 +442,11 @@ class TestImageCompression(VMUtilsTestBase):
|
|||
def test_image_compression(self):
|
||||
# Testing for nova.conf, too low, negative, and a correct value.
|
||||
self.assertIsNone(vm_utils.get_compression_level())
|
||||
self.flags(xenapi_image_compression_level=0)
|
||||
self.flags(image_compression_level=0, group='xenserver')
|
||||
self.assertIsNone(vm_utils.get_compression_level())
|
||||
self.flags(xenapi_image_compression_level=-6)
|
||||
self.flags(image_compression_level=-6, group='xenserver')
|
||||
self.assertIsNone(vm_utils.get_compression_level())
|
||||
self.flags(xenapi_image_compression_level=6)
|
||||
self.flags(image_compression_level=6, group='xenserver')
|
||||
self.assertEqual(vm_utils.get_compression_level(), 6)
|
||||
|
||||
|
||||
|
@ -604,9 +607,10 @@ class GetInstanceForVdisForSrTestCase(VMUtilsTestBase):
|
|||
self.flags(disable_process_locking=True,
|
||||
instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',)
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
|
||||
def test_get_instance_vdis_for_sr(self):
|
||||
vm_ref = fake.create_vm("foo", "Running")
|
||||
|
@ -731,13 +735,13 @@ class BittorrentTestCase(VMUtilsTestBase):
|
|||
|
||||
def test_image_uses_bittorrent(self):
|
||||
instance = {'system_metadata': {'image_bittorrent': True}}
|
||||
self.flags(xenapi_torrent_images='some')
|
||||
self.flags(torrent_images='some', group='xenserver')
|
||||
self.assertTrue(vm_utils._image_uses_bittorrent(self.context,
|
||||
instance))
|
||||
|
||||
def _test_create_image(self, cache_type):
|
||||
instance = {'system_metadata': {'image_cache_in_nova': True}}
|
||||
self.flags(cache_images=cache_type)
|
||||
self.flags(cache_images=cache_type, group='xenserver')
|
||||
|
||||
was = {'called': None}
|
||||
|
||||
|
@ -960,7 +964,7 @@ class VDIOtherConfigTestCase(VMUtilsTestBase):
|
|||
def test_create_image(self):
|
||||
# Other images are registered implicitly when they are dropped into
|
||||
# the SR by a dom0 plugin or some other process
|
||||
self.flags(cache_images='none')
|
||||
self.flags(cache_images='none', group='xenserver')
|
||||
|
||||
def fake_fetch_image(*args):
|
||||
return {'root': {'uuid': 'fake-uuid'}}
|
||||
|
@ -1025,9 +1029,10 @@ class GenerateDiskTestCase(VMUtilsTestBase):
|
|||
self.flags(disable_process_locking=True,
|
||||
instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',)
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, fake.SessionBase)
|
||||
driver = xenapi_conn.XenAPIDriver(False)
|
||||
self.session = driver._session
|
||||
|
@ -1255,9 +1260,10 @@ class VMUtilsSRPath(VMUtilsTestBase):
|
|||
self.flags(disable_process_locking=True,
|
||||
instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',)
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, fake.SessionBase)
|
||||
driver = xenapi_conn.XenAPIDriver(False)
|
||||
self.session = driver._session
|
||||
|
@ -1427,9 +1433,10 @@ class AllowVSSProviderTest(VMUtilsTestBase):
|
|||
self.flags(disable_process_locking=True,
|
||||
instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',)
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, fake.SessionBase)
|
||||
driver = xenapi_conn.XenAPIDriver(False)
|
||||
self.session = driver._session
|
||||
|
|
|
@ -200,9 +200,10 @@ class XenAPIVolumeTestCase(stubs.XenAPITestBaseNoDB):
|
|||
super(XenAPIVolumeTestCase, self).setUp()
|
||||
self.flags(disable_process_locking=True,
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
|
||||
self.instance = fake_instance.fake_db_instance(name='foo')
|
||||
|
||||
|
@ -290,9 +291,10 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self.flags(disable_process_locking=True,
|
||||
instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',)
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
db_fakes.stub_out_db_instance_api(self.stubs)
|
||||
xenapi_fake.create_network('fake', 'fake_br1')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
|
@ -380,7 +382,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self.assertEqual(set(uuids), set(instance_uuids))
|
||||
|
||||
def test_get_rrd_server(self):
|
||||
self.flags(xenapi_connection_url='myscheme://myaddress/')
|
||||
self.flags(connection_url='myscheme://myaddress/',
|
||||
group='xenserver')
|
||||
server_info = vm_utils._get_rrd_server()
|
||||
self.assertEqual(server_info[0], 'myscheme')
|
||||
self.assertEqual(server_info[1], 'myaddress')
|
||||
|
@ -655,17 +658,17 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self.assertEqual(self.vm['HVM_boot_policy'], '')
|
||||
|
||||
def _list_vdis(self):
|
||||
url = CONF.xenapi_connection_url
|
||||
username = CONF.xenapi_connection_username
|
||||
password = CONF.xenapi_connection_password
|
||||
url = CONF.xenserver.connection_url
|
||||
username = CONF.xenserver.connection_username
|
||||
password = CONF.xenserver.connection_password
|
||||
session = xenapi_conn.XenAPISession(url, username, password,
|
||||
fake.FakeVirtAPI())
|
||||
return session.call_xenapi('VDI.get_all')
|
||||
|
||||
def _list_vms(self):
|
||||
url = CONF.xenapi_connection_url
|
||||
username = CONF.xenapi_connection_username
|
||||
password = CONF.xenapi_connection_password
|
||||
url = CONF.xenserver.connection_url
|
||||
username = CONF.xenserver.connection_username
|
||||
password = CONF.xenserver.connection_password
|
||||
session = xenapi_conn.XenAPISession(url, username, password,
|
||||
fake.FakeVirtAPI())
|
||||
return session.call_xenapi('VM.get_all')
|
||||
|
@ -736,9 +739,10 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self.mox.StubOutWithMock(vm_utils, 'get_sr_path')
|
||||
vm_utils.get_sr_path(mox.IgnoreArg()).AndReturn('/sr/path')
|
||||
|
||||
self.flags(xenapi_ipxe_network_name='test1',
|
||||
xenapi_ipxe_boot_menu_url='http://boot.example.com',
|
||||
xenapi_ipxe_mkisofs_cmd='/root/mkisofs')
|
||||
self.flags(ipxe_network_name='test1',
|
||||
ipxe_boot_menu_url='http://boot.example.com',
|
||||
ipxe_mkisofs_cmd='/root/mkisofs',
|
||||
group='xenserver')
|
||||
self.mox.StubOutWithMock(self.conn._session, 'call_plugin_serialized')
|
||||
self.conn._session.call_plugin_serialized(
|
||||
'ipxe', 'inject', '/sr/path', mox.IgnoreArg(),
|
||||
|
@ -749,8 +753,9 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self._test_spawn(IMAGE_IPXE_ISO, None, None)
|
||||
|
||||
def test_spawn_ipxe_iso_no_network_name(self):
|
||||
self.flags(xenapi_ipxe_network_name=None,
|
||||
xenapi_ipxe_boot_menu_url='http://boot.example.com')
|
||||
self.flags(ipxe_network_name=None,
|
||||
ipxe_boot_menu_url='http://boot.example.com',
|
||||
group='xenserver')
|
||||
|
||||
# call_plugin_serialized shouldn't be called
|
||||
self.mox.StubOutWithMock(self.conn._session, 'call_plugin_serialized')
|
||||
|
@ -759,8 +764,9 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self._test_spawn(IMAGE_IPXE_ISO, None, None)
|
||||
|
||||
def test_spawn_ipxe_iso_no_boot_menu_url(self):
|
||||
self.flags(xenapi_ipxe_network_name='test1',
|
||||
xenapi_ipxe_boot_menu_url=None)
|
||||
self.flags(ipxe_network_name='test1',
|
||||
ipxe_boot_menu_url=None,
|
||||
group='xenserver')
|
||||
|
||||
# call_plugin_serialized shouldn't be called
|
||||
self.mox.StubOutWithMock(self.conn._session, 'call_plugin_serialized')
|
||||
|
@ -769,8 +775,9 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self._test_spawn(IMAGE_IPXE_ISO, None, None)
|
||||
|
||||
def test_spawn_ipxe_iso_unknown_network_name(self):
|
||||
self.flags(xenapi_ipxe_network_name='test2',
|
||||
xenapi_ipxe_boot_menu_url='http://boot.example.com')
|
||||
self.flags(ipxe_network_name='test2',
|
||||
ipxe_boot_menu_url='http://boot.example.com',
|
||||
group='xenserver')
|
||||
|
||||
# call_plugin_serialized shouldn't be called
|
||||
self.mox.StubOutWithMock(self.conn._session, 'call_plugin_serialized')
|
||||
|
@ -1024,7 +1031,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
def test_spawn_ssh_key_injection(self):
|
||||
# Test spawning with key_data on an instance. Should use
|
||||
# agent file injection.
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_inject_file(self, method, args):
|
||||
|
@ -1054,7 +1062,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
def test_spawn_ssh_key_injection_non_rsa(self):
|
||||
# Test spawning with key_data on an instance. Should use
|
||||
# agent file injection.
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_inject_file(self, method, args):
|
||||
|
@ -1082,7 +1091,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
|
||||
def test_spawn_injected_files(self):
|
||||
# Test spawning with injected_files.
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_inject_file(self, method, args):
|
||||
|
@ -1101,7 +1111,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self.assertEqual(actual_injected_files, injected_files)
|
||||
|
||||
def test_spawn_agent_upgrade(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_agent_build(_self, *args):
|
||||
|
@ -1116,7 +1127,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
os_type="linux", architecture="x86-64")
|
||||
|
||||
def test_spawn_agent_upgrade_fails_silently(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_agent_build(_self, *args):
|
||||
|
@ -1137,7 +1149,8 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
os_type="linux", architecture="x86-64")
|
||||
|
||||
def test_spawn_with_resetnetwork_alternative_returncode(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(use_agent_default=True,
|
||||
group='xenserver')
|
||||
|
||||
def fake_resetnetwork(self, method, args):
|
||||
fake_resetnetwork.called = True
|
||||
|
@ -1153,8 +1166,9 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
self.assertTrue(fake_resetnetwork.called)
|
||||
|
||||
def _test_spawn_fails_silently_with(self, trigger, expected_exception):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(agent_version_timeout=0)
|
||||
self.flags(use_agent_default=True,
|
||||
agent_version_timeout=0,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_agent_version(self, method, args):
|
||||
|
@ -1185,8 +1199,9 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
exception.AgentError)
|
||||
|
||||
def test_spawn_fails_with_agent_bad_return(self):
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(agent_version_timeout=0)
|
||||
self.flags(use_agent_default=True,
|
||||
agent_version_timeout=0,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_agent_version(self, method, args):
|
||||
|
@ -1200,8 +1215,9 @@ class XenAPIVMTestCase(stubs.XenAPITestBase):
|
|||
|
||||
def test_spawn_fails_agent_not_implemented(self):
|
||||
# Test spawning with injected_files.
|
||||
self.flags(xenapi_use_agent_default=True)
|
||||
self.flags(agent_version_timeout=0)
|
||||
self.flags(use_agent_default=True,
|
||||
agent_version_timeout=0,
|
||||
group='xenserver')
|
||||
actual_injected_files = []
|
||||
|
||||
def fake_agent_version(self, method, args):
|
||||
|
@ -1572,9 +1588,10 @@ class XenAPIMigrateInstance(stubs.XenAPITestBase):
|
|||
|
||||
def setUp(self):
|
||||
super(XenAPIMigrateInstance, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
db_fakes.stub_out_db_instance_api(self.stubs)
|
||||
|
@ -2028,8 +2045,9 @@ class XenAPIHostTestCase(stubs.XenAPITestBase):
|
|||
|
||||
def setUp(self):
|
||||
super(XenAPIHostTestCase, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
self.context = context.get_admin_context()
|
||||
self.flags(use_local=True, group='conductor')
|
||||
|
@ -2168,9 +2186,10 @@ class ToSupportedInstancesTestCase(test.NoDBTestCase):
|
|||
class XenAPIAutoDiskConfigTestCase(stubs.XenAPITestBase):
|
||||
def setUp(self):
|
||||
super(XenAPIAutoDiskConfigTestCase, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
self.conn = xenapi_conn.XenAPIDriver(fake.FakeVirtAPI(), False)
|
||||
|
@ -2264,9 +2283,10 @@ class XenAPIGenerateLocal(stubs.XenAPITestBase):
|
|||
"""Test generating of local disks, like swap and ephemeral."""
|
||||
def setUp(self):
|
||||
super(XenAPIGenerateLocal, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
db_fakes.stub_out_db_instance_api(self.stubs)
|
||||
|
@ -2378,9 +2398,10 @@ class XenAPIBWCountersTestCase(stubs.XenAPITestBaseNoDB):
|
|||
super(XenAPIBWCountersTestCase, self).setUp()
|
||||
self.stubs.Set(vm_utils, 'list_vms',
|
||||
XenAPIBWCountersTestCase._fake_list_vms)
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
self.conn = xenapi_conn.XenAPIDriver(fake.FakeVirtAPI(), False)
|
||||
|
@ -2510,9 +2531,10 @@ class XenAPIDom0IptablesFirewallTestCase(stubs.XenAPITestBase):
|
|||
|
||||
def setUp(self):
|
||||
super(XenAPIDom0IptablesFirewallTestCase, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
instance_name_template='%d',
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver')
|
||||
self.user_id = 'mappin'
|
||||
|
@ -2775,7 +2797,7 @@ class XenAPISRSelectionTestCase(stubs.XenAPITestBaseNoDB):
|
|||
"""Unit tests for testing we find the right SR."""
|
||||
def test_safe_find_sr_raise_exception(self):
|
||||
# Ensure StorageRepositoryNotFound is raise when wrong filter.
|
||||
self.flags(sr_matching_filter='yadayadayada')
|
||||
self.flags(sr_matching_filter='yadayadayada', group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass',
|
||||
fake.FakeVirtAPI())
|
||||
|
@ -2784,7 +2806,8 @@ class XenAPISRSelectionTestCase(stubs.XenAPITestBaseNoDB):
|
|||
|
||||
def test_safe_find_sr_local_storage(self):
|
||||
# Ensure the default local-storage is found.
|
||||
self.flags(sr_matching_filter='other-config:i18n-key=local-storage')
|
||||
self.flags(sr_matching_filter='other-config:i18n-key=local-storage',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass',
|
||||
fake.FakeVirtAPI())
|
||||
|
@ -2804,7 +2827,8 @@ class XenAPISRSelectionTestCase(stubs.XenAPITestBaseNoDB):
|
|||
|
||||
def test_safe_find_sr_by_other_criteria(self):
|
||||
# Ensure the SR is found when using a different filter.
|
||||
self.flags(sr_matching_filter='other-config:my_fake_sr=true')
|
||||
self.flags(sr_matching_filter='other-config:my_fake_sr=true',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass',
|
||||
fake.FakeVirtAPI())
|
||||
|
@ -2818,7 +2842,8 @@ class XenAPISRSelectionTestCase(stubs.XenAPITestBaseNoDB):
|
|||
|
||||
def test_safe_find_sr_default(self):
|
||||
# Ensure the default SR is found regardless of other-config.
|
||||
self.flags(sr_matching_filter='default-sr:true')
|
||||
self.flags(sr_matching_filter='default-sr:true',
|
||||
group='xenserver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass',
|
||||
fake.FakeVirtAPI())
|
||||
|
@ -2846,10 +2871,11 @@ class XenAPIAggregateTestCase(stubs.XenAPITestBase):
|
|||
"""Unit tests for aggregate operations."""
|
||||
def setUp(self):
|
||||
super(XenAPIAggregateTestCase, self).setUp()
|
||||
self.flags(xenapi_connection_url='http://test_url',
|
||||
xenapi_connection_username='test_user',
|
||||
xenapi_connection_password='test_pass',
|
||||
instance_name_template='%d',
|
||||
self.flags(connection_url='http://test_url',
|
||||
connection_username='test_user',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(instance_name_template='%d',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
host='host',
|
||||
|
@ -3219,9 +3245,10 @@ class XenAPILiveMigrateTestCase(stubs.XenAPITestBaseNoDB):
|
|||
"""Unit tests for live_migration."""
|
||||
def setUp(self):
|
||||
super(XenAPILiveMigrateTestCase, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver',
|
||||
host='host')
|
||||
db_fakes.stub_out_db_instance_api(self.stubs)
|
||||
|
@ -3679,9 +3706,10 @@ class XenAPILiveMigrateTestCase(stubs.XenAPITestBaseNoDB):
|
|||
class XenAPIInjectMetadataTestCase(stubs.XenAPITestBaseNoDB):
|
||||
def setUp(self):
|
||||
super(XenAPIInjectMetadataTestCase, self).setUp()
|
||||
self.flags(xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass',
|
||||
firewall_driver='nova.virt.xenapi.firewall.'
|
||||
self.flags(connection_url='test_url',
|
||||
connection_password='test_pass',
|
||||
group='xenserver')
|
||||
self.flags(firewall_driver='nova.virt.xenapi.firewall.'
|
||||
'Dom0IptablesFirewallDriver')
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
|
||||
self.conn = xenapi_conn.XenAPIDriver(fake.FakeVirtAPI(), False)
|
||||
|
|
|
@ -51,39 +51,51 @@ LOG = logging.getLogger(__name__)
|
|||
xenapi_agent_opts = [
|
||||
cfg.IntOpt('agent_timeout',
|
||||
default=30,
|
||||
deprecated_name='agent_timeout',
|
||||
deprecated_group='DEFAULT',
|
||||
help='number of seconds to wait for agent reply'),
|
||||
cfg.IntOpt('agent_version_timeout',
|
||||
default=300,
|
||||
deprecated_name='agent_version_timeout',
|
||||
deprecated_group='DEFAULT',
|
||||
help='number of seconds to wait for agent '
|
||||
'to be fully operational'),
|
||||
cfg.IntOpt('agent_resetnetwork_timeout',
|
||||
deprecated_name='agent_resetnetwork_timeout',
|
||||
deprecated_group='DEFAULT',
|
||||
default=60,
|
||||
help='number of seconds to wait for agent reply '
|
||||
'to resetnetwork request'),
|
||||
cfg.StrOpt('xenapi_agent_path',
|
||||
cfg.StrOpt('agent_path',
|
||||
default='usr/sbin/xe-update-networking',
|
||||
deprecated_name='xenapi_agent_path',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Specifies the path in which the xenapi guest agent '
|
||||
'should be located. If the agent is present, network '
|
||||
'configuration is not injected into the image. '
|
||||
'Used if compute_driver=xenapi.XenAPIDriver and '
|
||||
' flat_injected=True'),
|
||||
cfg.BoolOpt('xenapi_disable_agent',
|
||||
default=False,
|
||||
help='Disables the use of the XenAPI agent in any image '
|
||||
'regardless of what image properties are present.'),
|
||||
cfg.BoolOpt('xenapi_use_agent_default',
|
||||
default=False,
|
||||
help='Determines if the xenapi agent should be used when '
|
||||
'the image used does not contain a hint to declare if '
|
||||
'the agent is present or not. '
|
||||
'The hint is a glance property "' + USE_AGENT_KEY + '" '
|
||||
'that has the value "true" or "false". '
|
||||
'Note that waiting for the agent when it is not present '
|
||||
'will significantly increase server boot times.'),
|
||||
cfg.BoolOpt('disable_agent',
|
||||
default=False,
|
||||
deprecated_name='xenapi_disable_agent',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Disables the use of the XenAPI agent in any image '
|
||||
'regardless of what image properties are present.'),
|
||||
cfg.BoolOpt('use_agent_default',
|
||||
default=False,
|
||||
deprecated_name='xenapi_use_agent_default',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Determines if the xenapi agent should be used when '
|
||||
'the image used does not contain a hint to declare if '
|
||||
'the agent is present or not. '
|
||||
'The hint is a glance property "' + USE_AGENT_KEY + '" '
|
||||
'that has the value "true" or "false". '
|
||||
'Note that waiting for the agent when it is not present '
|
||||
'will significantly increase server boot times.'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(xenapi_agent_opts)
|
||||
CONF.register_opts(xenapi_agent_opts, 'xenserver')
|
||||
|
||||
|
||||
def _call_agent(session, instance, vm_ref, method, addl_args=None,
|
||||
|
@ -92,7 +104,7 @@ def _call_agent(session, instance, vm_ref, method, addl_args=None,
|
|||
if addl_args is None:
|
||||
addl_args = {}
|
||||
if timeout is None:
|
||||
timeout = CONF.agent_timeout
|
||||
timeout = CONF.xenserver.agent_timeout
|
||||
if success_codes is None:
|
||||
success_codes = ['0']
|
||||
|
||||
|
@ -198,7 +210,7 @@ class XenAPIBasedAgent(object):
|
|||
# it will generally perform a setup process on first boot that can
|
||||
# take a couple of minutes and then reboot. On Linux, the system can
|
||||
# also take a while to boot.
|
||||
expiration = time.time() + CONF.agent_version_timeout
|
||||
expiration = time.time() + CONF.xenserver.agent_version_timeout
|
||||
while True:
|
||||
try:
|
||||
# NOTE(johngarbutt): we can't use the xapi plugin
|
||||
|
@ -334,8 +346,8 @@ class XenAPIBasedAgent(object):
|
|||
|
||||
#NOTE(johngarbutt) old FreeBSD and Gentoo agents return 500 on success
|
||||
return self._call_agent('resetnetwork',
|
||||
timeout=CONF.agent_resetnetwork_timeout,
|
||||
success_codes=['0', '500'])
|
||||
timeout=CONF.xenserver.agent_resetnetwork_timeout,
|
||||
success_codes=['0', '500'])
|
||||
|
||||
def _skip_ssh_key_inject(self):
|
||||
return self._get_sys_meta_key(SKIP_SSH_SM_KEY)
|
||||
|
@ -354,10 +366,10 @@ def find_guest_agent(base_dir):
|
|||
tries to locate a guest agent at the path
|
||||
specified by agent_rel_path
|
||||
"""
|
||||
if CONF.xenapi_disable_agent:
|
||||
if CONF.xenserver.disable_agent:
|
||||
return False
|
||||
|
||||
agent_rel_path = CONF.xenapi_agent_path
|
||||
agent_rel_path = CONF.xenserver.agent_path
|
||||
agent_path = os.path.join(base_dir, agent_rel_path)
|
||||
if os.path.isfile(agent_path):
|
||||
# The presence of the guest agent
|
||||
|
@ -385,7 +397,7 @@ def find_guest_agent(base_dir):
|
|||
def should_use_agent(instance):
|
||||
sys_meta = utils.instance_sys_meta(instance)
|
||||
if USE_AGENT_SM_KEY not in sys_meta:
|
||||
return CONF.xenapi_use_agent_default
|
||||
return CONF.xenserver.use_agent_default
|
||||
else:
|
||||
use_agent_raw = sys_meta[USE_AGENT_SM_KEY]
|
||||
try:
|
||||
|
@ -394,7 +406,7 @@ def should_use_agent(instance):
|
|||
LOG.warn(_("Invalid 'agent_present' value. "
|
||||
"Falling back to the default."),
|
||||
instance=instance)
|
||||
return CONF.xenapi_use_agent_default
|
||||
return CONF.xenserver.use_agent_default
|
||||
|
||||
|
||||
class SimpleDH(object):
|
||||
|
|
|
@ -19,11 +19,11 @@ A driver for XenServer or Xen Cloud Platform.
|
|||
|
||||
**Related Flags**
|
||||
|
||||
:xenapi_connection_url: URL for connection to XenServer/Xen Cloud Platform.
|
||||
:xenapi_connection_username: Username for connection to XenServer/Xen Cloud
|
||||
Platform (default: root).
|
||||
:xenapi_connection_password: Password for connection to XenServer/Xen Cloud
|
||||
Platform.
|
||||
:connection_url: URL for connection to XenServer/Xen Cloud Platform.
|
||||
:connection_username: Username for connection to XenServer/Xen Cloud
|
||||
Platform (default: root).
|
||||
:connection_password: Password for connection to XenServer/Xen Cloud
|
||||
Platform.
|
||||
:target_host: the iSCSI Target Host IP address, i.e. the IP
|
||||
address for the nova-volume host
|
||||
:target_port: iSCSI Target Port, 3260 Default
|
||||
|
@ -67,63 +67,91 @@ from nova.virt.xenapi import volumeops
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
xenapi_opts = [
|
||||
cfg.StrOpt('xenapi_connection_url',
|
||||
cfg.StrOpt('connection_url',
|
||||
deprecated_name='xenapi_connection_url',
|
||||
deprecated_group='DEFAULT',
|
||||
help='URL for connection to XenServer/Xen Cloud Platform. '
|
||||
'A special value of unix://local can be used to connect '
|
||||
'to the local unix socket. '
|
||||
'Required if compute_driver=xenapi.XenAPIDriver'),
|
||||
cfg.StrOpt('xenapi_connection_username',
|
||||
cfg.StrOpt('connection_username',
|
||||
default='root',
|
||||
deprecated_name='xenapi_connection_username',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Username for connection to XenServer/Xen Cloud Platform. '
|
||||
'Used only if compute_driver=xenapi.XenAPIDriver'),
|
||||
cfg.StrOpt('xenapi_connection_password',
|
||||
cfg.StrOpt('connection_password',
|
||||
deprecated_name='xenapi_connection_password',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Password for connection to XenServer/Xen Cloud Platform. '
|
||||
'Used only if compute_driver=xenapi.XenAPIDriver',
|
||||
secret=True),
|
||||
cfg.IntOpt('xenapi_connection_concurrent',
|
||||
cfg.IntOpt('connection_concurrent',
|
||||
default=5,
|
||||
deprecated_name='xenapi_connection_concurrent',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Maximum number of concurrent XenAPI connections. '
|
||||
'Used only if compute_driver=xenapi.XenAPIDriver'),
|
||||
cfg.FloatOpt('xenapi_vhd_coalesce_poll_interval',
|
||||
cfg.FloatOpt('vhd_coalesce_poll_interval',
|
||||
default=5.0,
|
||||
deprecated_name='xenapi_vhd_coalesce_poll_interval',
|
||||
deprecated_group='DEFAULT',
|
||||
help='The interval used for polling of coalescing vhds. '
|
||||
'Used only if compute_driver=xenapi.XenAPIDriver'),
|
||||
cfg.BoolOpt('xenapi_check_host',
|
||||
cfg.BoolOpt('check_host',
|
||||
default=True,
|
||||
deprecated_name='xenapi_check_host',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Ensure compute service is running on host XenAPI '
|
||||
'connects to.'),
|
||||
cfg.IntOpt('xenapi_vhd_coalesce_max_attempts',
|
||||
cfg.IntOpt('vhd_coalesce_max_attempts',
|
||||
default=5,
|
||||
deprecated_name='xenapi_vhd_coalesce_max_attempts',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Max number of times to poll for VHD to coalesce. '
|
||||
'Used only if compute_driver=xenapi.XenAPIDriver'),
|
||||
cfg.StrOpt('xenapi_sr_base_path',
|
||||
cfg.StrOpt('sr_base_path',
|
||||
default='/var/run/sr-mount',
|
||||
deprecated_name='xenapi_sr_base_path',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Base path to the storage repository'),
|
||||
cfg.StrOpt('target_host',
|
||||
deprecated_name='target_host',
|
||||
deprecated_group='DEFAULT',
|
||||
help='iSCSI Target Host'),
|
||||
cfg.StrOpt('target_port',
|
||||
default='3260',
|
||||
deprecated_name='target_port',
|
||||
deprecated_group='DEFAULT',
|
||||
help='iSCSI Target Port, 3260 Default'),
|
||||
cfg.StrOpt('iqn_prefix',
|
||||
default='iqn.2010-10.org.openstack',
|
||||
deprecated_name='iqn_prefix',
|
||||
deprecated_group='DEFAULT',
|
||||
help='IQN Prefix'),
|
||||
# NOTE(sirp): This is a work-around for a bug in Ubuntu Maverick,
|
||||
# when we pull support for it, we should remove this
|
||||
cfg.BoolOpt('xenapi_remap_vbd_dev',
|
||||
cfg.BoolOpt('remap_vbd_dev',
|
||||
default=False,
|
||||
deprecated_name='xenapi_remap_vbd_dev',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Used to enable the remapping of VBD dev '
|
||||
'(Works around an issue in Ubuntu Maverick)'),
|
||||
cfg.StrOpt('xenapi_remap_vbd_dev_prefix',
|
||||
cfg.StrOpt('remap_vbd_dev_prefix',
|
||||
default='sd',
|
||||
deprecated_name='xenapi_remap_vbd_dev_prefix',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Specify prefix to remap VBD dev to '
|
||||
'(ex. /dev/xvdb -> /dev/sdb)'),
|
||||
cfg.IntOpt('xenapi_login_timeout',
|
||||
cfg.IntOpt('login_timeout',
|
||||
default=10,
|
||||
deprecated_name='xenapi_login_timeout',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Timeout in seconds for XenAPI login.'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(xenapi_opts)
|
||||
CONF.register_opts(xenapi_opts, 'xenserver')
|
||||
CONF.import_opt('host', 'nova.netconf')
|
||||
|
||||
|
||||
|
@ -133,13 +161,13 @@ class XenAPIDriver(driver.ComputeDriver):
|
|||
def __init__(self, virtapi, read_only=False):
|
||||
super(XenAPIDriver, self).__init__(virtapi)
|
||||
|
||||
url = CONF.xenapi_connection_url
|
||||
username = CONF.xenapi_connection_username
|
||||
password = CONF.xenapi_connection_password
|
||||
url = CONF.xenserver.connection_url
|
||||
username = CONF.xenserver.connection_username
|
||||
password = CONF.xenserver.connection_password
|
||||
if not url or password is None:
|
||||
raise Exception(_('Must specify xenapi_connection_url, '
|
||||
'xenapi_connection_username (optionally), and '
|
||||
'xenapi_connection_password to use '
|
||||
raise Exception(_('Must specify connection_url, '
|
||||
'connection_username (optionally), and '
|
||||
'connection_password to use '
|
||||
'compute_driver=xenapi.XenAPIDriver'))
|
||||
|
||||
self._session = XenAPISession(url, username, password, self.virtapi)
|
||||
|
@ -158,7 +186,7 @@ class XenAPIDriver(driver.ComputeDriver):
|
|||
return self._host_state
|
||||
|
||||
def init_host(self, host):
|
||||
if CONF.xenapi_check_host:
|
||||
if CONF.xenserver.check_host:
|
||||
vm_utils.ensure_correct_host(self._session)
|
||||
|
||||
try:
|
||||
|
@ -399,7 +427,7 @@ class XenAPIDriver(driver.ComputeDriver):
|
|||
|
||||
@staticmethod
|
||||
def get_host_ip_addr():
|
||||
xs_url = urlparse.urlparse(CONF.xenapi_connection_url)
|
||||
xs_url = urlparse.urlparse(CONF.xenserver.connection_url)
|
||||
return xs_url.netloc
|
||||
|
||||
def attach_volume(self, context, connection_info, instance, mountpoint,
|
||||
|
@ -417,10 +445,10 @@ class XenAPIDriver(driver.ComputeDriver):
|
|||
mountpoint)
|
||||
|
||||
def get_console_pool_info(self, console_type):
|
||||
xs_url = urlparse.urlparse(CONF.xenapi_connection_url)
|
||||
xs_url = urlparse.urlparse(CONF.xenserver.connection_url)
|
||||
return {'address': xs_url.netloc,
|
||||
'username': CONF.xenapi_connection_username,
|
||||
'password': CONF.xenapi_connection_password}
|
||||
'username': CONF.xenserver.connection_username,
|
||||
'password': CONF.xenserver.connection_password}
|
||||
|
||||
def get_available_resource(self, nodename):
|
||||
"""Retrieve resource information.
|
||||
|
@ -692,7 +720,7 @@ class XenAPISession(object):
|
|||
def _create_first_session(self, url, user, pw, exception):
|
||||
try:
|
||||
session = self._create_session(url)
|
||||
with timeout.Timeout(CONF.xenapi_login_timeout, exception):
|
||||
with timeout.Timeout(CONF.xenserver.login_timeout, exception):
|
||||
session.login_with_password(user, pw)
|
||||
except self.XenAPI.Failure as e:
|
||||
# if user and pw of the master are different, we're doomed!
|
||||
|
@ -708,9 +736,9 @@ class XenAPISession(object):
|
|||
return url
|
||||
|
||||
def _populate_session_pool(self, url, user, pw, exception):
|
||||
for i in xrange(CONF.xenapi_connection_concurrent - 1):
|
||||
for i in xrange(CONF.xenserver.connection_concurrent - 1):
|
||||
session = self._create_session(url)
|
||||
with timeout.Timeout(CONF.xenapi_login_timeout, exception):
|
||||
with timeout.Timeout(CONF.xenserver.login_timeout, exception):
|
||||
session.login_with_password(user, pw)
|
||||
self._sessions.put(session)
|
||||
|
||||
|
|
|
@ -25,38 +25,54 @@ from nova.virt.xenapi import vm_utils
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
xenapi_torrent_opts = [
|
||||
cfg.StrOpt('xenapi_torrent_base_url',
|
||||
cfg.StrOpt('torrent_base_url',
|
||||
deprecated_name='xenapi_torrent_base_url',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Base URL for torrent files.'),
|
||||
cfg.FloatOpt('xenapi_torrent_seed_chance',
|
||||
cfg.FloatOpt('torrent_seed_chance',
|
||||
default=1.0,
|
||||
deprecated_name='xenapi_torrent_seed_chance',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Probability that peer will become a seeder.'
|
||||
' (1.0 = 100%)'),
|
||||
cfg.IntOpt('xenapi_torrent_seed_duration',
|
||||
cfg.IntOpt('torrent_seed_duration',
|
||||
default=3600,
|
||||
deprecated_name='xenapi_torrent_seed_duration',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Number of seconds after downloading an image via'
|
||||
' BitTorrent that it should be seeded for other peers.'),
|
||||
cfg.IntOpt('xenapi_torrent_max_last_accessed',
|
||||
cfg.IntOpt('torrent_max_last_accessed',
|
||||
default=86400,
|
||||
deprecated_name='xenapi_torrent_max_last_accessed',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Cached torrent files not accessed within this number of'
|
||||
' seconds can be reaped'),
|
||||
cfg.IntOpt('xenapi_torrent_listen_port_start',
|
||||
cfg.IntOpt('torrent_listen_port_start',
|
||||
default=6881,
|
||||
deprecated_name='xenapi_torrent_listen_port_start',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Beginning of port range to listen on'),
|
||||
cfg.IntOpt('xenapi_torrent_listen_port_end',
|
||||
cfg.IntOpt('torrent_listen_port_end',
|
||||
default=6891,
|
||||
deprecated_name='xenapi_torrent_listen_port_end',
|
||||
deprecated_group='DEFAULT',
|
||||
help='End of port range to listen on'),
|
||||
cfg.IntOpt('xenapi_torrent_download_stall_cutoff',
|
||||
cfg.IntOpt('torrent_download_stall_cutoff',
|
||||
default=600,
|
||||
deprecated_name='xenapi_torrent_download_stall_cutoff',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Number of seconds a download can remain at the same'
|
||||
' progress percentage w/o being considered a stall'),
|
||||
cfg.IntOpt('xenapi_torrent_max_seeder_processes_per_host',
|
||||
cfg.IntOpt('torrent_max_seeder_processes_per_host',
|
||||
default=1,
|
||||
deprecated_name='xenapi_torrent_max_seeder_processes_per_host',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Maximum number of seeder processes to run concurrently'
|
||||
' within a given dom0. (-1 = no limit)')
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(xenapi_torrent_opts)
|
||||
CONF.register_opts(xenapi_torrent_opts, 'xenserver')
|
||||
|
||||
|
||||
class BittorrentStore(object):
|
||||
|
@ -73,12 +89,12 @@ class BittorrentStore(object):
|
|||
LOG.debug(_("No torrent URL fetcher extension found, using"
|
||||
" default."))
|
||||
|
||||
if not CONF.xenapi_torrent_base_url:
|
||||
if not CONF.xenserver.torrent_base_url:
|
||||
raise RuntimeError(_('Cannot create default bittorrent URL'
|
||||
' without xenapi_torrent_base_url set'))
|
||||
' without torrent_base_url set'))
|
||||
|
||||
def _default_torrent_url_fn(instance, image_id):
|
||||
return urlparse.urljoin(CONF.xenapi_torrent_base_url,
|
||||
return urlparse.urljoin(CONF.xenserver.torrent_base_url,
|
||||
"%s.torrent" % image_id)
|
||||
|
||||
fn = _default_torrent_url_fn
|
||||
|
@ -98,17 +114,18 @@ class BittorrentStore(object):
|
|||
params['image_id'] = image_id
|
||||
params['uuid_stack'] = vm_utils._make_uuid_stack()
|
||||
params['sr_path'] = vm_utils.get_sr_path(session)
|
||||
params['torrent_seed_duration'] = CONF.xenapi_torrent_seed_duration
|
||||
params['torrent_seed_chance'] = CONF.xenapi_torrent_seed_chance
|
||||
params['torrent_seed_duration'] = CONF.xenserver.torrent_seed_duration
|
||||
params['torrent_seed_chance'] = CONF.xenserver.torrent_seed_chance
|
||||
params['torrent_max_last_accessed'] = \
|
||||
CONF.xenapi_torrent_max_last_accessed
|
||||
CONF.xenserver.torrent_max_last_accessed
|
||||
params['torrent_listen_port_start'] = \
|
||||
CONF.xenapi_torrent_listen_port_start
|
||||
params['torrent_listen_port_end'] = CONF.xenapi_torrent_listen_port_end
|
||||
CONF.xenserver.torrent_listen_port_start
|
||||
params['torrent_listen_port_end'] = \
|
||||
CONF.xenserver.torrent_listen_port_end
|
||||
params['torrent_download_stall_cutoff'] = \
|
||||
CONF.xenapi_torrent_download_stall_cutoff
|
||||
CONF.xenserver.torrent_download_stall_cutoff
|
||||
params['torrent_max_seeder_processes_per_host'] = \
|
||||
CONF.xenapi_torrent_max_seeder_processes_per_host
|
||||
CONF.xenserver.torrent_max_seeder_processes_per_host
|
||||
|
||||
lookup_fn = self._lookup_torrent_url_fn()
|
||||
params['torrent_url'] = lookup_fn(instance, image_id)
|
||||
|
|
|
@ -35,12 +35,14 @@ LOG = logging.getLogger(__name__)
|
|||
|
||||
xenapi_pool_opts = [
|
||||
cfg.BoolOpt('use_join_force',
|
||||
deprecated_name='use_join_force',
|
||||
deprecated_group='DEFAULT',
|
||||
default=True,
|
||||
help='To use for hosts with different CPUs'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(xenapi_pool_opts)
|
||||
CONF.register_opts(xenapi_pool_opts, 'xenserver')
|
||||
CONF.import_opt('host', 'nova.netconf')
|
||||
|
||||
|
||||
|
@ -176,10 +178,10 @@ class ResourcePool(object):
|
|||
'url': url,
|
||||
'user': user,
|
||||
'password': passwd,
|
||||
'force': jsonutils.dumps(CONF.use_join_force),
|
||||
'force': jsonutils.dumps(CONF.xenserver.use_join_force),
|
||||
'master_addr': self._host_addr,
|
||||
'master_user': CONF.xenapi_connection_username,
|
||||
'master_pass': CONF.xenapi_connection_password, }
|
||||
'master_user': CONF.xenserver.connection_username,
|
||||
'master_pass': CONF.xenserver.connection_password, }
|
||||
self._session.call_plugin('xenhost', 'host_join', args)
|
||||
except self._session.XenAPI.Failure as e:
|
||||
LOG.error(_("Pool-Join failed: %s"), e)
|
||||
|
@ -235,12 +237,12 @@ class ResourcePool(object):
|
|||
# because this might be 169.254.0.1, i.e. xenapi
|
||||
# NOTE: password in clear is not great, but it'll do for now
|
||||
sender_url = swap_xapi_host(
|
||||
CONF.xenapi_connection_url, self._host_addr)
|
||||
CONF.xenserver.connection_url, self._host_addr)
|
||||
|
||||
return {
|
||||
"url": sender_url,
|
||||
"user": CONF.xenapi_connection_username,
|
||||
"passwd": CONF.xenapi_connection_password,
|
||||
"user": CONF.xenserver.connection_username,
|
||||
"passwd": CONF.xenserver.connection_password,
|
||||
"compute_uuid": vm_utils.get_this_vm_uuid(None),
|
||||
"xenhost_uuid": self._host_uuid,
|
||||
}
|
||||
|
|
|
@ -26,12 +26,14 @@ from nova.virt.xenapi import network_utils
|
|||
from nova.virt.xenapi import vm_utils
|
||||
|
||||
|
||||
xenapi_ovs_integration_bridge_opt = cfg.StrOpt('xenapi_ovs_integration_bridge',
|
||||
default='xapi1',
|
||||
help='Name of Integration Bridge used by Open vSwitch')
|
||||
xenapi_ovs_integration_bridge_opt = cfg.StrOpt('ovs_integration_bridge',
|
||||
default='xapi1',
|
||||
deprecated_name='xenapi_ovs_integration_bridge',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Name of Integration Bridge used by Open vSwitch')
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opt(xenapi_ovs_integration_bridge_opt)
|
||||
CONF.register_opt(xenapi_ovs_integration_bridge_opt, 'xenserver')
|
||||
|
||||
|
||||
class XenVIFDriver(object):
|
||||
|
@ -145,7 +147,7 @@ class XenAPIOpenVswitchDriver(XenVIFDriver):
|
|||
# with OVS model, always plug into an OVS integration bridge
|
||||
# that is already created
|
||||
network_ref = network_utils.find_network_with_bridge(
|
||||
self._session, CONF.xenapi_ovs_integration_bridge)
|
||||
self._session, CONF.xenserver.ovs_integration_bridge)
|
||||
vif_rec = {}
|
||||
vif_rec['device'] = str(device)
|
||||
vif_rec['network'] = network_ref
|
||||
|
|
|
@ -62,26 +62,38 @@ LOG = logging.getLogger(__name__)
|
|||
|
||||
xenapi_vm_utils_opts = [
|
||||
cfg.StrOpt('cache_images',
|
||||
default='all',
|
||||
help='Cache glance images locally. `all` will cache all'
|
||||
' images, `some` will only cache images that have the'
|
||||
' image_property `cache_in_nova=True`, and `none` turns'
|
||||
' off caching entirely'),
|
||||
cfg.IntOpt('xenapi_image_compression_level',
|
||||
default='all',
|
||||
deprecated_name='cache_images',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Cache glance images locally. `all` will cache all'
|
||||
' images, `some` will only cache images that have the'
|
||||
' image_property `cache_in_nova=True`, and `none` turns'
|
||||
' off caching entirely'),
|
||||
cfg.IntOpt('image_compression_level',
|
||||
deprecated_name='xenapi_image_compression_level',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Compression level for images, e.g., 9 for gzip -9.'
|
||||
' Range is 1-9, 9 being most compressed but most CPU'
|
||||
' intensive on dom0.'),
|
||||
cfg.StrOpt('default_os_type',
|
||||
default='linux',
|
||||
deprecated_name='default_os_type',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Default OS type'),
|
||||
cfg.IntOpt('block_device_creation_timeout',
|
||||
default=10,
|
||||
deprecated_name='block_device_creation_timeout',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Time to wait for a block device to be created'),
|
||||
cfg.IntOpt('max_kernel_ramdisk_size',
|
||||
default=16 * unit.Mi,
|
||||
deprecated_name='max_kernel_ramdisk_size',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Maximum size in bytes of kernel or ramdisk images'),
|
||||
cfg.StrOpt('sr_matching_filter',
|
||||
default='default-sr:true',
|
||||
deprecated_name='sr_matching_filter',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Filter for finding the SR to be used to install guest '
|
||||
'instances on. To use the Local Storage in default '
|
||||
'XenServer/XCP installations set this flag to '
|
||||
|
@ -90,31 +102,43 @@ xenapi_vm_utils_opts = [
|
|||
'other-config:my_favorite_sr=true. On the other hand, to '
|
||||
'fall back on the Default SR, as displayed by XenCenter, '
|
||||
'set this flag to: default-sr:true'),
|
||||
cfg.BoolOpt('xenapi_sparse_copy',
|
||||
cfg.BoolOpt('sparse_copy',
|
||||
default=True,
|
||||
deprecated_name='xenapi_sparse_copy',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Whether to use sparse_copy for copying data on a '
|
||||
'resize down (False will use standard dd). This speeds '
|
||||
'up resizes down considerably since large runs of zeros '
|
||||
'won\'t have to be rsynced'),
|
||||
cfg.IntOpt('xenapi_num_vbd_unplug_retries',
|
||||
cfg.IntOpt('num_vbd_unplug_retries',
|
||||
default=10,
|
||||
deprecated_name='xenapi_num_vbd_unplug_retries',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Maximum number of retries to unplug VBD'),
|
||||
cfg.StrOpt('xenapi_torrent_images',
|
||||
cfg.StrOpt('torrent_images',
|
||||
default='none',
|
||||
deprecated_name='xenapi_torrent_images',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Whether or not to download images via Bit Torrent '
|
||||
'(all|some|none).'),
|
||||
cfg.StrOpt('xenapi_ipxe_network_name',
|
||||
cfg.StrOpt('ipxe_network_name',
|
||||
deprecated_name='xenapi_ipxe_network_name',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Name of network to use for booting iPXE ISOs'),
|
||||
cfg.StrOpt('xenapi_ipxe_boot_menu_url',
|
||||
cfg.StrOpt('ipxe_boot_menu_url',
|
||||
deprecated_name='xenapi_ipxe_boot_menu_url',
|
||||
deprecated_group='DEFAULT',
|
||||
help='URL to the iPXE boot menu'),
|
||||
cfg.StrOpt('xenapi_ipxe_mkisofs_cmd',
|
||||
cfg.StrOpt('ipxe_mkisofs_cmd',
|
||||
default='mkisofs',
|
||||
deprecated_name='xenapi_ipxe_mkisofs_cmd',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Name and optionally path of the tool used for '
|
||||
'ISO image creation'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(xenapi_vm_utils_opts)
|
||||
CONF.register_opts(xenapi_vm_utils_opts, 'xenserver')
|
||||
CONF.import_opt('default_ephemeral_format', 'nova.virt.driver')
|
||||
CONF.import_opt('use_cow_images', 'nova.virt.driver')
|
||||
CONF.import_opt('glance_num_retries', 'nova.image.glance')
|
||||
|
@ -361,7 +385,7 @@ def _should_retry_unplug_vbd(err):
|
|||
|
||||
|
||||
def unplug_vbd(session, vbd_ref):
|
||||
max_attempts = CONF.xenapi_num_vbd_unplug_retries + 1
|
||||
max_attempts = CONF.xenserver.num_vbd_unplug_retries + 1
|
||||
for num_attempt in xrange(1, max_attempts + 1):
|
||||
try:
|
||||
if num_attempt > 1:
|
||||
|
@ -769,7 +793,7 @@ def get_sr_path(session, sr_ref=None):
|
|||
" SR %(uuid)s is of type %(type)s") %
|
||||
{"uuid": sr_uuid, "type": sr_rec["type"]})
|
||||
|
||||
return os.path.join(CONF.xenapi_sr_base_path, sr_uuid)
|
||||
return os.path.join(CONF.xenserver.sr_base_path, sr_uuid)
|
||||
|
||||
|
||||
def destroy_cached_images(session, sr_ref, all_cached=False, dry_run=False):
|
||||
|
@ -1102,7 +1126,7 @@ def _create_kernel_image(context, session, instance, name_label, image_id,
|
|||
Returns: A list of dictionaries that describe VDIs
|
||||
"""
|
||||
filename = ""
|
||||
if CONF.cache_images:
|
||||
if CONF.xenserver.cache_images:
|
||||
args = {}
|
||||
args['cached-image'] = image_id
|
||||
args['new-image-uuid'] = str(uuid.uuid4())
|
||||
|
@ -1211,7 +1235,7 @@ def _create_image(context, session, instance, name_label, image_id,
|
|||
|
||||
Returns: A list of dictionaries that describe VDIs
|
||||
"""
|
||||
cache_images = CONF.cache_images.lower()
|
||||
cache_images = CONF.xenserver.cache_images.lower()
|
||||
|
||||
# Determine if the image is cacheable
|
||||
if image_type == ImageType.DISK_ISO:
|
||||
|
@ -1228,7 +1252,7 @@ def _create_image(context, session, instance, name_label, image_id,
|
|||
cache = False
|
||||
else:
|
||||
LOG.warning(_("Unrecognized cache_images value '%s', defaulting to"
|
||||
" True"), CONF.cache_images)
|
||||
" True"), CONF.xenserver.cache_images)
|
||||
cache = True
|
||||
|
||||
# Fetch (and cache) the image
|
||||
|
@ -1279,22 +1303,22 @@ def _make_uuid_stack():
|
|||
|
||||
def _image_uses_bittorrent(context, instance):
|
||||
bittorrent = False
|
||||
xenapi_torrent_images = CONF.xenapi_torrent_images.lower()
|
||||
torrent_images = CONF.xenserver.torrent_images.lower()
|
||||
|
||||
if xenapi_torrent_images == 'all':
|
||||
if torrent_images == 'all':
|
||||
bittorrent = True
|
||||
elif xenapi_torrent_images == 'some':
|
||||
elif torrent_images == 'some':
|
||||
sys_meta = utils.instance_sys_meta(instance)
|
||||
try:
|
||||
bittorrent = strutils.bool_from_string(
|
||||
sys_meta['image_bittorrent'])
|
||||
except KeyError:
|
||||
pass
|
||||
elif xenapi_torrent_images == 'none':
|
||||
elif torrent_images == 'none':
|
||||
pass
|
||||
else:
|
||||
LOG.warning(_("Invalid value '%s' for xenapi_torrent_images"),
|
||||
xenapi_torrent_images)
|
||||
LOG.warning(_("Invalid value '%s' for torrent_images"),
|
||||
torrent_images)
|
||||
|
||||
return bittorrent
|
||||
|
||||
|
@ -1314,9 +1338,9 @@ def _choose_download_handler(context, instance):
|
|||
|
||||
|
||||
def get_compression_level():
|
||||
level = CONF.xenapi_image_compression_level
|
||||
level = CONF.xenserver.image_compression_level
|
||||
if level is not None and (level < 1 or level > 9):
|
||||
LOG.warn(_("Invalid value '%d' for xenapi_image_compression_level"),
|
||||
LOG.warn(_("Invalid value '%d' for image_compression_level"),
|
||||
level)
|
||||
return None
|
||||
return level
|
||||
|
@ -1445,8 +1469,8 @@ def _fetch_disk_image(context, session, instance, name_label, image_id,
|
|||
# Make room for MBR.
|
||||
vdi_size += MBR_SIZE_BYTES
|
||||
elif (image_type in (ImageType.KERNEL, ImageType.RAMDISK) and
|
||||
vdi_size > CONF.max_kernel_ramdisk_size):
|
||||
max_size = CONF.max_kernel_ramdisk_size
|
||||
vdi_size > CONF.xenserver.max_kernel_ramdisk_size):
|
||||
max_size = CONF.xenserver.max_kernel_ramdisk_size
|
||||
raise exception.NovaException(
|
||||
_("Kernel/Ramdisk image is too large: %(vdi_size)d bytes, "
|
||||
"max %(max_size)d bytes") %
|
||||
|
@ -1475,7 +1499,7 @@ def _fetch_disk_image(context, session, instance, name_label, image_id,
|
|||
|
||||
# Let the plugin copy the correct number of bytes.
|
||||
args['image-size'] = str(vdi_size)
|
||||
if CONF.cache_images:
|
||||
if CONF.xenserver.cache_images:
|
||||
args['cached-image'] = image_id
|
||||
filename = session.call_plugin('kernel', 'copy_vdi', args)
|
||||
|
||||
|
@ -1746,13 +1770,14 @@ def _find_sr(session):
|
|||
"""Return the storage repository to hold VM images."""
|
||||
host = session.get_xenapi_host()
|
||||
try:
|
||||
tokens = CONF.sr_matching_filter.split(':')
|
||||
tokens = CONF.xenserver.sr_matching_filter.split(':')
|
||||
filter_criteria = tokens[0]
|
||||
filter_pattern = tokens[1]
|
||||
except IndexError:
|
||||
# oops, flag is invalid
|
||||
LOG.warning(_("Flag sr_matching_filter '%s' does not respect "
|
||||
"formatting convention"), CONF.sr_matching_filter)
|
||||
"formatting convention"),
|
||||
CONF.xenserver.sr_matching_filter)
|
||||
return None
|
||||
|
||||
if filter_criteria == 'other-config':
|
||||
|
@ -1822,7 +1847,7 @@ def _find_iso_sr(session):
|
|||
|
||||
def _get_rrd_server():
|
||||
"""Return server's scheme and address to use for retrieving RRD XMLs."""
|
||||
xs_url = urlparse.urlparse(CONF.xenapi_connection_url)
|
||||
xs_url = urlparse.urlparse(CONF.xenserver.connection_url)
|
||||
return [xs_url.scheme, xs_url.netloc]
|
||||
|
||||
|
||||
|
@ -1831,8 +1856,8 @@ def _get_rrd(server, vm_uuid):
|
|||
try:
|
||||
xml = urllib.urlopen("%s://%s:%s@%s/vm_rrd?uuid=%s" % (
|
||||
server[0],
|
||||
CONF.xenapi_connection_username,
|
||||
CONF.xenapi_connection_password,
|
||||
CONF.xenserver.connection_username,
|
||||
CONF.xenserver.connection_password,
|
||||
server[1],
|
||||
vm_uuid))
|
||||
return xml.read()
|
||||
|
@ -1952,7 +1977,7 @@ def _wait_for_vhd_coalesce(session, instance, sr_ref, vdi_ref,
|
|||
base_uuid = _get_vhd_parent_uuid(session, parent_ref)
|
||||
return parent_uuid, base_uuid
|
||||
|
||||
max_attempts = CONF.xenapi_vhd_coalesce_max_attempts
|
||||
max_attempts = CONF.xenserver.vhd_coalesce_max_attempts
|
||||
for i in xrange(max_attempts):
|
||||
# NOTE(sirp): This rescan is necessary to ensure the VM's `sm_config`
|
||||
# matches the underlying VHDs.
|
||||
|
@ -1969,7 +1994,7 @@ def _wait_for_vhd_coalesce(session, instance, sr_ref, vdi_ref,
|
|||
base_uuid = _get_vhd_parent_uuid(session, parent_ref)
|
||||
return parent_uuid, base_uuid
|
||||
|
||||
greenthread.sleep(CONF.xenapi_vhd_coalesce_poll_interval)
|
||||
greenthread.sleep(CONF.xenserver.vhd_coalesce_poll_interval)
|
||||
|
||||
msg = (_("VHD coalesce attempts exceeded (%d)"
|
||||
", giving up...") % max_attempts)
|
||||
|
@ -1986,12 +2011,12 @@ def _remap_vbd_dev(dev):
|
|||
For now, we work around it by just doing a string replace.
|
||||
"""
|
||||
# NOTE(sirp): This hack can go away when we pull support for Maverick
|
||||
should_remap = CONF.xenapi_remap_vbd_dev
|
||||
should_remap = CONF.xenserver.remap_vbd_dev
|
||||
if not should_remap:
|
||||
return dev
|
||||
|
||||
old_prefix = 'xvd'
|
||||
new_prefix = CONF.xenapi_remap_vbd_dev_prefix
|
||||
new_prefix = CONF.xenserver.remap_vbd_dev_prefix
|
||||
remapped_dev = dev.replace(old_prefix, new_prefix)
|
||||
|
||||
return remapped_dev
|
||||
|
@ -1999,7 +2024,7 @@ def _remap_vbd_dev(dev):
|
|||
|
||||
def _wait_for_device(dev):
|
||||
"""Wait for device node to appear."""
|
||||
for i in xrange(0, CONF.block_device_creation_timeout):
|
||||
for i in xrange(0, CONF.xenserver.block_device_creation_timeout):
|
||||
dev_path = utils.make_dev_path(dev)
|
||||
if os.path.exists(dev_path):
|
||||
return
|
||||
|
@ -2274,7 +2299,7 @@ def _copy_partition(session, src_ref, dst_ref, partition, virtual_size):
|
|||
|
||||
_write_partition(session, virtual_size, dst)
|
||||
|
||||
if CONF.xenapi_sparse_copy:
|
||||
if CONF.xenserver.sparse_copy:
|
||||
_sparse_copy(src_path, dst_path, virtual_size)
|
||||
else:
|
||||
num_blocks = virtual_size / SECTOR_SIZE
|
||||
|
@ -2432,7 +2457,7 @@ def ensure_correct_host(session):
|
|||
if exc.details[0] != 'UUID_INVALID':
|
||||
raise
|
||||
raise Exception(_('This domU must be running on the host '
|
||||
'specified by xenapi_connection_url'))
|
||||
'specified by connection_url'))
|
||||
|
||||
|
||||
def import_all_migrated_disks(session, instance):
|
||||
|
@ -2524,15 +2549,15 @@ def handle_ipxe_iso(session, instance, cd_vdi, network_info):
|
|||
provider can either add that package manually to Dom0 or include the
|
||||
`mkisofs` binary in the image itself.
|
||||
"""
|
||||
boot_menu_url = CONF.xenapi_ipxe_boot_menu_url
|
||||
boot_menu_url = CONF.xenserver.ipxe_boot_menu_url
|
||||
if not boot_menu_url:
|
||||
LOG.warn(_('xenapi_ipxe_boot_menu_url not set, user will have to'
|
||||
LOG.warn(_('ipxe_boot_menu_url not set, user will have to'
|
||||
' enter URL manually...'), instance=instance)
|
||||
return
|
||||
|
||||
network_name = CONF.xenapi_ipxe_network_name
|
||||
network_name = CONF.xenserver.ipxe_network_name
|
||||
if not network_name:
|
||||
LOG.warn(_('xenapi_ipxe_network_name not set, user will have to'
|
||||
LOG.warn(_('ipxe_network_name not set, user will have to'
|
||||
' enter IP manually...'), instance=instance)
|
||||
return
|
||||
|
||||
|
@ -2563,11 +2588,11 @@ def handle_ipxe_iso(session, instance, cd_vdi, network_info):
|
|||
try:
|
||||
session.call_plugin_serialized("ipxe", "inject", sr_path,
|
||||
cd_vdi['uuid'], boot_menu_url, ip_address, netmask,
|
||||
gateway, dns, CONF.xenapi_ipxe_mkisofs_cmd)
|
||||
gateway, dns, CONF.xenserver.ipxe_mkisofs_cmd)
|
||||
except session.XenAPI.Failure as exc:
|
||||
_type, _method, error = exc.details[:3]
|
||||
if error == 'CommandNotFound':
|
||||
LOG.warn(_("ISO creation tool '%s' does not exist.") %
|
||||
CONF.xenapi_ipxe_mkisofs_cmd, instance=instance)
|
||||
CONF.xenserver.ipxe_mkisofs_cmd, instance=instance)
|
||||
else:
|
||||
raise
|
||||
|
|
|
@ -60,20 +60,26 @@ from nova.virt.xenapi import volumeops
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
xenapi_vmops_opts = [
|
||||
cfg.IntOpt('xenapi_running_timeout',
|
||||
cfg.IntOpt('running_timeout',
|
||||
default=60,
|
||||
deprecated_name='xenapi_running_timeout',
|
||||
deprecated_group='DEFAULT',
|
||||
help='number of seconds to wait for instance '
|
||||
'to go to running state'),
|
||||
cfg.StrOpt('xenapi_vif_driver',
|
||||
cfg.StrOpt('vif_driver',
|
||||
default='nova.virt.xenapi.vif.XenAPIBridgeDriver',
|
||||
deprecated_name='xenapi_vif_driver',
|
||||
deprecated_group='DEFAULT',
|
||||
help='The XenAPI VIF driver using XenServer Network APIs.'),
|
||||
cfg.StrOpt('xenapi_image_upload_handler',
|
||||
cfg.StrOpt('image_upload_handler',
|
||||
default='nova.virt.xenapi.image.glance.GlanceStore',
|
||||
help='Dom0 plugin driver used to handle image uploads.'),
|
||||
deprecated_name='xenapi_image_upload_handler',
|
||||
deprecated_group='DEFAULT',
|
||||
help='Dom0 plugin driver used to handle image uploads.'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(xenapi_vmops_opts)
|
||||
CONF.register_opts(xenapi_vmops_opts, 'xenserver')
|
||||
CONF.import_opt('host', 'nova.netconf')
|
||||
CONF.import_opt('vncserver_proxyclient_address', 'nova.vnc')
|
||||
|
||||
|
@ -158,17 +164,17 @@ class VMOps(object):
|
|||
DEFAULT_FIREWALL_DRIVER,
|
||||
self._virtapi,
|
||||
xenapi_session=self._session)
|
||||
vif_impl = importutils.import_class(CONF.xenapi_vif_driver)
|
||||
vif_impl = importutils.import_class(CONF.xenserver.vif_driver)
|
||||
self.vif_driver = vif_impl(xenapi_session=self._session)
|
||||
self.default_root_dev = '/dev/sda'
|
||||
|
||||
LOG.debug(_("Importing image upload handler: %s"),
|
||||
CONF.xenapi_image_upload_handler)
|
||||
CONF.xenserver.image_upload_handler)
|
||||
self.image_upload_handler = importutils.import_object(
|
||||
CONF.xenapi_image_upload_handler)
|
||||
CONF.xenserver.image_upload_handler)
|
||||
|
||||
def agent_enabled(self, instance):
|
||||
if CONF.xenapi_disable_agent:
|
||||
if CONF.xenserver.disable_agent:
|
||||
return False
|
||||
|
||||
return xapi_agent.should_use_agent(instance)
|
||||
|
@ -614,7 +620,7 @@ class VMOps(object):
|
|||
def _wait_for_instance_to_start(self, instance, vm_ref):
|
||||
LOG.debug(_('Waiting for instance state to become running'),
|
||||
instance=instance)
|
||||
expiration = time.time() + CONF.xenapi_running_timeout
|
||||
expiration = time.time() + CONF.xenserver.running_timeout
|
||||
while time.time() < expiration:
|
||||
state = self.get_info(instance, vm_ref)['state']
|
||||
if state == power_state.RUNNING:
|
||||
|
@ -708,7 +714,7 @@ class VMOps(object):
|
|||
get a stable representation of the data on disk.
|
||||
|
||||
3. Push-to-data-store: Once coalesced, we call
|
||||
'xenapi_image_upload_handler' to upload the images.
|
||||
'image_upload_handler' to upload the images.
|
||||
|
||||
"""
|
||||
vm_ref = self._get_vm_opaque_ref(instance)
|
||||
|
|
Loading…
Reference in New Issue