4

I'm attempting to assign users to multiple groups with a manifest, but am running into walls.

Attempt 1:

class usergroup {

  group { "user_one":
      ensure => present,
      gid => 500,
  }
  group { "user_two":
      ensure => present,
      gid => 501,
  }
  group { "dev_site_one":
      ensure => present,
      gid => 502,
  }
  group { "dev_site_two":
      ensure => present,
      gid => 503,
  }
  group { "dev_site_three":
      ensure => present,
      gid => 504,
  }

  user { "user_one":
      ensure => present,
      uid => 500,
      gid => 500,
      gid => 502,
      gid => 503,
      gid => 504,
  }
  user { "user_two":
      ensure => present,
      uid => 501,
      gid => 501,
  }

}

Running this:

puppet apply --noop ./init.pp

Yields:

Error: Duplicate parameter 'gid' for on User[user_one] at /etc/puppet/modules/webserver/manifests/init.pp:159 on node my_web_server

Attempt 2:

I tried to break out each gid declaration like so:

class usergroup {

  group { "user_one":
      ensure => present,
      gid => 500,
  }
  group { "user_two":
      ensure => present,
      gid => 501,
  }
  group { "dev_site_one":
      ensure => present,
      gid => 502,
  }
  group { "dev_site_two":
      ensure => present,
      gid => 503,
  }
  group { "dev_site_three":
      ensure => present,
      gid => 504,
  }

  user { "user_one":
      ensure => present,
      uid => 500,
      gid => 500,
  }
  user { "user_one":
      gid => 502,
  }
  user { "user_two":
      ensure => present,
      uid => 501,
      gid => 501,
  }

}

Running this:

puppet apply --noop ./init.pp

Yields:

Error: Duplicate declaration: User[user_one] is already declared in file /etc/puppet/modules/webserver/manifests/init.pp:156; cannot redeclare at /etc/puppet/modules/webserver/manifests/init.pp:160 on node my_web_server

...where 160 is where I try to assign gid 502 to user_one.

Question

Is there a way to assign multiple groups with Puppet, or do I have to hand-assign these groups?

ekad
  • 14,436
  • 26
  • 44
  • 46
a coder
  • 7,530
  • 20
  • 84
  • 131
  • An additional advice: Question regarding puppet are better placed on http://serverfault.com/. There are more users subscribed to [puppet] – roehrijn Sep 11 '13 at 21:43

2 Answers2

14

Yes there is a way!

Have a look at http://docs.puppetlabs.com/references/latest/type.html#user.

The parameter gid specifies the user's primary group which must be unique. Additional groups can be specified with the groups parameter.

Assuming that 500 should be the primary group ...

user { "user_one":
    ensure => present,
    uid => 500,
    gid => 500,
    groups => [502, 503, 504],
}

... should do the job.

roehrijn
  • 1,387
  • 1
  • 11
  • 20
  • 7
    `Error: Parameter groups failed on User[user_one]: Group names must be provided, not GID numbers. at /etc/puppet/modules/webserver/manifests/init.pp:157` Fixed by changing gid's to names. – a coder Sep 11 '13 at 21:42
0

If you want, you can use the name of group too, look below.

group { "group_one": 
        ensure => present, 
        gid => 500,}

group { "group_two":
         ensure => present,
         gid => 501,}

 user { "user_one":
         ensure => present,
         comment => 'New user being created',   
         uid => 505,   
         groups => ["group_one","group_two"],}
Renato Coutinho
  • 1,151
  • 10
  • 7