forked from ungleich-public/cdist
		
	Merge remote-tracking branch 'steven/__cron'
This commit is contained in:
		
				commit
				
					
						e2349426ab
					
				
			
		
					 9 changed files with 280 additions and 16 deletions
				
			
		
							
								
								
									
										39
									
								
								conf/type/__cron/explorer/entry
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								conf/type/__cron/explorer/entry
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					name="$__object_id"
 | 
				
			||||||
 | 
					user="$(cat "$__object/parameter/user")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					prefix="#cdist:__cron/$name"
 | 
				
			||||||
 | 
					suffix="#/cdist:__cron/$name"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					crontab -u $user -l | awk -v prefix="$prefix" -v suffix="$suffix" '
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if (index($0,prefix)) {
 | 
				
			||||||
 | 
					      triggered=1
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   if (triggered) {
 | 
				
			||||||
 | 
					      if (index($0,suffix)) {
 | 
				
			||||||
 | 
					            triggered=0
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      print
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					'
 | 
				
			||||||
							
								
								
									
										63
									
								
								conf/type/__cron/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								conf/type/__cron/gencode-remote
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,63 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					user="$(cat "$__object/parameter/user")"
 | 
				
			||||||
 | 
					state_should="$(cat "$__object/parameter/state")"
 | 
				
			||||||
 | 
					state_is=$(cmp --quiet "$__object/parameter/entry" "$__object/explorer/entry" \
 | 
				
			||||||
 | 
					   && echo present \
 | 
				
			||||||
 | 
					   || echo absent
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$state_is" != "$state_should" ]; then
 | 
				
			||||||
 | 
					   case "$state_should" in
 | 
				
			||||||
 | 
					      present)
 | 
				
			||||||
 | 
					         cat << DONE
 | 
				
			||||||
 | 
					tmp=\$(mktemp)
 | 
				
			||||||
 | 
					crontab -u $user -l > \$tmp
 | 
				
			||||||
 | 
					cat >> \$tmp << EOC
 | 
				
			||||||
 | 
					$(cat "$__object/parameter/entry")"
 | 
				
			||||||
 | 
					EOC
 | 
				
			||||||
 | 
					crontab -u $user \$tmp
 | 
				
			||||||
 | 
					rm \$tmp
 | 
				
			||||||
 | 
					DONE
 | 
				
			||||||
 | 
					      ;;
 | 
				
			||||||
 | 
					      absent)
 | 
				
			||||||
 | 
					         # defined in type manifest
 | 
				
			||||||
 | 
					         prefix="$(cat "$__object/parameter/prefix")"
 | 
				
			||||||
 | 
					         suffix="$(cat "$__object/parameter/suffix")"
 | 
				
			||||||
 | 
					         cat << DONE
 | 
				
			||||||
 | 
					crontab -u $user -l | awk -v prefix="$prefix" -v suffix="$suffix" '
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   if (index(\$0,prefix)) {
 | 
				
			||||||
 | 
					      triggered=1
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   if (triggered) {
 | 
				
			||||||
 | 
					      if (index(\$0,suffix)) {
 | 
				
			||||||
 | 
					            triggered=0
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   } else {
 | 
				
			||||||
 | 
					      print
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					' | crontab -u $user -
 | 
				
			||||||
 | 
					DONE
 | 
				
			||||||
 | 
					      ;;
 | 
				
			||||||
 | 
					   esac
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
							
								
								
									
										61
									
								
								conf/type/__cron/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								conf/type/__cron/man.text
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					cdist-type__cron(7)
 | 
				
			||||||
 | 
					===================
 | 
				
			||||||
 | 
					Steven Armstrong <steven-cdist--@--armstrong.cc>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NAME
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					cdist-type__cron - installs and manages cron jobs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DESCRIPTION
 | 
				
			||||||
 | 
					-----------
 | 
				
			||||||
 | 
					This cdist type allows you to manage entries in a users crontab.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REQUIRED PARAMETERS
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					user::
 | 
				
			||||||
 | 
					   The user who's crontab is edited
 | 
				
			||||||
 | 
					command::
 | 
				
			||||||
 | 
					   The command to run.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIONAL PARAMETERS
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					state::
 | 
				
			||||||
 | 
					   Either present or absent. Defaults to present.
 | 
				
			||||||
 | 
					minute::
 | 
				
			||||||
 | 
					   See crontab(5). Defaults to *
 | 
				
			||||||
 | 
					hour::
 | 
				
			||||||
 | 
					   See crontab(5). Defaults to *
 | 
				
			||||||
 | 
					day_of_month::
 | 
				
			||||||
 | 
					   See crontab(5). Defaults to *
 | 
				
			||||||
 | 
					month::
 | 
				
			||||||
 | 
					   See crontab(5). Defaults to *
 | 
				
			||||||
 | 
					day_of_week::
 | 
				
			||||||
 | 
					   See crontab(5). Defaults to *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXAMPLES
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# add cronjob
 | 
				
			||||||
 | 
					__cron some-id --user root --command "/path/to/script"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# remove cronjob
 | 
				
			||||||
 | 
					__cron some-id --user root --command "/path/to/script" --state absent
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SEE ALSO
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					- cdist-type(7)
 | 
				
			||||||
 | 
					- crontab(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPYING
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					Copyright \(C) 2011 Steven Armstrong. Free use of this software is
 | 
				
			||||||
 | 
					granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
				
			||||||
							
								
								
									
										66
									
								
								conf/type/__cron/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								conf/type/__cron/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,66 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					name="$__object_id"
 | 
				
			||||||
 | 
					user="$(cat "$__object/parameter/user")"
 | 
				
			||||||
 | 
					command="$(cat "$__object/parameter/command")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# set defaults
 | 
				
			||||||
 | 
					if [ ! -f "$__object/parameter/state" ]; then
 | 
				
			||||||
 | 
					   echo "present" > "$__object/parameter/state"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/minute" ]; then
 | 
				
			||||||
 | 
					   minute="$(cat "$__object/parameter/minute")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   minute="*"
 | 
				
			||||||
 | 
					   echo "$minute" > "$__object/parameter/minute"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/hour" ]; then
 | 
				
			||||||
 | 
					   hour="$(cat "$__object/parameter/hour")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   hour="*"
 | 
				
			||||||
 | 
					   echo "$hour" > "$__object/parameter/hour"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/day_of_month" ]; then
 | 
				
			||||||
 | 
					   day_of_month="$(cat "$__object/parameter/day_of_month")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   day_of_month="*"
 | 
				
			||||||
 | 
					   echo "$day_of_month" > "$__object/parameter/day_of_month"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/month" ]; then
 | 
				
			||||||
 | 
					   month="$(cat "$__object/parameter/month")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   month="*"
 | 
				
			||||||
 | 
					   echo "$month" > "$__object/parameter/month"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/day_of_week" ]; then
 | 
				
			||||||
 | 
					   day_of_week="$(cat "$__object/parameter/day_of_week")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   day_of_week="*"
 | 
				
			||||||
 | 
					   echo "$day_of_week" > "$__object/parameter/day_of_week"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NOTE: if changed, also change in explorers
 | 
				
			||||||
 | 
					prefix="#cdist:__cron/$name"
 | 
				
			||||||
 | 
					suffix="#/cdist:__cron/$name"
 | 
				
			||||||
 | 
					echo "$prefix" | tee "$__object/parameter/prefix" > "$__object/parameter/entry"
 | 
				
			||||||
 | 
					echo "$minute $hour $day_of_month $month $day_of_week $command" >> "$__object/parameter/entry"
 | 
				
			||||||
 | 
					echo "$suffix" | tee "$__object/parameter/suffix" >> "$__object/parameter/entry"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										6
									
								
								conf/type/__cron/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								conf/type/__cron/parameter/optional
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					state
 | 
				
			||||||
 | 
					minute
 | 
				
			||||||
 | 
					hour
 | 
				
			||||||
 | 
					day_of_month
 | 
				
			||||||
 | 
					month
 | 
				
			||||||
 | 
					day_of_week
 | 
				
			||||||
							
								
								
									
										2
									
								
								conf/type/__cron/parameter/required
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								conf/type/__cron/parameter/required
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					user
 | 
				
			||||||
 | 
					command
 | 
				
			||||||
| 
						 | 
					@ -60,9 +60,7 @@ class Object(object):
 | 
				
			||||||
    def list_objects(cls, object_base_path, type_base_path):
 | 
					    def list_objects(cls, object_base_path, type_base_path):
 | 
				
			||||||
        """Return a list of object instances"""
 | 
					        """Return a list of object instances"""
 | 
				
			||||||
        for object_name in cls.list_object_names(object_base_path):
 | 
					        for object_name in cls.list_object_names(object_base_path):
 | 
				
			||||||
            type_name = object_name.split(os.sep)[0]
 | 
					            type_name, object_id = cls.split_name(object_name)
 | 
				
			||||||
            # FIXME: allow object without object_id? e.g. for singleton
 | 
					 | 
				
			||||||
            object_id = os.sep.join(object_name.split(os.sep)[1:])
 | 
					 | 
				
			||||||
            yield cls(cdist.core.Type(type_base_path, type_name), object_base_path, object_id=object_id)
 | 
					            yield cls(cdist.core.Type(type_base_path, type_name), object_base_path, object_id=object_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
| 
						 | 
					@ -77,20 +75,26 @@ class Object(object):
 | 
				
			||||||
            if DOT_CDIST in dirs:
 | 
					            if DOT_CDIST in dirs:
 | 
				
			||||||
                yield os.path.relpath(path, object_base_path)
 | 
					                yield os.path.relpath(path, object_base_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def object_from_name(self, object_name):
 | 
					    @staticmethod
 | 
				
			||||||
        """Convenience method for creating an object instance from an object name.
 | 
					    def split_name(object_name):
 | 
				
			||||||
 | 
					        """split_name('__type_name/the/object_id') -> ('__type_name', 'the/object_id')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mainly intended to create objects when resolving requirements.
 | 
					        Split the given object name into it's type and object_id parts.
 | 
				
			||||||
 | 
					 | 
				
			||||||
        e.g:
 | 
					 | 
				
			||||||
            <Object __foo/bar>.object_from_name('__other/object') -> <Object __other/object>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        type_path = self.type.base_path
 | 
					 | 
				
			||||||
        object_path = self.base_path
 | 
					 | 
				
			||||||
        type_name = object_name.split(os.sep)[0]
 | 
					        type_name = object_name.split(os.sep)[0]
 | 
				
			||||||
 | 
					        # FIXME: allow object without object_id? e.g. for singleton
 | 
				
			||||||
        object_id = os.sep.join(object_name.split(os.sep)[1:])
 | 
					        object_id = os.sep.join(object_name.split(os.sep)[1:])
 | 
				
			||||||
        return self.__class__(self.type.__class__(type_path, type_name), object_path, object_id=object_id)
 | 
					        return type_name, object_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def join_name(type_name, object_id):
 | 
				
			||||||
 | 
					        """join_name('__type_name', 'the/object_id') -> __type_name/the/object_id'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Join the given type_name and object_id into an object name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        return os.path.join(type_name, object_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, cdist_type, base_path, object_id=None):
 | 
					    def __init__(self, cdist_type, base_path, object_id=None):
 | 
				
			||||||
        if object_id:
 | 
					        if object_id:
 | 
				
			||||||
| 
						 | 
					@ -101,7 +105,7 @@ class Object(object):
 | 
				
			||||||
        self.type = cdist_type # instance of Type
 | 
					        self.type = cdist_type # instance of Type
 | 
				
			||||||
        self.base_path = base_path
 | 
					        self.base_path = base_path
 | 
				
			||||||
        self.object_id = object_id
 | 
					        self.object_id = object_id
 | 
				
			||||||
        self.name = os.path.join(self.type.name, self.object_id)
 | 
					        self.name = self.join_name(self.type.name, self.object_id)
 | 
				
			||||||
        self.path = os.path.join(self.type.path, self.object_id, DOT_CDIST)
 | 
					        self.path = os.path.join(self.type.path, self.object_id, DOT_CDIST)
 | 
				
			||||||
        self.absolute_path = os.path.join(self.base_path, self.path)
 | 
					        self.absolute_path = os.path.join(self.base_path, self.path)
 | 
				
			||||||
        self.code_local_path = os.path.join(self.path, "code-local")
 | 
					        self.code_local_path = os.path.join(self.path, "code-local")
 | 
				
			||||||
| 
						 | 
					@ -115,6 +119,23 @@ class Object(object):
 | 
				
			||||||
        """define equality as 'attributes are the same'"""
 | 
					        """define equality as 'attributes are the same'"""
 | 
				
			||||||
        return self.__dict__ == other.__dict__
 | 
					        return self.__dict__ == other.__dict__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __lt__(self, other):
 | 
				
			||||||
 | 
					        return isinstance(other, self.__class__) and self.name < other.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def object_from_name(self, object_name):
 | 
				
			||||||
 | 
					        """Convenience method for creating an object instance from an object name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Mainly intended to create objects when resolving requirements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        e.g:
 | 
				
			||||||
 | 
					            <Object __foo/bar>.object_from_name('__other/object') -> <Object __other/object>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        type_path = self.type.base_path
 | 
				
			||||||
 | 
					        object_path = self.base_path
 | 
				
			||||||
 | 
					        type_name, object_id = self.split_name(object_name)
 | 
				
			||||||
 | 
					        return self.__class__(self.type.__class__(type_path, type_name), object_path, object_id=object_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # FIXME: still needed?
 | 
					    # FIXME: still needed?
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def explorer_path(self):
 | 
					    def explorer_path(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,6 +86,12 @@ class Type(object):
 | 
				
			||||||
    def __repr__(self):
 | 
					    def __repr__(self):
 | 
				
			||||||
        return '<Type %s>' % self.name
 | 
					        return '<Type %s>' % self.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __eq__(self, other):
 | 
				
			||||||
 | 
					        return isinstance(other, self.__class__) and self.name == other.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __lt__(self, other):
 | 
				
			||||||
 | 
					        return isinstance(other, self.__class__) and self.name < other.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def is_singleton(self):
 | 
					    def is_singleton(self):
 | 
				
			||||||
        """Check whether a type is a singleton."""
 | 
					        """Check whether a type is a singleton."""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ class ExplorerClassTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.explorer.transfer_global_explorers()
 | 
					        self.explorer.transfer_global_explorers()
 | 
				
			||||||
        source = self.local.global_explorer_path
 | 
					        source = self.local.global_explorer_path
 | 
				
			||||||
        destination = self.remote.global_explorer_path
 | 
					        destination = self.remote.global_explorer_path
 | 
				
			||||||
        self.assertEqual(os.listdir(source), os.listdir(destination))
 | 
					        self.assertEqual(sorted(os.listdir(source)), sorted(os.listdir(destination)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_run_global_explorer(self):
 | 
					    def test_run_global_explorer(self):
 | 
				
			||||||
        self.explorer.transfer_global_explorers()
 | 
					        self.explorer.transfer_global_explorers()
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ class ExplorerClassTestCase(test.CdistTestCase):
 | 
				
			||||||
    def test_run_global_explorers(self):
 | 
					    def test_run_global_explorers(self):
 | 
				
			||||||
        out_path = self.mkdtemp()
 | 
					        out_path = self.mkdtemp()
 | 
				
			||||||
        self.explorer.run_global_explorers(out_path)
 | 
					        self.explorer.run_global_explorers(out_path)
 | 
				
			||||||
        self.assertEqual(os.listdir(out_path), ['foobar', 'global'])
 | 
					        self.assertEqual(sorted(os.listdir(out_path)), sorted(['foobar', 'global']))
 | 
				
			||||||
        shutil.rmtree(out_path)
 | 
					        shutil.rmtree(out_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_list_type_explorer_names(self):
 | 
					    def test_list_type_explorer_names(self):
 | 
				
			||||||
| 
						 | 
					@ -116,7 +116,7 @@ class ExplorerClassTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.explorer.transfer_object_parameters(cdist_object)
 | 
					        self.explorer.transfer_object_parameters(cdist_object)
 | 
				
			||||||
        source = os.path.join(self.local.object_path, cdist_object.parameter_path)
 | 
					        source = os.path.join(self.local.object_path, cdist_object.parameter_path)
 | 
				
			||||||
        destination = os.path.join(self.remote.object_path, cdist_object.parameter_path)
 | 
					        destination = os.path.join(self.remote.object_path, cdist_object.parameter_path)
 | 
				
			||||||
        self.assertEqual(os.listdir(source), os.listdir(destination))
 | 
					        self.assertEqual(sorted(os.listdir(source)), sorted(os.listdir(destination)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_run_type_explorer(self):
 | 
					    def test_run_type_explorer(self):
 | 
				
			||||||
        cdist_type = core.Type(self.local.type_path, '__test_type')
 | 
					        cdist_type = core.Type(self.local.type_path, '__test_type')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue