summaryrefslogtreecommitdiff
path: root/azurelinuxagent/ga/exthandlers.py
diff options
context:
space:
mode:
Diffstat (limited to 'azurelinuxagent/ga/exthandlers.py')
-rw-r--r--azurelinuxagent/ga/exthandlers.py45
1 files changed, 23 insertions, 22 deletions
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: