[Checkins] SVN: zc.recipe.deployment/trunk/ - add etc-prefix and var-prefix to specify locations of those trees

Fred Drake cvs-admin at zope.org
Thu Mar 7 01:43:20 UTC 2013


Log message for revision 130054:
  - add etc-prefix and var-prefix to specify locations of those trees
  - consistently refuse to clobber the *-directory outputs

Changed:
  U   zc.recipe.deployment/trunk/CHANGES.txt
  U   zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py
  U   zc.recipe.deployment/trunk/src/zc/recipe/deployment/paths.txt

-=-
Modified: zc.recipe.deployment/trunk/CHANGES.txt
===================================================================
--- zc.recipe.deployment/trunk/CHANGES.txt	2013-03-07 00:18:49 UTC (rev 130053)
+++ zc.recipe.deployment/trunk/CHANGES.txt	2013-03-07 01:43:20 UTC (rev 130054)
@@ -4,7 +4,17 @@
 0.9.1 (unreleased)
 ==================
 
+- Absolutize paths generated based on ``prefix`` if ``prefix`` is
+  relative.
 
+- Add ``etc-prefix`` and ``var-prefix`` to specify new locations of
+  these entire trees; used instead of the previously untested ``etc``,
+  ``log`` and ``run`` settings.
+
+- Consistently refuse to clobber the *-directory outputs; join with
+  prefix if relative.
+
+
 0.9.0 (2011-11-21)
 ==================
 

Modified: zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py
===================================================================
--- zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py	2013-03-07 00:18:49 UTC (rev 130053)
+++ zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py	2013-03-07 01:43:20 UTC (rev 130054)
@@ -35,30 +35,37 @@
             options['name'] = name
 
         name = options['name']
-
-        prefix = os.path.join('/', options.get('prefix', '/'))
+        prefix = os.path.join('/', options.get('prefix') or '/')
         options['prefix'] = prefix
-        options['run-directory'] = os.path.join(
-            prefix, options.get('run', 'var/run'), name)
-        options['log-directory'] = os.path.join(
-            prefix, options.get('log', 'var/log'), name)
-        options['etc-directory'] = os.path.join(
-            prefix, options.get('etc', 'etc'), name)
-        etc = os.path.join(prefix, options.get('etc', 'etc'))
 
-        def directory(key, base, tail):
+        etc = os.path.join(
+            prefix, options.get('etc-prefix') or options.get('etc') or 'etc')
+
+        var = os.path.join(prefix, options.get('var-prefix') or 'var')
+        if options.get('var-prefix'):
+            log = os.path.join(var, "log")
+            run = os.path.join(var, "run")
+        else:
+            log = options.get('log') or 'var/log'
+            run = options.get('run') or 'var/run'
+
+        def directory(key, base, *tail):
             key += '-directory'
             setting = options.get(key)
             if setting:
                 path = os.path.join(prefix, setting)
             else:
-                path = os.path.join(prefix, base, tail)
+                path = os.path.join(prefix, base, *tail)
             options[key] = path
 
-        directory("crontab", etc, "cron.d")
-        directory("logrotate", etc, "logrotate.d")
-        directory("rc", etc, "init.d")
+        directory('crontab', etc, 'cron.d')
+        directory('etc', etc, name)
+        directory('logrotate', etc, 'logrotate.d')
+        directory('rc', etc, 'init.d')
 
+        directory('log', log, name)
+        directory('run', run, name)
+
     def install(self):
         options = self.options
         run_user = options['user']

Modified: zc.recipe.deployment/trunk/src/zc/recipe/deployment/paths.txt
===================================================================
--- zc.recipe.deployment/trunk/src/zc/recipe/deployment/paths.txt	2013-03-07 00:18:49 UTC (rev 130053)
+++ zc.recipe.deployment/trunk/src/zc/recipe/deployment/paths.txt	2013-03-07 01:43:20 UTC (rev 130054)
@@ -2,6 +2,13 @@
 Path computations
 =================
 
+.. warning::
+
+   This document describes the behavior of the previously untested
+   settings ``etc``, ``log``, and ``run``.  This is done to ensure we
+   don't break existing uses that do not use the newer ``etc-prefix``
+   and ``var-prefix`` settings, but the later are recommended.
+
     >>> import pprint
     >>> import zc.recipe.deployment
 
@@ -94,26 +101,28 @@
      'rc-directory': '/usr/local/antsy/init.d',
      'run-directory': '/usr/local/var/run/myapp'}
 
-The ``crontab-directory``, ``logrotate-directory`` and ``rc-directory``
-settings can be specified directly, and override thei computations
-entirely:
+Output options ending in '-directory' can be specified directly; these
+values will be retained instead of being clobbered by computed values:
 
     >>> compute({"crontab-directory": "/my-crontabs",
     ...          "etc": "antsy",
+    ...          "etc-directory": "/apps/config",
     ...          "log": "var/someplace",
+    ...          "log-directory": "/big-disk/full-of-logs",
     ...          "logrotate-directory": "/my-logrotations",
     ...          "prefix": "/usr/local",
-    ...          "rc-directory": "/my-rcs"})
+    ...          "rc-directory": "/my-rcs",
+    ...          "run-directory": "/variable/run-away"})
     {'crontab-directory': '/my-crontabs',
      'etc': 'antsy',
-     'etc-directory': '/usr/local/antsy/myapp',
+     'etc-directory': '/apps/config',
      'log': 'var/someplace',
-     'log-directory': '/usr/local/var/someplace/myapp',
+     'log-directory': '/big-disk/full-of-logs',
      'logrotate-directory': '/my-logrotations',
      'name': 'myapp',
      'prefix': '/usr/local',
      'rc-directory': '/my-rcs',
-     'run-directory': '/usr/local/var/run/myapp'}
+     'run-directory': '/variable/run-away'}
 
 
 Paths are absolute
@@ -148,3 +157,93 @@
      'prefix': '/my/prefix',
      'rc-directory': '/my/prefix/my-rcs',
      'run-directory': '/my/prefix/var/run/myapp'}
+
+
+Specifying sub-tree prefixes
+----------------------------
+
+Two distinct sub-trees are supported: the 'etc' tree and the 'var'
+tree.  These can be located in the directory hierarchy using the
+``etc-prefix`` and ``var-prefix`` settings.
+
+    >>> compute({"etc-prefix": "/config"})
+    {'crontab-directory': '/config/cron.d',
+     'etc-directory': '/config/myapp',
+     'etc-prefix': '/config',
+     'log-directory': '/var/log/myapp',
+     'logrotate-directory': '/config/logrotate.d',
+     'name': 'myapp',
+     'prefix': '/',
+     'rc-directory': '/config/init.d',
+     'run-directory': '/var/run/myapp'}
+
+    >>> compute({"var-prefix": "/giant-disk"})
+    {'crontab-directory': '/etc/cron.d',
+     'etc-directory': '/etc/myapp',
+     'log-directory': '/giant-disk/log/myapp',
+     'logrotate-directory': '/etc/logrotate.d',
+     'name': 'myapp',
+     'prefix': '/',
+     'rc-directory': '/etc/init.d',
+     'run-directory': '/giant-disk/run/myapp',
+     'var-prefix': '/giant-disk'}
+
+These will be combined with the prefix if they are relative:
+
+    >>> compute({"etc-prefix": "config",
+    ...          "prefix": "/alt"})
+    {'crontab-directory': '/alt/config/cron.d',
+     'etc-directory': '/alt/config/myapp',
+     'etc-prefix': 'config',
+     'log-directory': '/alt/var/log/myapp',
+     'logrotate-directory': '/alt/config/logrotate.d',
+     'name': 'myapp',
+     'prefix': '/alt',
+     'rc-directory': '/alt/config/init.d',
+     'run-directory': '/alt/var/run/myapp'}
+
+    >>> compute({"var-prefix": "giant-disk",
+    ...          "prefix": "/alt"})
+    {'crontab-directory': '/alt/etc/cron.d',
+     'etc-directory': '/alt/etc/myapp',
+     'log-directory': '/alt/giant-disk/log/myapp',
+     'logrotate-directory': '/alt/etc/logrotate.d',
+     'name': 'myapp',
+     'prefix': '/alt',
+     'rc-directory': '/alt/etc/init.d',
+     'run-directory': '/alt/giant-disk/run/myapp',
+     'var-prefix': 'giant-disk'}
+
+If ``etc-prefix`` and the (legacy) ``etc`` setting are both provided,
+``etc-prefix`` wins:
+
+    >>> compute({"etc": "/old",
+    ...          "etc-prefix": "/config"})
+    {'crontab-directory': '/config/cron.d',
+     'etc': '/old',
+     'etc-directory': '/config/myapp',
+     'etc-prefix': '/config',
+     'log-directory': '/var/log/myapp',
+     'logrotate-directory': '/config/logrotate.d',
+     'name': 'myapp',
+     'prefix': '/',
+     'rc-directory': '/config/init.d',
+     'run-directory': '/var/run/myapp'}
+
+If ``var-prefix`` is used in conjunction with the (legacy) ``log`` and
+``run`` settings, ``var-prefix`` wins:
+
+    >>> compute({"log": "/log/someplace",
+    ...          "run": "/run/someplace",
+    ...          "var-prefix": "/big-disk"})
+    {'crontab-directory': '/etc/cron.d',
+     'etc-directory': '/etc/myapp',
+     'log': '/log/someplace',
+     'log-directory': '/big-disk/log/myapp',
+     'logrotate-directory': '/etc/logrotate.d',
+     'name': 'myapp',
+     'prefix': '/',
+     'rc-directory': '/etc/init.d',
+     'run': '/run/someplace',
+     'run-directory': '/big-disk/run/myapp',
+     'var-prefix': '/big-disk'}



More information about the checkins mailing list