Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

Commit

Permalink
Merge pull request #8238 from mshriver/fix-appliance-name
Browse files Browse the repository at this point in the history
[1LP][RFR] Update appliance name
  • Loading branch information
mshriver committed Dec 13, 2018
2 parents ea70ac6 + ca48d90 commit 636b3bb
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 31 deletions.
50 changes: 25 additions & 25 deletions cfme/base/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,14 @@
from cfme.modeling.base import BaseCollection, BaseEntity
from cfme.utils import ParamClassName
from cfme.utils.appliance.implementations.ui import navigate_to
from cfme.utils.blockers import BZ
from cfme.utils.log import logger
from cfme.utils.pretty import Pretty
from cfme.utils.version import LATEST


@attr.s
class Server(BaseEntity, sentaku.modeling.ElementMixin):
_param_name = ParamClassName('name')

name = attr.ib()
sid = attr.ib(default=1)

address = sentaku.ContextualMethod()
Expand All @@ -34,6 +31,18 @@ class Server(BaseEntity, sentaku.modeling.ElementMixin):
# zone = sentaku.ContextualProperty()
# slave_servers = sentaku.ContextualProperty()

@property
def name(self):
"""Fetch the name from the master server api entity
Returns:
string if entity has the name attribute
None if its missing
"""
collect = self.appliance.rest_api.collections.servers
servers = collect.all if self.appliance.is_dev else collect.find_by(is_master=True)
return getattr(servers[0], 'name', None)

@property
def settings(self):
from cfme.configure.configuration.server_settings import ServerInformation
Expand Down Expand Up @@ -120,28 +129,19 @@ def all(self):
return servers

def get_master(self):
server_collection = self.appliance.rest_api.collections.servers
if self.appliance.is_dev:
server = server_collection.all[0]
else:
server = server_collection.find_by(is_master=True)[0]

# TODO This entire hack needs to be removed once we are able to edit the server name again
try:
name = server.name
except AttributeError:
logger.error('The EVM has no name, setting it to EVM')
if (self.appliance.version == LATEST or
self.appliance.is_pod or
BZ(1635178, forced_streams=['5.10']).blocks or
BZ(1639364, forced_streams=['5.9']).blocks):
name = 'EVM'
else:
name = server.name
server = self.instantiate(name=name, sid=server.id)
server.update_advanced_settings({'server': {'name': "EVM"}})
return server
return self.instantiate(name=name, sid=server.id)
"""Look for the master server through REST entity, use its ID to instantiate Server
Returns:
:py:class:`cfme.base.Server` entity
"""
collect = self.appliance.rest_api.collections.servers
servers = collect.all if self.appliance.is_dev else collect.find_by(is_master=True)
server = servers[0]

if not hasattr(server, 'name'):
logger.warning('rest_api server object has no name attribute')

return self.instantiate(sid=server.id)


@attr.s
Expand Down
6 changes: 3 additions & 3 deletions cfme/base/ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ def is_displayed(self):
self.accordions.settings.tree.currently_selected == selected_list)


@navigator.register(Server)
@navigator.register(Server, 'Details')
class Details(CFMENavigateStep):
VIEW = ServerView
prerequisite = NavigateToSibling('Configuration')
Expand All @@ -532,8 +532,8 @@ class ServerDetails(CFMENavigateStep):
def am_i_here(self):
return (
self.view.is_displayed and
self.prerequisite_view.is_displayed and
self.view.server.is_active)
self.view.server.is_active
)

def step(self):
self.prerequisite_view.server.select()
Expand Down
14 changes: 11 additions & 3 deletions cfme/utils/appliance/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,16 @@ def is_registration_complete(self, used_repo_or_channel):
def default_zone(self):
return self.appliance.server.zone

@property
def name(self):
"""Appliance name from advanced settings, equivalent to master server name"""
try:
return self.advanced_settings['server']['name']
except KeyError:
logger.exception('Appliance name attribute not where it was expected in %r',
self.advanced_settings.get('server'))
raise ApplianceException('Failed to find appliance server name key in settings')

@property
def server(self):
return self.collections.servers.get_master()
Expand Down Expand Up @@ -2600,7 +2610,7 @@ def ipapp(self):
return self

@classmethod
def from_provider(cls, provider_key, vm_name, name=None, **kwargs):
def from_provider(cls, provider_key, vm_name, **kwargs):
"""Constructor of this Appliance.
Retrieves the IP address of the appliance from the provider and then instantiates it,
Expand Down Expand Up @@ -2656,7 +2666,6 @@ def is_ip_available():
appliance.vm_name = vm_name
appliance.provider = provider.mgmt
appliance.provider_key = provider_key
appliance.name = name or cls._default_name
return appliance

def _custom_configure(self, **kwargs):
Expand Down Expand Up @@ -2782,7 +2791,6 @@ def rename(self, new_name):
"""
vmdb_config = {'server': {'name': new_name}}
self.update_advanced_settings(vmdb_config)
self.name = new_name

def destroy(self):
"""Destroys the VM this appliance is running as
Expand Down

0 comments on commit 636b3bb

Please sign in to comment.