You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2013/11/01 16:28:26 UTC

[15/15] git commit: AMBARI-3665. Resource Management. Implement ConfigGenerator (Andrew Onischuk via dlysnichenko)

AMBARI-3665. Resource Management. Implement ConfigGenerator (Andrew Onischuk via dlysnichenko)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/220294d5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/220294d5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/220294d5

Branch: refs/heads/trunk
Commit: 220294d552b38555c3497b85b8356198fab7f23a
Parents: 732d113
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Fri Nov 1 17:26:09 2013 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Fri Nov 1 17:26:09 2013 +0200

----------------------------------------------------------------------
 .../python/resource_management/core/source.py   | 20 +++++++-------
 .../libraries/providers/__init__.py             |  3 ++-
 .../libraries/providers/config_file.py          | 20 --------------
 .../libraries/providers/template_config.py      | 20 ++++++++++++++
 .../libraries/providers/xml_config.py           | 28 ++++++++++++++++++++
 .../libraries/resources/__init__.py             |  3 ++-
 .../libraries/resources/config_file.py          | 12 ---------
 .../libraries/resources/template_config.py      | 12 +++++++++
 .../libraries/resources/xml_config.py           | 15 +++++++++++
 9 files changed, 89 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/core/source.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/source.py b/ambari-agent/src/main/python/resource_management/core/source.py
index b27bacb..cb11bbc 100644
--- a/ambari-agent/src/main/python/resource_management/core/source.py
+++ b/ambari-agent/src/main/python/resource_management/core/source.py
@@ -74,33 +74,33 @@ else:
       return source, path, lambda: mtime == os.path.getmtime(path)
 
   class Template(Source):
-    def __init__(self, name, **kwargs):
+    def __init__(self, name, extra_imports=[], **kwargs):
       """
       @param kwargs: Additional variables passed to template
       """
       super(Template, self).__init__(name)
       params = self.env.config.params
       variables = checked_unite(params, kwargs)
+      self.imports_dict = dict((module.__name__, module) for module in extra_imports)
       self.context = variables.copy() if variables else {}
       if not hasattr(self, 'template_env'):
         self.template_env = JinjaEnvironment(loader=TemplateLoader(self.env),
                                         autoescape=False, undefined=StrictUndefined)
+        
       self.template = self.template_env.get_template(self.name)     
-
+    
     def get_content(self):
-      self.context.update(
-        env=self.env,
-        repr=repr,
-        str=str,
-        bool=bool,
-      )
+      default_variables = { 'env':self.env, 'repr':repr, 'str':str, 'bool':bool }
+      variables = checked_unite(default_variables, self.imports_dict)
+      self.context.update(variables)
+      
       rendered = self.template.render(self.context)
       return rendered + "\n" if not rendered.endswith('\n') else rendered
     
   class InlineTemplate(Template):
-    def __init__(self, name, **kwargs):
+    def __init__(self, name, extra_imports=[], **kwargs):
       self.template_env = JinjaEnvironment(loader=FunctionLoader(lambda text: text))
-      super(InlineTemplate, self).__init__(name, **kwargs) 
+      super(InlineTemplate, self).__init__(name, extra_imports, **kwargs) 
 
 
 class DownloadSource(Source):

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py b/ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py
index ba4269e..19816c5 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py
@@ -11,6 +11,7 @@ PROVIDERS = dict(
   ),
   default=dict(
     ExecuteHadoop="resource_management.libraries.providers.execute_hadoop.ExecuteHadoopProvider",
-    ConfigFile="resource_management.libraries.providers.config_file.ConfigFileProvider",
+    TemplateConfig="resource_management.libraries.providers.template_config.TemplateConfigProvider",
+    XmlConfig="resource_management.libraries.providers.xml_config.XmlConfigProvider"
   ),
 )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/providers/config_file.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/config_file.py b/ambari-agent/src/main/python/resource_management/libraries/providers/config_file.py
deleted file mode 100644
index 8cc04e0..0000000
--- a/ambari-agent/src/main/python/resource_management/libraries/providers/config_file.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import os
-from resource_management import *
-
-class ConfigFileProvider(Provider):
-  def action_create(self):
-    template_tag = self.resource.template_tag
-    qualified_file_name = self.resource.name
-    file_name = os.path.basename(qualified_file_name)
-
-    if not template_tag:
-      template_name = format("{file_name}.j2")
-    else:
-      template_name = format("{file_name}-{template_tag}.j2")
-
-    File( qualified_file_name,
-     owner   = self.resource.owner,
-     group   = self.resource.group,
-     mode    = self.resource.mode,
-     content = Template(template_name)
-    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/providers/template_config.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/template_config.py b/ambari-agent/src/main/python/resource_management/libraries/providers/template_config.py
new file mode 100644
index 0000000..6d75667
--- /dev/null
+++ b/ambari-agent/src/main/python/resource_management/libraries/providers/template_config.py
@@ -0,0 +1,20 @@
+import os
+from resource_management import *
+
+class TemplateConfigProvider(Provider):
+  def action_create(self):
+    template_tag = self.resource.template_tag
+    qualified_file_name = self.resource.name
+    file_name = os.path.basename(qualified_file_name)
+
+    if not template_tag:
+      template_name = format("{file_name}.j2")
+    else:
+      template_name = format("{file_name}-{template_tag}.j2")
+
+    File( qualified_file_name,
+     owner   = self.resource.owner,
+     group   = self.resource.group,
+     mode    = self.resource.mode,
+     content = Template(template_name)
+    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py b/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
new file mode 100644
index 0000000..9694244
--- /dev/null
+++ b/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
@@ -0,0 +1,28 @@
+import time
+from resource_management import *
+
+class XmlConfigProvider(Provider):
+  def action_create(self):
+    filename = self.resource.filename
+    conf_dir = self.resource.conf_dir
+    
+    # |e - for html-like escaping of <,>,',"
+    config_content = InlineTemplate('''<!--{{time.asctime(time.localtime())}}-->
+    <configuration>
+    {% for key, value in configurations_dict.items() %}
+    <property>
+      <name>{{ key|e }}</name>
+      <value>{{ value|e }}</value>
+    </property>
+    {% endfor %}
+  </configuration>''', extra_imports=[time], configurations_dict=self.resource.configurations)
+   
+  
+    self.log.debug(format("Generating config: {conf_dir}/{filename}"))
+  
+    File (format("{conf_dir}/{filename}"),
+      content = config_content,
+      owner = self.resource.owner,
+      group = self.resource.group,
+      mode = self.resource.mode
+    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py b/ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py
index 0001272..12f5455 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py
@@ -1,2 +1,3 @@
 from resource_management.libraries.resources.execute_hadoop import *
-from resource_management.libraries.resources.config_file import *
\ No newline at end of file
+from resource_management.libraries.resources.template_config import *
+from resource_management.libraries.resources.xml_config import *
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/resources/config_file.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/resources/config_file.py b/ambari-agent/src/main/python/resource_management/libraries/resources/config_file.py
deleted file mode 100644
index 3632c8b..0000000
--- a/ambari-agent/src/main/python/resource_management/libraries/resources/config_file.py
+++ /dev/null
@@ -1,12 +0,0 @@
-_all__ = ["ConfigFile"]
-from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
-
-class ConfigFile(Resource):
-  action = ForcedListArgument(default="create")
-  path = ResourceArgument(default=lambda obj: obj.name)
-  mode = ResourceArgument()
-  owner = ResourceArgument()
-  group = ResourceArgument()
-  template_tag = ResourceArgument()
-
-  actions = Resource.actions + ["create"]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/resources/template_config.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/resources/template_config.py b/ambari-agent/src/main/python/resource_management/libraries/resources/template_config.py
new file mode 100644
index 0000000..2ff4440
--- /dev/null
+++ b/ambari-agent/src/main/python/resource_management/libraries/resources/template_config.py
@@ -0,0 +1,12 @@
+_all__ = ["TemplateConfig"]
+from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
+
+class TemplateConfig(Resource):
+  action = ForcedListArgument(default="create")
+  path = ResourceArgument(default=lambda obj: obj.name)
+  mode = ResourceArgument()
+  owner = ResourceArgument()
+  group = ResourceArgument()
+  template_tag = ResourceArgument()
+
+  actions = Resource.actions + ["create"]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/220294d5/ambari-agent/src/main/python/resource_management/libraries/resources/xml_config.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/resources/xml_config.py b/ambari-agent/src/main/python/resource_management/libraries/resources/xml_config.py
new file mode 100644
index 0000000..036329c
--- /dev/null
+++ b/ambari-agent/src/main/python/resource_management/libraries/resources/xml_config.py
@@ -0,0 +1,15 @@
+_all__ = ["XmlConfig"]
+from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
+
+class XmlConfig(Resource):
+  action = ForcedListArgument(default="create")
+  filename = ResourceArgument(default=lambda obj: obj.name)
+  
+  configurations = ResourceArgument()
+  conf_dir = ResourceArgument()
+  
+  mode = ResourceArgument()
+  owner = ResourceArgument()
+  group = ResourceArgument()
+
+  actions = Resource.actions + ["create"]
\ No newline at end of file