in azurelinuxagent/common/protocol/extensions_goal_state_from_extensions_config.py [0:0]
def _parse_plugin_settings(extension, plugin_settings):
"""
Sample config:
<PluginSettings>
<Plugin name="Microsoft.CPlat.Core.NullSeqA" version="2.0.1">
<DependsOn dependencyLevel="1">
<DependsOnExtension handler="Microsoft.CPlat.Core.NullSeqB" />
</DependsOn>
<RuntimeSettings seqNo="0">{
"runtimeSettings": [
{
"handlerSettings": {
"publicSettings": {"01_add_extensions_with_dependency":"ff2a3da6-8e12-4ab6-a4ca-4e3a473ab385"}
}
}
]
}
</RuntimeSettings>
</Plugin>
<Plugin name="Microsoft.CPlat.Core.RunCommandHandlerWindows" version="2.0.2">
<ExtensionRuntimeSettings seqNo="4" name="firstRunCommand" state="enabled">{
"runtimeSettings": [
{
"handlerSettings": {
"publicSettings": {"source":{"script":"Write-Host First: Hello World TestTry2!"},"parameters":[{"name":"extensionName","value":"firstRunCommand"}],"timeoutInSeconds":120}
}
}
]
}
</ExtensionRuntimeSettings>
</Plugin>
</PluginSettings>
"""
if plugin_settings is None:
return
extension_name = extension.name
version = extension.version
def to_lower(str_to_change): return str_to_change.lower() if str_to_change is not None else None
extension_plugin_settings = [x for x in plugin_settings if to_lower(getattrib(x, "name")) == to_lower(extension_name)]
if not extension_plugin_settings:
return
settings = [x for x in extension_plugin_settings if getattrib(x, "version") == version]
if len(settings) != len(extension_plugin_settings):
msg = "Extension PluginSettings Version Mismatch! Expected PluginSettings version: {0} for Extension: {1} but found versions: ({2})".format(
version, extension_name, ', '.join(set([getattrib(x, "version") for x in extension_plugin_settings])))
add_event(op=WALAEventOperation.PluginSettingsVersionMismatch, message=msg, log_event=True,
is_success=False)
raise ExtensionsConfigError(msg)
if len(settings) > 1:
msg = "Multiple plugin settings found for the same extension: {0} and version: {1} (Expected: 1; Available: {2})".format(
extension_name, version, len(settings))
raise ExtensionsConfigError(msg)
plugin_settings_node = settings[0]
runtime_settings_nodes = findall(plugin_settings_node, "RuntimeSettings")
extension_runtime_settings_nodes = findall(plugin_settings_node, "ExtensionRuntimeSettings")
if any(runtime_settings_nodes) and any(extension_runtime_settings_nodes):
# There can only be a single RuntimeSettings node or multiple ExtensionRuntimeSettings nodes per Plugin
msg = "Both RuntimeSettings and ExtensionRuntimeSettings found for the same extension: {0} and version: {1}".format(
extension_name, version)
raise ExtensionsConfigError(msg)
if runtime_settings_nodes:
if len(runtime_settings_nodes) > 1:
msg = "Multiple RuntimeSettings found for the same extension: {0} and version: {1} (Expected: 1; Available: {2})".format(
extension_name, version, len(runtime_settings_nodes))
raise ExtensionsConfigError(msg)
# Only Runtime settings available, parse that
ExtensionsGoalStateFromExtensionsConfig.__parse_runtime_settings(plugin_settings_node, runtime_settings_nodes[0], extension_name,
extension)
elif extension_runtime_settings_nodes:
# Parse the ExtensionRuntime settings for the given extension
ExtensionsGoalStateFromExtensionsConfig.__parse_extension_runtime_settings(plugin_settings_node, extension_runtime_settings_nodes,
extension)