পুতুল: ব্যবহারকারীদের হোম ডিরেক্টরি পান


13

আমি অনুসরণ হিসাবে একটি ব্যবহারকারী তৈরি করছি

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

এখন আপনি দেখতে পাচ্ছেন যে আমি একটি ম্যানেজহোম করছি তা মিথ্যা Now এখন পরে লেনের নীচে আমাকে একটি ফাইল ব্যবহারকারীর হোম ডিরেক্টরিতে ঠেলাতে হবে

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

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

এর জন্য আমি কীভাবে ব্যবহারকারীর হোম ডিরেক্টরি পেতে পারি ?

উত্তর:


12

এইচএম, আমি মনে করি এটি করার জন্য আপনার একটি ফ্যাক্টর মডুল এবং একটি সামান্য হ্যাকি ম্যানিফেস্ট ফাইল দরকার ...

ফ্যাক্টর মডিউল: এটি সমস্ত ব্যবহারকারীর জন্য ফ্যাক্টর ভেরিয়েবল নিবন্ধন করবে। "হোম_রোট" বা "হোম_পাছে" এর মতো।

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 এ আমার বেসিক ক্লাস আছে এবং আমি সেখান থেকে কোথায় যাব?
কুইন্টিন পার

1
@ কুইন্টিনপার আমি কিছু পুতুল উদাহরণ বা সেরা অনুশীলনগুলি গিথুব আপলোড করতে শুরু করেছি। আপনি এখানে এই উদাহরণটি (ফ্যাক্টর ক্লাস) পাবেন: github.com/drandor/puppet-example/tree/master/modules/user আপনি আপনার মাস্টার এবং আপনার এজেন্টের উপর প্ল্যাগইনসিঙ্ক সক্রিয় করতে হবে। দ্বিতীয় কোডটি আপনার * .pp ফাইলের যে কোনও জায়গায় ব্যবহার করা যেতে পারে। পুতুলের কনফিগারেশন এবং নোডটি উদ্ভাসিত (পর্যায়গুলির সাথে) এখানে পাওয়া যাবে: github.com/drandor/puppet-config
jfried

1
যদি ব্যবহারকারী এখনও মেশিনে উপস্থিত না থাকে (নতুন ব্যবহারকারী যুক্ত করা হয়), হোম_উজার ব্যবহারকারী উপলব্ধ নেই। নতুন ব্যবহারকারী তৈরি করতে দুটি পুতুল রান দরকার হতে পারে। প্রথম দৌড়ে, $ হোম_পথটি খালি, এবং এটি অনাকাঙ্ক্ষিত ফলাফলের দিকে নিয়ে যেতে পারে।
মিক্কো

4

আমি ঠিক একই সমস্যার সমাধান খুঁজে পাওয়ার চেষ্টা করেছি এবং এটি কিছুটা ভিন্ন পদ্ধতির গ্রহণ করা ভাল।

হোম ডিরেক্টরিটি স্পষ্টভাবে সংজ্ঞায়িত করুন, উদাহরণস্বরূপ:

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"(ওএস নির্দিষ্ট, প্রয়োজন হলে) সংজ্ঞায়িত করতে এবং হোম ডির সাথে পেতে পারেন "${home}/${username}"

সম্পাদনা: ব্যবহারকারী-নির্দিষ্ট হোম ডিরেক্টরিগুলি সংজ্ঞায়িত করতে হ্যাশ ব্যবহার করা

আরও সাম্প্রতিক পুতুল সংস্করণ (> = 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
/ হোম ডিফল্ট না হলে এটি অন্ট কাজ করে। বলুন / var / lib / psql
কুইন্টিন পার

@ ব্যারি: আপনি কি "উত্তর-ব্যবহারকারীর দ্বারা নির্দিষ্ট হোম ডিরেক্টরিগুলি" পড়েছেন? (উত্তরটি কুইন্টিন পারের মন্তব্যের পরে সম্পাদিত হয়েছিল)
মিক্কো

@ মিক্কো ইয়াপ, এবং আমি সঠিক (স্বীকৃত) উত্তরটিকে উঁচু করে দেখার চেষ্টা করেছি। এটি তালাবন্ধ ছিল।

1

এই প্রশ্নটি পুরানো, তবে এখনও প্রাসঙ্গিক। আসলে এখন আরও ভাল উপায় আছে। [মডিউল] /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']

মনে রাখবেন যে পুতুল চালানোর আগে ব্যবহারকারী ইতিমধ্যে উপস্থিত থাকলে এটি কেবলমাত্র কাজ করে। যদি ব্যবহারকারী রান চলাকালীন তৈরি হয় তবে হোম ডিরেক্টরিটি ইতিমধ্যে জানা বা কমপক্ষে অনুমানযোগ্য হওয়া উচিত। পুতুল অর্ডার তৈরির জন্য ডিজাইন করা হয়েছে সর্বোপরি।

আশা করি এটি কাউকে সাহায্য করবে।


0

যখন অ্যাকাউন্টগুলির মডিউল উপলব্ধ থাকে এবং সমস্ত অ্যাকাউন্ট হায়ারার মাধ্যমে তৈরি করা হয়, তারপরে নীচে ব্লকটি প্রতিটি ব্যবহারকারীদের হোম ডিরেক্টরিতে একটি ফাইল তৈরি করে, ধরে নিই যে আপনি রুট ছাড়াও সিস্টেম ব্যবহারকারী অ্যাকাউন্টগুলির বিষয়ে যত্নশীল হন না।

require accounts::user::defaults

# filter out accounts with ensure=absent or managehome=false 
$managed_accounts = $accounts::user_list.filter |$name, $account| {
  (!has_key($account, 'managedhome') or $account['managedhome']) and (!has_key($account, 'ensure') or $account['ensure']!='absent')
}

# Add a file to each users
$managed_accounts.each |$name, $account| {
  $user_home_dir = has_key($account, 'home') ? {
    true    => $account['home'],
    default => $name ? {
      'root'  => $accounts::user::defaults::root_home,
      default => $accounts::user::defaults::home_template.sprintf($name),
    },
  }

  # Push a file to the user’s home directory.
  file { "${user_home_dir}/.helloworld":
    ensure  => file,
    owner   => $name,
    content => "Hi ${name}",
    require => User[$name],
  }
}

$user_home_dirসমস্ত ব্যবহারকারী আছে জন্য সঠিক হওয়া উচিত

  1. পরিচালিত accounts,
  2. নিশ্চিত করা হয় present
  3. অ-মানক homeডিরেক্টরিগুলির জন্য।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.