Browse Source

AMBARI-3658. Resource management. Support common custom libraries. (Andrew Onischuk via dlysnichenko)

Lisnichenko Dmitro 11 years ago
parent
commit
84274b4f83
28 changed files with 129 additions and 110 deletions
  1. 2 8
      ambari-agent/src/main/python/resource_management/__init__.py
  2. 9 0
      ambari-agent/src/main/python/resource_management/core/__init__.py
  3. 2 2
      ambari-agent/src/main/python/resource_management/core/base.py
  4. 5 5
      ambari-agent/src/main/python/resource_management/core/environment.py
  5. 0 0
      ambari-agent/src/main/python/resource_management/core/exceptions.py
  6. 69 0
      ambari-agent/src/main/python/resource_management/core/providers/__init__.py
  7. 2 2
      ambari-agent/src/main/python/resource_management/core/providers/accounts.py
  8. 2 2
      ambari-agent/src/main/python/resource_management/core/providers/mount.py
  9. 2 2
      ambari-agent/src/main/python/resource_management/core/providers/package/__init__.py
  10. 2 2
      ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py
  11. 2 2
      ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py
  12. 3 3
      ambari-agent/src/main/python/resource_management/core/providers/service.py
  13. 3 3
      ambari-agent/src/main/python/resource_management/core/providers/system.py
  14. 4 0
      ambari-agent/src/main/python/resource_management/core/resources/__init__.py
  15. 1 1
      ambari-agent/src/main/python/resource_management/core/resources/accounts.py
  16. 1 1
      ambari-agent/src/main/python/resource_management/core/resources/packaging.py
  17. 1 1
      ambari-agent/src/main/python/resource_management/core/resources/service.py
  18. 1 1
      ambari-agent/src/main/python/resource_management/core/resources/system.py
  19. 0 0
      ambari-agent/src/main/python/resource_management/core/script.py
  20. 0 0
      ambari-agent/src/main/python/resource_management/core/shell.py
  21. 1 2
      ambari-agent/src/main/python/resource_management/core/source.py
  22. 1 1
      ambari-agent/src/main/python/resource_management/core/system.py
  23. 0 0
      ambari-agent/src/main/python/resource_management/core/utils.py
  24. 2 0
      ambari-agent/src/main/python/resource_management/libraries/__init__.py
  25. 14 0
      ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py
  26. 0 0
      ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py
  27. 0 68
      ambari-agent/src/main/python/resource_management/providers/__init__.py
  28. 0 4
      ambari-agent/src/main/python/resource_management/resources/__init__.py

+ 2 - 8
ambari-agent/src/main/python/resource_management/__init__.py

@@ -1,9 +1,3 @@
-from resource_management.base import *
-from resource_management.environment import *
-from resource_management.exceptions import *
-from resource_management.providers import *
-from resource_management.resources import *
-from resource_management.source import *
-from resource_management.system import *
+from resource_management.libraries import *
+from resource_management.core import *
 
-__version__ = "0.4.1"

+ 9 - 0
ambari-agent/src/main/python/resource_management/core/__init__.py

@@ -0,0 +1,9 @@
+from resource_management.core.base import *
+from resource_management.core.environment import *
+from resource_management.core.exceptions import *
+from resource_management.core.providers import *
+from resource_management.core.resources import *
+from resource_management.core.source import *
+from resource_management.core.system import *
+
+__version__ = "0.4.1"

+ 2 - 2
ambari-agent/src/main/python/resource_management/base.py → ambari-agent/src/main/python/resource_management/core/base.py

@@ -4,8 +4,8 @@ __all__ = ["Resource", "ResourceArgument", "ForcedListArgument",
            "BooleanArgument"]
 
 import logging
-from resource_management.exceptions import Fail, InvalidArgument
-from resource_management.environment import Environment, Substitutor
+from resource_management.core.exceptions import Fail, InvalidArgument
+from resource_management.core.environment import Environment, Substitutor
 
 class ResourceArgument(object):
   def __init__(self, default=None, required=False, allow_override=False):

+ 5 - 5
ambari-agent/src/main/python/resource_management/environment.py → ambari-agent/src/main/python/resource_management/core/environment.py

@@ -8,11 +8,11 @@ import shutil
 import time
 from datetime import datetime
 
-from resource_management import shell
-from resource_management.exceptions import Fail
-from resource_management.providers import find_provider
-from resource_management.utils import AttributeDictionary, ParamsAttributeDictionary
-from resource_management.system import System
+from resource_management.core import shell
+from resource_management.core.exceptions import Fail
+from resource_management.core.providers import find_provider
+from resource_management.core.utils import AttributeDictionary, ParamsAttributeDictionary
+from resource_management.core.system import System
 from string import Template
 
 

+ 0 - 0
ambari-agent/src/main/python/resource_management/exceptions.py → ambari-agent/src/main/python/resource_management/core/exceptions.py


+ 69 - 0
ambari-agent/src/main/python/resource_management/core/providers/__init__.py

@@ -0,0 +1,69 @@
+__all__ = ["Provider", "find_provider"]
+
+import logging
+from resource_management.core.exceptions import Fail
+from resource_management.libraries.providers import PROVIDERS as LIBRARY_PROVIDERS
+
+
+class Provider(object):
+  def __init__(self, resource):
+    self.log = logging.getLogger("resource_management.provider")
+    self.resource = resource
+
+  def action_nothing(self):
+    pass
+
+  def __repr__(self):
+    return self.__unicode__()
+
+  def __unicode__(self):
+    return u"%s[%s]" % (self.__class__.__name__, self.resource)
+
+
+PROVIDERS = dict(
+  redhat=dict(
+    Package="resource_management.core.providers.package.yumrpm.YumProvider",
+  ),
+  centos=dict(
+    Package="resource_management.core.providers.package.yumrpm.YumProvider",
+  ),
+  suse=dict(
+    Package="resource_management.core.providers.package.zypper.ZypperProvider",
+  ),
+  fedora=dict(
+    Package="resource_management.core.providers.package.yumrpm.YumProvider",
+  ),
+  amazon=dict(
+    Package="resource_management.core.providers.package.yumrpm.YumProvider",
+  ),
+  default=dict(
+    File="resource_management.core.providers.system.FileProvider",
+    Directory="resource_management.core.providers.system.DirectoryProvider",
+    Link="resource_management.core.providers.system.LinkProvider",
+    Execute="resource_management.core.providers.system.ExecuteProvider",
+    Script="resource_management.core.providers.system.ScriptProvider",
+    Mount="resource_management.core.providers.mount.MountProvider",
+    User="resource_management.core.providers.accounts.UserProvider",
+    Group="resource_management.core.providers.accounts.GroupProvider",
+    Service="resource_management.core.providers.service.ServiceProvider",
+  ),
+)
+
+
+def find_provider(env, resource, class_path=None):
+  if not class_path:
+    providers = [PROVIDERS, LIBRARY_PROVIDERS]
+    for provider in providers:
+      if resource in provider[env.system.platform]:
+        class_path = provider[env.system.platform][resource]
+        break
+      if resource in provider["default"]:
+        class_path = provider["default"][resource]
+        break
+
+  try:
+    mod_path, class_name = class_path.rsplit('.', 1)
+  except ValueError:
+    raise Fail("Unable to find provider for %s as %s" % (resource, class_path))
+  mod = __import__(mod_path, {}, {}, [class_name])
+  return getattr(mod, class_name)

+ 2 - 2
ambari-agent/src/main/python/resource_management/providers/accounts.py → ambari-agent/src/main/python/resource_management/core/providers/accounts.py

@@ -2,8 +2,8 @@ from __future__ import with_statement
 
 import grp
 import pwd
-from resource_management import shell
-from resource_management.providers import Provider
+from resource_management.core import shell
+from resource_management.core.providers import Provider
 
 
 class UserProvider(Provider):

+ 2 - 2
ambari-agent/src/main/python/resource_management/providers/mount.py → ambari-agent/src/main/python/resource_management/core/providers/mount.py

@@ -2,8 +2,8 @@ from __future__ import with_statement
 
 import os
 import re
-from resource_management.base import Fail
-from resource_management.providers import Provider
+from resource_management.core.base import Fail
+from resource_management.core.providers import Provider
 
 
 class MountProvider(Provider):

+ 2 - 2
ambari-agent/src/main/python/resource_management/providers/package/__init__.py → ambari-agent/src/main/python/resource_management/core/providers/package/__init__.py

@@ -1,5 +1,5 @@
-from resource_management.base import Fail
-from resource_management.providers import Provider
+from resource_management.core.base import Fail
+from resource_management.core.providers import Provider
 
 
 class PackageProvider(Provider):

+ 2 - 2
ambari-agent/src/main/python/resource_management/providers/package/yumrpm.py → ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py

@@ -1,5 +1,5 @@
-from resource_management.providers.package import PackageProvider
-from resource_management import shell
+from resource_management.core.providers.package import PackageProvider
+from resource_management.core import shell
 
 INSTALL_CMD = "/usr/bin/yum -d 0 -e 0 -y install %s"
 REMOVE_CMD = "/usr/bin/yum -d 0 -e 0 -y erase %s"

+ 2 - 2
ambari-agent/src/main/python/resource_management/providers/package/zypper.py → ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py

@@ -1,5 +1,5 @@
-from resource_management.providers.package import PackageProvider
-from resource_management import shell
+from resource_management.core.providers.package import PackageProvider
+from resource_management.core import shell
 
 INSTALL_CMD = "/usr/bin/zypper --quiet install --auto-agree-with-licenses --no-confirm %s"
 REMOVE_CMD = "/usr/bin/zypper --quiet remove --no-confirm %s"

+ 3 - 3
ambari-agent/src/main/python/resource_management/providers/service.py → ambari-agent/src/main/python/resource_management/core/providers/service.py

@@ -1,8 +1,8 @@
 import os
 
-from resource_management import shell
-from resource_management.base import Fail
-from resource_management.providers import Provider
+from resource_management.core import shell
+from resource_management.core.base import Fail
+from resource_management.core.providers import Provider
 
 
 class ServiceProvider(Provider):

+ 3 - 3
ambari-agent/src/main/python/resource_management/providers/system.py → ambari-agent/src/main/python/resource_management/core/providers/system.py

@@ -5,9 +5,9 @@ import os
 import pwd
 import time
 import shutil
-from resource_management import shell
-from resource_management.base import Fail
-from resource_management.providers import Provider
+from resource_management.core import shell
+from resource_management.core.base import Fail
+from resource_management.core.providers import Provider
 
 
 def _coerce_uid(user):

+ 4 - 0
ambari-agent/src/main/python/resource_management/core/resources/__init__.py

@@ -0,0 +1,4 @@
+from resource_management.core.resources.accounts import *
+from resource_management.core.resources.packaging import *
+from resource_management.core.resources.service import *
+from resource_management.core.resources.system import *

+ 1 - 1
ambari-agent/src/main/python/resource_management/resources/accounts.py → ambari-agent/src/main/python/resource_management/core/resources/accounts.py

@@ -1,6 +1,6 @@
 __all__ = ["Group", "User"]
 
-from resource_management.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
+from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
 
 
 class Group(Resource):

+ 1 - 1
ambari-agent/src/main/python/resource_management/resources/packaging.py → ambari-agent/src/main/python/resource_management/core/resources/packaging.py

@@ -1,6 +1,6 @@
 __all__ = ["Package"]
 
-from resource_management.base import Resource, ForcedListArgument, ResourceArgument
+from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument
 
 
 class Package(Resource):

+ 1 - 1
ambari-agent/src/main/python/resource_management/resources/service.py → ambari-agent/src/main/python/resource_management/core/resources/service.py

@@ -1,6 +1,6 @@
 __all__ = ["Service"]
 
-from resource_management.base import Resource, ResourceArgument, BooleanArgument, ForcedListArgument
+from resource_management.core.base import Resource, ResourceArgument, ForcedListArgument
 
 
 class Service(Resource):

+ 1 - 1
ambari-agent/src/main/python/resource_management/resources/system.py → ambari-agent/src/main/python/resource_management/core/resources/system.py

@@ -1,6 +1,6 @@
 __all__ = ["File", "Directory", "Link", "Execute", "Script", "Mount"]
 
-from resource_management.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
+from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
 
 
 class File(Resource):

+ 0 - 0
ambari-agent/src/main/python/resource_management/script.py → ambari-agent/src/main/python/resource_management/core/script.py


+ 0 - 0
ambari-agent/src/main/python/resource_management/shell.py → ambari-agent/src/main/python/resource_management/core/shell.py


+ 1 - 2
ambari-agent/src/main/python/resource_management/source.py → ambari-agent/src/main/python/resource_management/core/source.py

@@ -1,5 +1,5 @@
 from __future__ import with_statement
-from resource_management import environment
+from resource_management.core import environment
 
 __all__ = ["Source", "Template", "StaticFile", "DownloadSource"]
 
@@ -7,7 +7,6 @@ import hashlib
 import os
 import urllib2
 import urlparse
-from resource_management.exceptions import Fail
 
 
 class Source(object):

+ 1 - 1
ambari-agent/src/main/python/resource_management/system.py → ambari-agent/src/main/python/resource_management/core/system.py

@@ -2,7 +2,7 @@ __all__ = ["System"]
 
 import os
 import sys
-from resource_management import shell
+from resource_management.core import shell
 from functools import wraps
 
 def lazy_property(undecorated):

+ 0 - 0
ambari-agent/src/main/python/resource_management/utils.py → ambari-agent/src/main/python/resource_management/core/utils.py


+ 2 - 0
ambari-agent/src/main/python/resource_management/libraries/__init__.py

@@ -0,0 +1,2 @@
+from resource_management.libraries.resources import *
+from resource_management.libraries.providers import *

+ 14 - 0
ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py

@@ -0,0 +1,14 @@
+PROVIDERS = dict(
+  redhat=dict(
+  ),
+  centos=dict(
+  ),
+  suse=dict(
+  ),
+  fedora=dict(
+  ),
+  amazon=dict(
+  ),
+  default=dict(
+  ),
+)

+ 0 - 0
ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py


+ 0 - 68
ambari-agent/src/main/python/resource_management/providers/__init__.py

@@ -1,68 +0,0 @@
-__all__ = ["Provider", "find_provider"]
-
-import logging
-from resource_management.exceptions import Fail
-
-
-class Provider(object):
-  def __init__(self, resource):
-    self.log = logging.getLogger("resource_management.provider")
-    self.resource = resource
-
-  def action_nothing(self):
-    pass
-
-  def __repr__(self):
-    return self.__unicode__()
-
-  def __unicode__(self):
-    return u"%s[%s]" % (self.__class__.__name__, self.resource)
-
-
-PROVIDERS = dict(
-  redhat=dict(
-    Package="resource_management.providers.package.yumrpm.YumProvider",
-  ),
-  centos=dict(
-    Package="resource_management.providers.package.yumrpm.YumProvider",
-  ),
-  suse=dict(
-    Package="resource_management.providers.package.zypper.ZypperProvider",
-  ),
-  fedora=dict(
-    Package="resource_management.providers.package.yumrpm.YumProvider",
-  ),
-  amazon=dict(
-    Package="resource_management.providers.package.yumrpm.YumProvider",
-  ),
-  default=dict(
-    File="resource_management.providers.system.FileProvider",
-    Directory="resource_management.providers.system.DirectoryProvider",
-    Link="resource_management.providers.system.LinkProvider",
-    Execute="resource_management.providers.system.ExecuteProvider",
-    Script="resource_management.providers.system.ScriptProvider",
-    Mount="resource_management.providers.mount.MountProvider",
-    User="resource_management.providers.accounts.UserProvider",
-    Group="resource_management.providers.accounts.GroupProvider",
-    Service="resource_management.providers.service.ServiceProvider",
-  ),
-)
-
-
-def find_provider(env, resource, class_path=None):
-  if not class_path:
-    try:
-      class_path = PROVIDERS[env.system.platform][resource]
-    except KeyError:
-      class_path = PROVIDERS["default"][resource]
-
-  if class_path.startswith('*'):
-    cookbook, classname = class_path[1:].split('.')
-    return getattr(env.cookbooks[cookbook], classname)
-
-  try:
-    mod_path, class_name = class_path.rsplit('.', 1)
-  except ValueError:
-    raise Fail("Unable to find provider for %s as %s" % (resource, class_path))
-  mod = __import__(mod_path, {}, {}, [class_name])
-  return getattr(mod, class_name)

+ 0 - 4
ambari-agent/src/main/python/resource_management/resources/__init__.py

@@ -1,4 +0,0 @@
-from resource_management.resources.accounts import *
-from resource_management.resources.packaging import *
-from resource_management.resources.service import *
-from resource_management.resources.system import *