꼭두각시 : 사용자에게 홈 디렉토리 가져 오기


12

다음과 같이 사용자 를 만들고 있습니다

user { $username:
    comment => "$name",
    shell   => "$shell",
    managehome => false,
    password  => "$password",
    groups => $groups
}

이제 내가 알 수 있듯이 managehome이 false입니다. 이제 차선 아래로 파일을 사용자의 홈 디렉토리로 푸시해야합니다.

$key = "${homedir}/${name}/file"

    file { $key:
    ensure => present,
    owner  => $username,
    group  => $username,
    mode   => 600,
    content => "$keyvalue",
    subscribe => User[$username],
}

이를 위해 사용자의 홈 디렉토리 를 얻으려면 어떻게 해야합니까?

답변:


11

흠, 나는 그것을하기 위해 더 사실적인 모듈이 필요하고 약간의 해키 매니페스트 파일이 필요하다고 생각합니다 ...

팩터 모듈 : 모든 사용자에 대한 팩터 변수를 등록합니다. "home_root"또는 "home_apache"와 같은

require 'etc'

Etc.passwd { |user|

   Facter.add("home_#{user.name}") do
      setcode do
         user.dir
      end
   end

}

그런 다음 매니페스트 파일 내에서 다음과 같이 사용할 수 있습니다.

$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")

file { "$home_path/test.txt":
   content => "huhu",
}

아마도 더 좋은 방법이 있지만 두려워하지 않습니다.


이 목록을 어디에 두어야하는지 알려주시겠습니까? init.pp에 기본 수업이 있는데 어디로 가나 요?
Quintin Par

1
@QuintinPar 방금 퍼펫 예제 또는 모범 사례를 github에 업로드하기 시작했습니다. 여기 예 (facter 클래스)를 확인할 수있는 것들 : github.com/drandor/puppet-examples/tree/master/modules/user는 , 당신은 pluginsync 마스터와 에이전트를 활성화해야합니다. 두 번째 코드는 * .pp 파일의 어느 곳에서나 사용할 수 있습니다. (단 포함) 괴뢰 구성 및 노드 매니페스트는 여기에서 찾을 수 있습니다 : github.com/drandor/puppet-config
jfried

1
사용자가 시스템에 아직 없으면 (새 사용자 추가) home_user 팩트를 사용할 수 없습니다. 새 사용자를 만들려면 두 개의 Puppet 실행이 필요할 수 있습니다. 첫 실행시 $ home_path가 비어 있으므로 원하지 않는 결과가 발생할 수 있습니다.
Mikko

3

나는 정확히 같은 문제에 대한 해결책을 찾으려고 노력했으며 약간 다른 접근법을 취하는 것이 가장 좋습니다.

예를 들어, 홈 디렉토리를 명시 적으로 정의하십시오.

user { $username:
    comment    => "comment",
    home       => "/home/${username}",
    managehome => false,
    # ...
}

managehome거짓, 홈 디렉토리도 만들어지지 않습니다. 따라서 구체적으로 정의해야합니다. 전체 사용자에 대해 사용자 정의를 작성하는 것이 가장 좋습니다.

define custom_user($username, $password) {
    user { $username:
        home     => "/home/${username}",
        password => $password,
        # etc.
    }
    file { "/home/${username}":
        ensure  => directory,
        owner   => $username,
        require => User[$username],
        # etc.
    }
}

예를 들어 더 많은 매개 변수를 추가 $keyvalue하고 해당 매개 변수가 제공되면 키 파일을 작성할 수 있습니다.

전역 변수 $home = "/home"(필요한 경우 OS 특정)를 정의 하고을 사용하여 홈 디렉토리를 가져올 수도 "${home}/${username}"있습니다.

편집 : 해시를 사용하여 사용자 별 홈 디렉토리 정의

최신 Puppet 버전 (> = 2.6)은 해시를 지원합니다. username => /path/to/home각 사용자에 대한 매핑이 포함 된 해시를 정의 할 수 있습니다 .

$home = {
    normal_user => '/home/normal_user',
    backup      => '/var/backup',
    mysql       => '/var/lib/mysql'
}

모든 사용자 이름에 대해로 홈 디렉토리를 쉽게 얻을 수 $home['username']있습니다.

대체가있는 홈 디렉토리 해시

대부분의 경우 사용자가 해시에없는 경우 "대체 기본값"을 사용하는 것이 가장 좋습니다. 이론적으로 는 구문이 약간 비밀스럽고 부풀어 오르지 만 이것이 가능합니다.

$home = { ... }
$default_home = '/home'

user {$username:
    home => has_key($home, $username) ? {
                true => $home[$username], 
                false => "${default_home}/${username}" 
            }
    # ...
}

2
/ home이 기본값이 아닌 경우에는 작동하지 않습니다. / var / lib / psql 말
Quintin Par

@Barry : "사용자 별 홈 디렉토리"라는 나머지 답변을 읽었습니까? (Quintin Par의 의견에 따라 답변이 편집되었습니다)
Mikko

@ Mikko Yeap, 나는 올바른 (허용 된) 대답을 찬성하려고했습니다. 잠겨있었습니다.

0

이 질문은 오래되었지만 여전히 관련이 있습니다. 실제로 더 좋은 방법이 있습니다. 다음을 포함하는 사용자 정의 팩트를 [module] /lib/facter/home_dirs.rb에 추가하십시오 .

require 'etc'

Facter.add(:home_dirs) do
  setcode do

    home_dirs = {}   
    Etc.passwd { |user|
      home_dirs[user.name] = user.dir
    }

    home_dirs

  end
end

그런 다음 매니페스트의 데이터에 액세스 할 수 있습니다.

$facts['home_dirs']['some_username']

꼭두각시 실행 전에 사용자가 이미 존재하는 경우에만 작동합니다. 실행 중에 사용자가 작성되면 홈 디렉토리가 이미 알려져 있거나 최소한 예측 가능해야합니다. 꼭두각시는 주문을 생성하도록 설계되었습니다.

이것이 누군가를 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.