summaryrefslogtreecommitdiff
path: root/azurelinuxagent/ga
diff options
context:
space:
mode:
Diffstat (limited to 'azurelinuxagent/ga')
-rw-r--r--azurelinuxagent/ga/env.py9
-rw-r--r--azurelinuxagent/ga/exthandlers.py45
-rw-r--r--azurelinuxagent/ga/monitor.py14
-rw-r--r--azurelinuxagent/ga/update.py16
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):