forked from ungleich-public/cdist
Merge branch 'master' into type__jail_boolean
This commit is contained in:
commit
bb19902581
8 changed files with 53 additions and 13 deletions
|
@ -26,7 +26,7 @@ name="$__object_id"
|
||||||
. /etc/lsb-release
|
. /etc/lsb-release
|
||||||
|
|
||||||
repo_name="${name#ppa:}"
|
repo_name="${name#ppa:}"
|
||||||
repo_file_name="$(echo "$repo_name" | sed "s:\/:\-:")-${DISTRIB_CODENAME}.list"
|
repo_file_name="$(echo "$repo_name" | sed -e "s|[/:]|-|" -e "s|\.|_|")-${DISTRIB_CODENAME}.list"
|
||||||
|
|
||||||
[ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \
|
[ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \
|
||||||
&& echo present || echo absent
|
&& echo present || echo absent
|
||||||
|
|
|
@ -36,7 +36,7 @@ __rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill --state present
|
||||||
|
|
||||||
# Do the same and also make ruby-1.9.3-p0@myset the default gemset
|
# Do the same and also make ruby-1.9.3-p0@myset the default gemset
|
||||||
__rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill \
|
__rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill \
|
||||||
--state present --default yes
|
--state present --default
|
||||||
|
|
||||||
# Remove it
|
# Remove it
|
||||||
__rvm_ruby rails --gemset ruby-1.9.3-p0@myset --user bill --state absent
|
__rvm_ruby rails --gemset ruby-1.9.3-p0@myset --user bill --state absent
|
||||||
|
|
|
@ -186,6 +186,8 @@ class CdistObject(object):
|
||||||
return os.path.join(self.path, "explorer")
|
return os.path.join(self.path, "explorer")
|
||||||
|
|
||||||
requirements = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'require'))
|
requirements = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'require'))
|
||||||
|
before = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'before'))
|
||||||
|
after = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'after'))
|
||||||
autorequire = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'autorequire'))
|
autorequire = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'autorequire'))
|
||||||
parameters = fsproperty.DirectoryDictProperty(lambda obj: os.path.join(obj.base_path, obj.parameter_path))
|
parameters = fsproperty.DirectoryDictProperty(lambda obj: os.path.join(obj.base_path, obj.parameter_path))
|
||||||
explorers = fsproperty.DirectoryDictProperty(lambda obj: os.path.join(obj.base_path, obj.explorer_path))
|
explorers = fsproperty.DirectoryDictProperty(lambda obj: os.path.join(obj.base_path, obj.explorer_path))
|
||||||
|
|
|
@ -23,13 +23,14 @@
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import warnings
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import cdist
|
import cdist
|
||||||
from cdist import core
|
from cdist import core
|
||||||
|
|
||||||
class Emulator(object):
|
class Emulator(object):
|
||||||
def __init__(self, argv, stdin=sys.stdin, env=os.environ):
|
def __init__(self, argv, stdin=sys.stdin.buffer, env=os.environ):
|
||||||
self.argv = argv
|
self.argv = argv
|
||||||
self.stdin = stdin
|
self.stdin = stdin
|
||||||
self.env = env
|
self.env = env
|
||||||
|
@ -92,8 +93,12 @@ class Emulator(object):
|
||||||
|
|
||||||
def commandline(self):
|
def commandline(self):
|
||||||
"""Parse command line"""
|
"""Parse command line"""
|
||||||
|
self.meta_parameters = dict.fromkeys(('after', 'before'))
|
||||||
|
meta_parser = argparse.ArgumentParser(add_help=False)
|
||||||
|
for meta_parameter in self.meta_parameters.keys():
|
||||||
|
meta_parser.add_argument('--%s' % meta_parameter, action='append', required=False)
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(add_help=False, argument_default=argparse.SUPPRESS)
|
parser = argparse.ArgumentParser(add_help=False, parents=[meta_parser], argument_default=argparse.SUPPRESS)
|
||||||
|
|
||||||
for parameter in self.cdist_type.required_parameters:
|
for parameter in self.cdist_type.required_parameters:
|
||||||
argument = "--" + parameter
|
argument = "--" + parameter
|
||||||
|
@ -119,6 +124,11 @@ class Emulator(object):
|
||||||
self.args = parser.parse_args(self.argv[1:])
|
self.args = parser.parse_args(self.argv[1:])
|
||||||
self.log.debug('Args: %s' % self.args)
|
self.log.debug('Args: %s' % self.args)
|
||||||
|
|
||||||
|
# Handle meta parameters
|
||||||
|
for meta_parameter in self.meta_parameters.keys():
|
||||||
|
if meta_parameter in self.args:
|
||||||
|
self.meta_parameters[meta_parameter] = getattr(self.args, meta_parameter)
|
||||||
|
delattr(self.args, meta_parameter)
|
||||||
|
|
||||||
def setup_object(self):
|
def setup_object(self):
|
||||||
# Setup object_id - FIXME: unset / do not setup anymore!
|
# Setup object_id - FIXME: unset / do not setup anymore!
|
||||||
|
@ -151,6 +161,10 @@ class Emulator(object):
|
||||||
# Record / Append source
|
# Record / Append source
|
||||||
self.cdist_object.source.append(self.object_source)
|
self.cdist_object.source.append(self.object_source)
|
||||||
|
|
||||||
|
chunk_size = 65536
|
||||||
|
def _read_stdin(self):
|
||||||
|
return self.stdin.read(self.chunk_size)
|
||||||
|
|
||||||
def save_stdin(self):
|
def save_stdin(self):
|
||||||
"""If something is written to stdin, save it in the object as
|
"""If something is written to stdin, save it in the object as
|
||||||
$__object/stdin so it can be accessed in manifest and gencode-*
|
$__object/stdin so it can be accessed in manifest and gencode-*
|
||||||
|
@ -160,19 +174,29 @@ class Emulator(object):
|
||||||
try:
|
try:
|
||||||
# go directly to file instead of using CdistObject's api
|
# go directly to file instead of using CdistObject's api
|
||||||
# as that does not support streaming
|
# as that does not support streaming
|
||||||
# FIXME: no streaming needed anymore - use a raw file (not yet there?)
|
|
||||||
path = os.path.join(self.cdist_object.absolute_path, 'stdin')
|
path = os.path.join(self.cdist_object.absolute_path, 'stdin')
|
||||||
with open(path, 'w') as fd:
|
with open(path, 'wb') as fd:
|
||||||
fd.write(self.stdin.read())
|
chunk = self._read_stdin()
|
||||||
|
while chunk:
|
||||||
|
fd.write(chunk)
|
||||||
|
chunk = self._read_stdin()
|
||||||
except EnvironmentError as e:
|
except EnvironmentError as e:
|
||||||
raise cdist.Error('Failed to read from stdin: %s' % e)
|
raise cdist.Error('Failed to read from stdin: %s' % e)
|
||||||
|
|
||||||
def record_requirements(self):
|
def record_requirements(self):
|
||||||
"""record requirements"""
|
"""record requirements"""
|
||||||
|
for key in ('before', 'after'):
|
||||||
|
if key in self.meta_parameters and self.meta_parameters[key]:
|
||||||
|
for value in self.meta_parameters[key]:
|
||||||
|
self.log.debug("Recording requirement: %s %s %s", self.cdist_object.name, key, value)
|
||||||
|
dependency_list = getattr(self.cdist_object, key)
|
||||||
|
# append to the object.after or object.before lists
|
||||||
|
dependency_list.append(value)
|
||||||
|
|
||||||
if "require" in self.env:
|
if "require" in self.env:
|
||||||
|
warnings.warn("The 'require' envrionment variable is deprecated. Use the --before and --after meta parameters to define dependencies.", category=PendingDeprecationWarning, stacklevel=2)
|
||||||
|
|
||||||
requirements = self.env['require']
|
requirements = self.env['require']
|
||||||
self.log.debug("reqs = " + requirements)
|
|
||||||
for requirement in requirements.split(" "):
|
for requirement in requirements.split(" "):
|
||||||
# Ignore empty fields - probably the only field anyway
|
# Ignore empty fields - probably the only field anyway
|
||||||
if len(requirement) == 0: continue
|
if len(requirement) == 0: continue
|
||||||
|
@ -181,11 +205,10 @@ class Emulator(object):
|
||||||
cdist_object = self.cdist_object.object_from_name(requirement)
|
cdist_object = self.cdist_object.object_from_name(requirement)
|
||||||
|
|
||||||
self.log.debug("Recording requirement: " + requirement)
|
self.log.debug("Recording requirement: " + requirement)
|
||||||
|
|
||||||
# Save the sanitised version, not the user supplied one
|
# Save the sanitised version, not the user supplied one
|
||||||
# (__file//bar => __file/bar)
|
# (__file//bar => __file/bar)
|
||||||
# This ensures pattern matching is done against sanitised list
|
# This ensures pattern matching is done against sanitised list
|
||||||
self.cdist_object.requirements.append(cdist_object.name)
|
self.cdist_object.after.append(cdist_object.name)
|
||||||
|
|
||||||
def record_auto_requirements(self):
|
def record_auto_requirements(self):
|
||||||
"""An object shall automatically depend on all objects that it defined in it's type manifest.
|
"""An object shall automatically depend on all objects that it defined in it's type manifest.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
# 2011-2012 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -109,10 +109,21 @@ class DependencyResolver(object):
|
||||||
raise RequirementNotFoundError(pattern)
|
raise RequirementNotFoundError(pattern)
|
||||||
|
|
||||||
def _preprocess_requirements(self):
|
def _preprocess_requirements(self):
|
||||||
"""Find all autorequire dependencies and merge them to be just requirements
|
"""Find all before, after and autorequire dependencies and merge them
|
||||||
for further processing.
|
to be just requirements for further processing.
|
||||||
"""
|
"""
|
||||||
for cdist_object in self.objects.values():
|
for cdist_object in self.objects.values():
|
||||||
|
if cdist_object.after:
|
||||||
|
cdist_object.requirements.extend(cdist_object.after)
|
||||||
|
# As we changed the object on disc, we have to ensure it is not
|
||||||
|
# preprocessed again if someone would call us multiple times.
|
||||||
|
cdist_object.after = []
|
||||||
|
if cdist_object.before:
|
||||||
|
for other_object in self.find_requirements_by_name(cdist_object.before):
|
||||||
|
other_object.requirements.append(cdist_object.name)
|
||||||
|
# As we changed the object on disc, we have to ensure it is not
|
||||||
|
# preprocessed again if someone would call us multiple times.
|
||||||
|
cdist_object.before = []
|
||||||
if cdist_object.autorequire:
|
if cdist_object.autorequire:
|
||||||
# The objects (children) that this cdist_object (parent) defined
|
# The objects (children) that this cdist_object (parent) defined
|
||||||
# in it's type manifest shall inherit all explicit requirements
|
# in it's type manifest shall inherit all explicit requirements
|
||||||
|
|
|
@ -87,6 +87,7 @@ class ObjectTestCase(test.CdistTestCase):
|
||||||
self.cdist_object.code_local = ''
|
self.cdist_object.code_local = ''
|
||||||
self.cdist_object.code_remote = ''
|
self.cdist_object.code_remote = ''
|
||||||
self.cdist_object.state = ''
|
self.cdist_object.state = ''
|
||||||
|
self.cdist_object.requirements = []
|
||||||
|
|
||||||
def test_name(self):
|
def test_name(self):
|
||||||
self.assertEqual(self.cdist_object.name, '__third/moon')
|
self.assertEqual(self.cdist_object.name, '__third/moon')
|
||||||
|
|
|
@ -9,6 +9,8 @@ next:
|
||||||
* Type __rvm_gemset: Change parameter "default" to be boolean
|
* Type __rvm_gemset: Change parameter "default" to be boolean
|
||||||
* New Type: __user_groups (Steven Armstrong)
|
* New Type: __user_groups (Steven Armstrong)
|
||||||
* Type __user: Remove --groups support (now provided by __user_groups)
|
* Type __user: Remove --groups support (now provided by __user_groups)
|
||||||
|
* Type __apt_ppa: Bugfix: Installeded ppa detection (Steven Armstrong)
|
||||||
|
* Core: Support for --after and --before parameters
|
||||||
|
|
||||||
2.1.0pre8: 2012-11-15
|
2.1.0pre8: 2012-11-15
|
||||||
* Type cleanup: __apt_ppa, __apt_ppa_update_index, __file,
|
* Type cleanup: __apt_ppa, __apt_ppa_update_index, __file,
|
||||||
|
|
|
@ -42,6 +42,7 @@ To upgrade to the lastet version do
|
||||||
* The types **\_\_autofs**, **\_\_autofs_map** and **\_\_autofs_reload** have been removed
|
* The types **\_\_autofs**, **\_\_autofs_map** and **\_\_autofs_reload** have been removed
|
||||||
(no maintainer, no users)
|
(no maintainer, no users)
|
||||||
* Type **\_\_user**: Parameter --groups removed (use the new \_\_user_groups type)
|
* Type **\_\_user**: Parameter --groups removed (use the new \_\_user_groups type)
|
||||||
|
* require="" is deprecated: Use --after and --before as parameters instead
|
||||||
|
|
||||||
### Updating from 1.7 to 2.0
|
### Updating from 1.7 to 2.0
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue