Re: [PATCH] Add glob support to delegation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 2010-08-08 at 02:47 -0400, "S.Çağlar Onur" wrote:
> Hi, 


>  
>          return tmp_hosts,tmp_certs
> @@ -460,7 +474,8 @@ class Overlord(object):
>  
>          self.delegate    = delegate
>          self.mapfile     = mapfile
> -        
> +        self.minionmap   = {}
> +
>          #overlord_query stuff
>          self.overlord_query = OverlordQuery()
>          if self.config.puppet_minions:
> @@ -468,11 +483,6 @@ class Overlord(object):
>          else:
>              self._mc = Minions
>              
> -        self.minions_class = self._mc(self.server_spec,
> port=self.port, 
> -                                noglobs=self.noglobs,
> verbose=self.verbose, 
> -                                exclude_spec=self.exclude_spec)
> -        self.minions = self.minions_class.get_urls()
> -        
>          if len(self.minions) == 0:
>              raise Func_Client_Exception, 'Can\'t find any minions
> matching \"%s\". ' % self.server_spec
> 
> 


If you remove the minions attribute creation there - how does the above
section of code not ALWAYS fail or at least traceout?
         
> @@ -483,7 +493,13 @@ class Overlord(object):
>              except e:
>                  sys.stderr.write("mapfile load failed, switching
> delegation off")
>                  self.delegate = False
> -    
> +
> +        self.minions_class = self._mc(self.server_spec,
> port=self.port,
> +                                noglobs=self.noglobs,
> verbose=self.verbose,
> +
> delegate=self.delegate,minionmap=self.minionmap,
> +                                exclude_spec=self.exclude_spec)
> +        self.minions = self.minions_class.get_urls()
> +
>          if init_ssl:
>              self.setup_ssl()
>  
> @@ -730,7 +746,8 @@ class Overlord(object):
>          #Next, we run everything that can be run directly beneath
> this overlord
>          #Why do we do this after delegation calls?  Imagine what
> happens when
>          #reboot is called...
> -        directhash.update(self.run_direct(module,method,args,nforks))
> +        if single_paths != []
> +
> directhash.update(self.run_direct(module,method,args,nforks))
>          
>          #poll async results if we've async turned on
>          if self.async:
> diff --git a/func/overlord/delegation_tools.py
> b/func/overlord/delegation_tools.py
> index 0f3b43e..85de837 100644
> --- a/func/overlord/delegation_tools.py
> +++ b/func/overlord/delegation_tools.py
> @@ -15,6 +15,7 @@
>  ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
>  ##
>  
> +from func import utils as func_utils
>  import fnmatch
>  
>  class groupby(object):
> @@ -60,17 +61,19 @@ def group_paths(ungrouped_list):
>      
>      return (single_paths,path_group)
>                                            
> -def get_paths_for_glob(glob, minionmap):
> +def get_paths_for_glob(glob_list, minionmap):
>      """
>      Given a glob, returns shortest path to all minions
>      matching it in the delegation dictionary tree
>      """
>      
>      pathlist = []
> -    for elem in match_glob_in_tree(glob,minionmap):
> -        result = get_shortest_path(elem,minionmap)
> -        if result not in pathlist: #prevents duplicates
> -            pathlist.append(result)
> +    for glob in glob_list,split(";"):
> +        glob = func_utils.extend_hostname_to_fqdn(glob)[0]
> +        for elem in match_glob_in_tree(glob,minionmap):
> +            result = get_shortest_path(elem,minionmap)
> +            if result not in pathlist: #prevents duplicates
> +                pathlist.append(result)
>      return pathlist
>  
>  def list_all_minions(minionmap):
> diff --git a/func/utils.py b/func/utils.py
> index 632d727..7658ede 100644
> --- a/func/utils.py
> +++ b/func/utils.py
> @@ -141,6 +141,13 @@ def get_hostname_by_route():
>      # an ip address
>      return socket.gethostbyname(socket.gethostname())
>  
> +def extend_hostname_to_fqdn(hostname):
> +    try:
> +        (fqdn, aliases, ips) = socket.gethostbyname_ex(hostname)
> +    except socket.gaierror, e:
> +         return (hostname, [])
> +    else:
> +         return (fqdn, aliases)
>  
>  def get_fresh_method_instance(function_ref):
>      """

Not sure I'm in love with how extend_hostname_to_fqdn() works - the
trick is to assume that whatever we're handed is _something_ valid - and
also to not assume that what is NOW the fqdn was always the fqdn.

-sv


_______________________________________________
Func-list mailing list
Func-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/func-list



[Index of Archives]     [Fedora Users]     [Linux Networking]     [Fedora Legacy List]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux