GNU/Linux >> Znalost Linux >  >> Linux

Puppet:Získejte domovský adresář uživatelů

Řešení 1:

Hm, myslím, že k tomu budete potřebovat modul facter a malý hacknutý soubor manifestu...

modul factor:Toto zaregistruje proměnné faktoru pro všechny uživatele. jako "home_root" nebo "home_apache".

require 'etc'

Etc.passwd { |user|

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

}

a pak je můžete použít v souboru manifestu takto:

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

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

Možná existuje lepší způsob, ale obávám se, že ne.

Řešení 2:

Snažil jsem se najít řešení pro úplně stejný problém a ukázalo se, že je nejlepší zvolit trochu jiný přístup.

Definujte domovský adresář explicitně, například:

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

Když managehome je false, domovský adresář se ani nevytvoří. Musíte to tedy konkrétně definovat. Často je nejlepší vytvořit vlastní definici pro celého uživatele:

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

Můžete přidat více parametrů, například $keyvalue a pokud je tento parametr zadán, vytvořte soubor klíče.

Můžete také definovat globální proměnnou $home = "/home" (v případě potřeby specifické pro operační systém) a získejte domovský adresář s "${home}/${username}" .

Upravit:Použití hash k definování domovských adresářů specifických pro uživatele

Novější verze Puppet (>=2.6) podporují hash. Bylo by možné definovat hash obsahující username => /path/to/home mapování pro každého uživatele:

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

Pro jakékoli uživatelské jméno je pak snadné získat domovský adresář pomocí $home['username'] .

Haš domovského adresáře se záložním řešením

Většinu času by bylo nejlepší mít „výchozí výchozí nastavení“, pokud uživatel v hash neexistuje. Teoreticky to je možné, i když syntaxe se stává trochu záhadnou a nafouklou:

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

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

Linux
  1. Jak získám celý adresář na sftp?

  2. Jak zajistím, aby se obrazovka GNU nespustila v mém domovském adresáři v OS X?

  3. Získejte domovský adresář podle uživatelského jména

  1. Ssh a oprávnění k domovskému adresáři?

  2. domovský adresář a shell pro uživatele ověřené službou Active Directory

  3. vytvořit domovské adresáře po vytvoření uživatelů

  1. Je možné předefinovat Tildu (‚~‘, domovský adresář)?

  2. Získejte nejnovější soubor v adresáři v systému Linux

  3. Jak získám uživatelské jméno v souboru Makefile?