in azurelinuxagent/common/protocol/goal_state.py [0:0]
def _fetch_full_wire_server_goal_state(self, incarnation, xml_doc):
"""
Issues HTTP requests (to the WireServer) for each of the URIs in the goal state (ExtensionsConfig, Certificate, Remote Access users, etc)
and populates the corresponding properties.
Returns the value of ExtensionsConfig.
"""
try:
self.logger.info('')
message = 'Fetching full goal state from the WireServer [incarnation {0}]'.format(incarnation)
self.logger.info(message)
add_event(op=WALAEventOperation.GoalState, message=message)
role_instance_id = None
role_config_name = None
container_id = None
if GoalStateProperties.RoleConfig & self._goal_state_properties:
role_instance = find(xml_doc, "RoleInstance")
role_instance_id = findtext(role_instance, "InstanceId")
role_config = find(role_instance, "Configuration")
role_config_name = findtext(role_config, "ConfigName")
container = find(xml_doc, "Container")
container_id = findtext(container, "ContainerId")
extensions_config_uri = findtext(xml_doc, "ExtensionsConfig")
if not (GoalStateProperties.ExtensionsGoalState & self._goal_state_properties) or extensions_config_uri is None:
extensions_config = ExtensionsGoalStateFactory.create_empty(incarnation)
else:
xml_text = self._wire_client.fetch_config(extensions_config_uri, self._wire_client.get_header())
extensions_config = ExtensionsGoalStateFactory.create_from_extensions_config(incarnation, xml_text, self._wire_client)
if self._save_to_history:
self._history.save_extensions_config(extensions_config.get_redacted_text())
hosting_env = None
if GoalStateProperties.HostingEnv & self._goal_state_properties:
hosting_env_uri = findtext(xml_doc, "HostingEnvironmentConfig")
xml_text = self._wire_client.fetch_config(hosting_env_uri, self._wire_client.get_header())
hosting_env = HostingEnv(xml_text)
if self._save_to_history:
self._history.save_hosting_env(xml_text)
shared_config = None
if GoalStateProperties.SharedConfig & self._goal_state_properties:
shared_conf_uri = findtext(xml_doc, "SharedConfig")
xml_text = self._wire_client.fetch_config(shared_conf_uri, self._wire_client.get_header())
shared_config = SharedConfig(xml_text)
if self._save_to_history:
self._history.save_shared_conf(xml_text)
# SharedConfig.xml is used by other components (Azsec and Singularity/HPC Infiniband), so save it to the agent's root directory as well
shared_config_file = os.path.join(conf.get_lib_dir(), SHARED_CONF_FILE_NAME)
try:
fileutil.write_file(shared_config_file, xml_text)
except Exception as e:
logger.warn("Failed to save {0}: {1}".format(shared_config, e))
certs = EmptyCertificates()
certs_uri = findtext(xml_doc, "Certificates")
if (GoalStateProperties.Certificates & self._goal_state_properties) and certs_uri is not None:
certs = self._download_certificates(certs_uri)
remote_access = None
if GoalStateProperties.RemoteAccessInfo & self._goal_state_properties:
remote_access_uri = findtext(container, "RemoteAccessInfo")
if remote_access_uri is not None:
xml_text = self._wire_client.fetch_config(remote_access_uri, self._wire_client.get_header_for_remote_access())
remote_access = RemoteAccess(xml_text)
if self._save_to_history:
self._history.save_remote_access(xml_text)
self._incarnation = incarnation
self._role_instance_id = role_instance_id
self._role_config_name = role_config_name
self._container_id = container_id
self._hosting_env = hosting_env
self._shared_conf = shared_config
self._certs = certs
self._certs_uri = certs_uri
self._remote_access = remote_access
return extensions_config
except Exception as exception:
self.logger.warn("Fetching the goal state failed: {0}", ustr(exception))
raise ProtocolError(msg="Error fetching goal state", inner=exception)
finally:
message = 'Fetch goal state from WireServer completed'
self.logger.info(message)
add_event(op=WALAEventOperation.GoalState, message=message)