diff options
Diffstat (limited to 'azurelinuxagent/ga')
-rw-r--r-- | azurelinuxagent/ga/env.py | 9 | ||||
-rw-r--r-- | azurelinuxagent/ga/exthandlers.py | 45 | ||||
-rw-r--r-- | azurelinuxagent/ga/monitor.py | 14 | ||||
-rw-r--r-- | azurelinuxagent/ga/update.py | 16 |
4 files changed, 50 insertions, 34 deletions
diff --git a/azurelinuxagent/ga/env.py b/azurelinuxagent/ga/env.py index 5d8da5c..c81eed7 100644 --- a/azurelinuxagent/ga/env.py +++ b/azurelinuxagent/ga/env.py @@ -56,9 +56,9 @@ class EnvHandler(object): self.stopped = False logger.info("Start env monitor service.") self.dhcp_handler.conf_routes() - self.hostname = socket.gethostname() + self.hostname = self.osutil.get_hostname_record() self.dhcpid = self.osutil.get_dhcp_pid() - self.server_thread = threading.Thread(target = self.monitor) + self.server_thread = threading.Thread(target=self.monitor) self.server_thread.setDaemon(True) self.server_thread.start() @@ -80,8 +80,9 @@ class EnvHandler(object): def handle_hostname_update(self): curr_hostname = socket.gethostname() if curr_hostname != self.hostname: - logger.info("EnvMonitor: Detected host name change: {0} -> {1}", - self.hostname, curr_hostname) + logger.info("EnvMonitor: Detected hostname change: {0} -> {1}", + self.hostname, + curr_hostname) self.osutil.set_hostname(curr_hostname) self.osutil.publish_hostname(curr_hostname) self.hostname = curr_hostname diff --git a/azurelinuxagent/ga/exthandlers.py b/azurelinuxagent/ga/exthandlers.py index c9e6b5f..9b99d04 100644 --- a/azurelinuxagent/ga/exthandlers.py +++ b/azurelinuxagent/ga/exthandlers.py @@ -107,7 +107,8 @@ def parse_ext_status(ext_status, data): if substatus_list is None: return for substatus in substatus_list: - ext_status.substatusList.append(parse_ext_substatus(substatus)) + if substatus is not None: + ext_status.substatusList.append(parse_ext_substatus(substatus)) # This code migrates, if it exists, handler state and status from an # agent-owned directory into the handler-owned config directory @@ -208,18 +209,18 @@ class ExtHandlersHandler(object): def handle_ext_handler(self, ext_handler, etag): ext_handler_i = ExtHandlerInstance(ext_handler, self.protocol) - ext_handler_i.decide_version() - if not ext_handler_i.is_upgrade and self.last_etag == etag: - if self.log_etag: - ext_handler_i.logger.verbose("Version {0} is current for etag {1}", - ext_handler_i.pkg.version, - etag) - self.log_etag = False - return + try: + ext_handler_i.decide_version() + if not ext_handler_i.is_upgrade and self.last_etag == etag: + if self.log_etag: + ext_handler_i.logger.verbose("Version {0} is current for etag {1}", + ext_handler_i.pkg.version, + etag) + self.log_etag = False + return - self.log_etag = True + self.log_etag = True - try: state = ext_handler.properties.state ext_handler_i.logger.info("Expected handler state: {0}", state) if state == "enabled": @@ -281,12 +282,8 @@ class ExtHandlersHandler(object): ext_handler_i.rm_ext_handler_dir() def report_ext_handlers_status(self): - """Go thru handler_state dir, collect and report status""" - vm_status = VMStatus() - vm_status.vmAgent.version = str(CURRENT_VERSION) - vm_status.vmAgent.status = "Ready" - vm_status.vmAgent.message = "Guest Agent is running" - + """Go through handler_state dir, collect and report status""" + vm_status = VMStatus(status="Ready", message="Guest Agent is running") if self.ext_handlers is not None: for ext_handler in self.ext_handlers.extHandlers: try: @@ -297,7 +294,7 @@ class ExtHandlersHandler(object): version=CURRENT_VERSION, is_success=False, message=ustr(e)) - + logger.verbose("Report vm agent status") try: self.protocol.report_vm_status(vm_status) @@ -330,7 +327,8 @@ class ExtHandlersHandler(object): ext_handler_i.set_handler_status(message=ustr(e), code=-1) vm_status.vmAgent.extensionHandlers.append(handler_status) - + + class ExtHandlerInstance(object): def __init__(self, ext_handler, protocol): self.ext_handler = ext_handler @@ -343,7 +341,7 @@ class ExtHandlerInstance(object): self.logger = logger.Logger(logger.DEFAULT_LOGGER, prefix) try: - fileutil.mkdir(self.get_log_dir(), mode=0o744) + fileutil.mkdir(self.get_log_dir(), mode=0o755) except IOError as e: self.logger.error(u"Failed to create extension log dir: {0}", e) @@ -669,7 +667,7 @@ class ExtHandlerInstance(object): ext_status.message = u"Failed to get status file {0}".format(e) ext_status.code = -1 ext_status.status = "error" - except ValueError as e: + except (ExtensionError, ValueError) as e: ext_status.message = u"Malformed status file {0}".format(e) ext_status.code = -1 ext_status.status = "error" @@ -717,7 +715,7 @@ class ExtHandlerInstance(object): def is_responsive(self, heartbeat_file): last_update=int(time.time() - os.stat(heartbeat_file).st_mtime) - return last_update > 600 # not updated for more than 10 min + return last_update <= 600 # updated within the last 10 min def launch_command(self, cmd, timeout=300): self.logger.info("Launch command:{0}", cmd) @@ -807,6 +805,9 @@ class ExtHandlerInstance(object): def set_handler_state(self, handler_state): state_dir = self.get_conf_dir() try: + if not os.path.exists(state_dir): + fileutil.mkdir(state_dir, mode=0o700) + state_file = os.path.join(state_dir, "HandlerState") fileutil.write_file(state_file, handler_state) except IOError as e: diff --git a/azurelinuxagent/ga/monitor.py b/azurelinuxagent/ga/monitor.py index 478a7a3..7ef7f04 100644 --- a/azurelinuxagent/ga/monitor.py +++ b/azurelinuxagent/ga/monitor.py @@ -25,7 +25,7 @@ import threading import azurelinuxagent.common.conf as conf import azurelinuxagent.common.logger as logger -from azurelinuxagent.common.event import WALAEventOperation, add_event +from azurelinuxagent.common.event import add_event, WALAEventOperation from azurelinuxagent.common.exception import EventError, ProtocolError, OSUtilError from azurelinuxagent.common.future import ustr from azurelinuxagent.common.osutil import get_osutil @@ -162,7 +162,7 @@ class MonitorHandler(object): try: event = parse_event(data_str) - event.parameters.extend(self.sysinfo) + self.add_sysinfo(event) event_list.events.append(event) except (ValueError, ProtocolError) as e: logger.warn("Failed to decode event file: {0}", e) @@ -193,3 +193,13 @@ class MonitorHandler(object): except Exception as e: logger.warn("Failed to send events: {0}", e) time.sleep(60) + + def add_sysinfo(self, event): + sysinfo_names = [v.name for v in self.sysinfo] + for param in event.parameters: + if param.name in sysinfo_names: + logger.verbose("Remove existing event parameter: [{0}:{1}]", + param.name, + param.value) + event.parameters.remove(param) + event.parameters.extend(self.sysinfo) diff --git a/azurelinuxagent/ga/update.py b/azurelinuxagent/ga/update.py index 996484b..59bc70c 100644 --- a/azurelinuxagent/ga/update.py +++ b/azurelinuxagent/ga/update.py @@ -701,11 +701,15 @@ class GuestAgent(object): if self._fetch(uri.uri): break else: - if self.host is not None: - logger.info("Download unsuccessful, falling back to host plugin") + if self.host is not None and self.host.ensure_initialized(): + logger.warn("Download unsuccessful, falling back to host plugin") uri, headers = self.host.get_artifact_request(uri.uri, self.host.manifest_uri) - if self._fetch(uri, headers=headers): + if uri is not None \ + and headers is not None \ + and self._fetch(uri, headers=headers): break + else: + logger.warn("Download unsuccessful, host plugin not available") if not os.path.isfile(self.get_agent_pkg_path()): msg = u"Unable to download Agent {0} from any URI".format(self.name) @@ -730,9 +734,9 @@ class GuestAgent(object): logger.info(u"Agent {0} downloaded from {1}", self.name, uri) except restutil.HttpError as http_error: logger.verbose(u"Agent {0} download from {1} failed [{2}]", - self.name, - uri, - http_error) + self.name, + uri, + http_error) return package is not None def _load_error(self): |