퍼펫이있는 그룹에 기존 사용자 추가


16

퍼펫이 2.7.18 인 그룹에 기존 사용자를 추가 할 수 있습니까?

우리는 두 개의 모듈을 가지고 있으며, 각각 하나의 클래스를 정의합니다 :

  • "user"모듈은 사용자 foo 및 사용자 표시 줄을 포함한 모든 사용자를 작성합니다.
  • "subversion"모듈은 다양한 conf 파일을 처리하고 svn 그룹을 만듭니다.

"subversion"모듈 내에서 svn 그룹에 foo 사용자를 추가하려고합니다.

기존 기능 요청에 설명 된대로 회원 매개 변수를 사용해 보았습니다 .

group {
"svn":
    ensure  => present,
    gid     => xxxxx;
}
user {
"foo":
    group      => ["svn"],
    membership => minimum;
}

그러나 다음과 같은 오류가 발생합니다.

오류 : 원격 서버에서 카탈로그를 검색 할 수 없습니다. 서버의 오류 400 : 중복 선언 : User [foo]가 xx 행의 /pathto/modules/subversion/manifests/init.pp 파일에 이미 선언되었습니다. myserver.example.com 노드의 /pathto/modules/users/manifests/init.pp:xxx에서 다시 선언 할 수 없음

이 기능은 이미 구현 되었습니까? 그렇지 않은 경우 좋은 해결 방법이 있습니까?

답변:


15

사용자를 가상 자원 으로 선언 하면 '실현'또는 콜렉션 구문 (User <| ... |>)을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

@user { 'foo':
  groups     => ['somegroup'],
  membership => minimum,
}

그런 다음 컬렉션 구문을 사용하여 가상 사용자를 인식하십시오.

User <| title == foo |>

다른 곳에서는 plusignment를 사용하여 해당 가상 리소스의 매개 변수에 추가 할 수 있습니다.

User <| title == foo |> { groups +> "svn" }

나는이 시간에 가상 능숙 제외하고는 대안이 없다 :( 덕분에 많은 답변을 추측 그래서.

1
Puppet 버전간에 오타 나 속성이 변경되었습니다. 그룹이 아니라 그룹 (복수)입니다. 인형 3.2.2 사용
고란 Miskovic

1
간단한 예를 들어 누군가가 이것을 확장 할 수 있습니까?
mschuett

21

Puppet 가상 리소스를 사용하는 것이 올바른 방법입니다. 그러나 사용자 정의를 변경할 수없고 해결 방법이 필요한 경우 다음은 끔찍하고 해 키지 만 작동합니다.

exec { 'foo somegroup membership':
  unless  => '/bin/grep -q "somegroup\\S*foo" /etc/group',
  command => '/sbin/usermod -aG somegroup foo',
  require => User['foo'],
}

본질적으로 우리는 somegroup에 아직 사용자 foo가 포함되어 있는지 확인합니다. 그렇지 않은 경우 일반 usermod 명령을 사용하여 foo가 속한 기존 그룹에 추가합니다.


1
꼭두각시는 실행 파일에 대한 정규화 된 경로를 요구할 수 있습니다. 이것을 반영하도록 수정되었습니다.
h7r

2
끔찍하고 해 키지 만 정말 도움이됩니다. 그룹에 사용자를 추가하는 것처럼 개념적으로 간단한 작업을 수행하기 위해 새로운 언어 구성을 배울 필요가 없었습니다.
BillMan

1
아마도 (물론 여전히 해키는 동안) 더 적절한 방법은 getent group somegroup|cut -d: -f4|grep -q foo우리가 사용한다고 가정하지 않기 위해 사용 하는 것 /etc/group입니다.
falstro

매우 도움이되었습니다-감사합니다. 다음과 같이 전체 경로를 포함하도록 "unless"및 "usermod"를 변경해야했습니다. not => "/ user / bin / grep ..."command => "/ user / bin / usermod ..."
JNP 웹 개발자

@jnpWebDeveloper 및 이와 유사한 사용자의 경우 : documentation 에 따라 path매개 변수도 지정할 수 있습니다. 글로벌 리소스 기본값을 사용하는 것이 좋습니다 $PATH.
cincodenada

2

고마워-못생긴 해킹은 확실하지만 작업이 완료됩니다. 다음은 'napeos'그룹에 'nrpe'를 추가하는 경로 예제입니다 (위의 주석을 결합). 여기 사용자가 꼭두각시가 아닌 RPM이 제공하므로 패키지 요구 사항을 사용했습니다.

  exec {"nrpe nagios membership":
    unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
    command => "/usr/sbin/usermod -a -G nagios nrpe",
    require => Package['nrpe'],
  }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.