Issue #4792 has been updated by Jos Boumans.

Status changed from Closed to Re-opened
Target version changed from 2.6.2 to 2.6.x

I'm encountering what looks to be the same issue in 2.6.3:

    Nov 30 20:08:27 ip-10-204-53-197 node_classifier.py[1730]: DEBUG: Node 
configuration
    (riak.example.com.137d3603-a0dc-432c-a0d6-08878dd81d39): {'classes': 
['s_riak']}
    Nov 30 20:08:27 ip-10-122-246-108 puppet-agent[6149]: Could not retrieve 
catalog from
    remote server: Error 400 on SERVER: Duplicate definition: Class[Kbase] is 
already
    defined; cannot redefine at 
puppet/env/production/krux-modules/kbase/manifests/init.pp:3 

Changing the following line works around the issue:

    class s_riak inherits kbase {

to:

    class s_riak {
        include kbase

Below are the relevant files I'm using:

    
ubu...@cc002:~/sources/git/krux_interchange.2/puppet-new/puppet/env/production$ 
find . -type f | grep manifests | grep -P 'kbase|s_riak' | xargs -I% perl 
-le'$_=shift; print "*** FILE: $_ ***"; print `cat $_`' % 
    *** FILE: ./services/s_riak/manifests/init.pp ***
    # Class: s_riak
    #
    # This module manages s_riak
    #
    # Parameters:
    #
    # Actions:
    #
    # Requires:
    #
    # Sample Usage:
    #
    # [Remember: No empty lines between comments and class definition]
    
    include kbase::stages
    
    class { "s_riak": stage => "puppet1" }
    
    class s_riak inherits kbase {
    
        file { "/usr/local/krux/services/s_riak/":
            source  => "puppet:///modules/s_riak",
            ensure  => directory,
            recurse => true,
            mode    => 755,
            owner   => root,
            group   => root,
            purge   => true,
        }
    
        ### Arch dependant    
        $deb = $architecture ? {
            i386    => "riak-ee_0.13.0-1_i386.deb",
            amd64   => "riak-ee_0.13.0-1_amd64.deb",
            x86_64  => "riak-ee_0.13.0-1_amd64.deb",
        }
        
        package { "riak-ee":
            provider => dpkg,
            ensure   => latest,
            source   => "/usr/local/krux/services/s_riak/sources/$deb",
            require  => File["/usr/local/krux/services/s_riak/"],
        }
        
        ########################
        ### configuration files
        ########################
        
        ### this is a template because the -name variable depends on the fqdn
        file { "/usr/local/krux/services/s_riak/etc/riak/vm.args":
            content => template( "s_riak/etc/riak/vm.args.erb" ),
            ensure  => present,
        }
    
        ### symlink it from /etc/riak
        file { "/etc/riak/vm.args":
            ensure  => "/usr/local/krux/services/s_riak/etc/riak/vm.args",
            backup  => ".orig",
            require => File["/usr/local/krux/services/s_riak/etc/riak/vm.args"],
        }        
        
        ### symlink it from /etc/riak
        file { "/etc/riak/app.config":
            ensure  => "/usr/local/krux/services/s_riak/etc/riak/app.config",
            backup  => ".orig",
        }        
        
        ###################
        ### run the service
        ###################
        
        service { riak:
            ensure      => running,
            enable      => true,
            hasstatus   => true,
            hasrestart  => true,
            subscribe   => [ File["/etc/riak/app.config"], 
                             File["/etc/riak/vm.args"],
                             Package["riak-ee"],
                           ],
        }
        
    }
    
    *** FILE: ./krux-modules/kbase/manifests/stages.pp ***
    class kbase::stages {
        stage { "bootstrap": before  => Stage[main]    } # bootstrap phase
        stage { "puppet1":   require => Stage[main]    } # first puppet 
controlled phase
        stage { "script1":   require => Stage[puppet1] } # first manual script 
phase
        stage { "puppet2":   require => Stage[script1] } # second puppet 
controlled phase
        stage { "script2":   require => Stage[puppet2] } # second manual script 
phase
        stage { "puppet3":   require => Stage[script2] } # third puppet 
controlled phase
        stage { "script3":   require => Stage[puppet3] } # third manual script 
phase
    }    
    
    *** FILE: ./krux-modules/kbase/manifests/init.pp ***
    include kbase::stages
    
    class { "kbase": stage => "bootstrap" }
    
    class kbase {
        include kbase::packages
        include kbase::users
    
        ######################################################
        ### base directory for all krux related files & kbase
        ######################################################
    
        file { ["/usr/local/krux", "/usr/local/krux/services"]:
            ensure  => directory,
            mode    => 755,
            owner   => root,
            group   => root,
        }
        
        ######################################################
        ### scripts to run as part of the base setup procedure
        ######################################################
    
        # can not copy everything under kbase/files in one go, has to 
        # be a subdir -jib
        file { "/usr/local/krux/kbase/":
            source  => "puppet:///modules/kbase",
            ensure  => directory,
            recurse => true,
            mode    => 755,
            owner   => root,
            group   => root,
            purge   => true,    # content changes must be propogated
        }       
    }
    
    *** FILE: ./krux-modules/kbase/manifests/users.pp ***
    ###################################################
    ### essential system users for the following stages
    ###################################################
    
    class { "kbase::users": stage => "bootstrap" }
    
    class kbase::users {
    
        user { "ubuntu":
            ensure  => "present",
            uid     => "1000",
            groups  => ["adm", "admin"],
            comment => "Ubuntu System User",
            shell   => "/bin/bash",
            home    => "/home/ubuntu",
        }
    
        file { "/home/ubuntu":
            ensure  => directory,
            mode    => 755,
            owner   => ubuntu,
            group   => ubuntu,
            require => User["ubuntu"],
        }
        
        exec { 
"/usr/local/krux/kbase/scripts/bootstrap/02_setup_system_user.sh":
            user    => "ubuntu",
            require => [ File["/usr/local/krux/kbase"], File["/home/ubuntu"] ]
        }
    }
    
    *** FILE: ./krux-modules/kbase/manifests/packages.pp ***
    class { "kbase::packages": stage => "bootstrap" }
    
    class kbase::packages {
        include kbase
        
        exec { "/usr/local/krux/kbase/scripts/bootstrap/01_packages.sh": 
            require => File["/usr/local/krux/kbase"]
        }
    
        ### packages to install the puppet way
        package { ["s3cmd"]:
            ensure  => latest,
        }        
    }
    

----------------------------------------
Bug #4792: Duplicate definition since 2.6.1 upgrade
https://projects.puppetlabs.com/issues/4792

Author: James Turnbull
Status: Re-opened
Priority: High
Assignee: Paul Berry
Category: parser
Target version: 2.6.x
Affected Puppet version: 2.6.1
Keywords: 
Branch: http://github.com/stereotype441/puppet/tree/ticket/2.6.x/4792


Class, users::virtual which has all the user{} statements for all users. Then 
have classes like users::cms and users::developers that inherit users::virtual 
and then realize some of the users. This all worked perfectly fine in 2.5 but 
since 2.6.1 runs now fail with:

<pre>
err: Could not retrieve catalog from remote server: Error 400 on SERVER: 
Duplicate definition: User[apen 
ney] is already defined in file 
/etc/puppet/modules/testing/users/manifests/virtual.pp at line 19; canno 
t redefine at /etc/puppet/modules/testing/users/manifests/virtual.pp:19 on node 
hlslinutil1.law.harvard. 
edu
</pre>

<pre>
realize( 
User['user'], 
) 
}

# cat virtual.pp 
class users::virtual {

## 
## Sysadmins 
##

@user { "user": 
ensure => "present", 
uid => 35421, 
gid => 100, 
groups => "wheel", 
comment => "User Name", 
home => "/home/user", 
shell => "/bin/zsh", 
password => password, 
managehome => true, 
} 
}
</pre>


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to