পুতুলের সাথে sysctl.conf পরামিতি সেট করুন


10

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

তবে দুটিই সত্যই ভালভাবে নথিবদ্ধ হয় না। আমি কেবল কয়েকটি মান net.core.rmem_defaultএবং এর মতো কিছু সম্পাদনা করার উপায় খুঁজছি net.core.wmem_max। গিথুবটিতে হোস্ট করা প্রকল্পের বিন্যাসে, আমার init.pp ম্যানিফেস্টে কনফিগারেশনটি দেখতে হবে:

class sysctl {

sysctl::value {
        "net.core.rmem_default": value => "9000000";
        "net.core.wmem_default": value => "9000000";
        "net.core.rmem_max": value => "16777216";
        "net.core.wmem_max": value => "16777216";
        }
}

ফোরাম এবং মেলিং তালিকাগুলি দিয়ে যেতে দেখে মনে হচ্ছে পুতুল প্লাগইন এবং মডিউলগুলির মধ্যে পার্থক্য নিয়ে বিভ্রান্তি রয়েছে। পদগুলি প্রায় বিনিময়যোগ্যভাবে ব্যবহৃত হয় ... কিছু লোমযুক্ত ত্রুটিগুলি পাবার জন্য আমার ক্লায়েন্টগুলিতে প্লাগইনসিঙ্ক সক্ষম করার দরকার পড়েছিলাম। আমি ভেবেছিলাম এটি একটি মডিউল!

বর্তমান ক্লায়েন্ট ত্রুটি:

info: Loading downloaded plugin /var/lib/puppet/lib/puppet/type/sysctl.rb
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/provider/sysctl/parsed.rb
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error 
ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
    warning: Not using cache on failed catalog
    err: Could not retrieve catalog; skipping run

কমপক্ষে ব্যথার সাথে কীভাবে এটি সম্পাদন করা যায় সে সম্পর্কে কোনও চিন্তাভাবনা?

সম্পাদনা: আমি কি এই বাগ দ্বারা প্রভাবিত ?

সম্পাদনা করুন: জেফ ফেরল্যান্ড এবং পুতুল উইকির পরামর্শ অনুসারে অউজিয়াস লাইব্রেরি ব্যবহার করে স্থির করা হয়েছে ।

আমি একটি sysctlমডিউল তৈরি করেছি ...

class sysctl {

  # nested class/define
  define conf ( $value ) {

    # $name is provided by define invocation

    # guid of this entry
    $key = $name

    $context = "/files/etc/sysctl.conf"

     augeas { "sysctl_conf/$key":
       context => "$context",
       onlyif  => "get $key != '$value'",
       changes => "set $key '$value'",
       notify  => Exec["sysctl"],
     }

  }

   file { "sysctl_conf":
      name => $operatingsystem ? {
        default => "/etc/sysctl.conf",
      },
   }

   exec { "/sbin/sysctl -p":
      alias => "sysctl",
      refreshonly => true,
      subscribe => File["sysctl_conf"],
   }

}

... এবং প্রাসঙ্গিক সেটিংস সেট করতে অন্য একটি মডিউল ...

class prod_sysctl {

include sysctl

sysctl::conf {

  # increase PID rollover value
  "kernel.pid_max": value =>  "1048576";
  }
}

এটি দুর্দান্ত। আপনি কি পুতুল ফোরজে প্রকাশিত মডিউল হিসাবে এটি লেখার বিষয়টি বিবেচনা করেছেন?
টমঅনটাইম

উত্তর:


14

সুনির্দিষ্ট উত্তর: তাত্ক্ষণিকভাবে বলতে গেলে আপনি সাইক্লিট :: মান বলছেন, তবে মানটি আপনার সিসটেল ক্লাসে ঘোষণা করা হয়নি। এই উদাহরণটি দেখুন যা একটি সিস্টেস্ট :: কনফারেন্স ঘোষণা ব্যবহার করে। ছাড়াই define value, আপনাকে কল করার জন্য কোনও সিসটেল :: মান সাবক্লাস নেই।


সাধারণ উত্তর এবং দিক নির্দেশনা: Augeas কনস্ট্রাক্ট (এছাড়াও দেখুন তার প্রকার উল্লেখের ডকুমেন্টেশন ) যে পুতুল বর্তমান সংস্করণ অংশ, একটি কনফিগারেশন ফাইল এবং এমনকি শ্রদ্ধা প্রেক্ষাপটে লাইন বজায় রাখার অনুমতি দেয় তাই এটি যেমন একটি Git কনফিগারেশন ফাইল পরিচালনা করতে পারেন। নীচের উদাহরণ দুটি কার্যকারিতা প্রদর্শন করা এবং আপনাকে পুতুল কনফিগারেশনের একটি দুর্দান্ত রেফারেন্স সংগ্রহ - উইকিপিডিয়া সার্ভারের জন্য লাইভ কনফিগারেশন স্টোরের দিকে নির্দেশ করা উভয়।

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://gerrit.wikimedia.org/r/p/operations/puppet
[branch "production"]
    remote = origin
    merge = refs/heads/production

উপরের কনফিগারেশন ডকুমেন্টেশনের একটি সাধারণ উদাহরণ হ'ল:

augeas { "sshd_config":
 context => "/files/etc/ssh/sshd_config",
  changes => [
    "set PermitRootLogin no",
  ],
}

সুতরাং, আপনি যদি নিজের /etc/sysctl.conf পরিচালনা করতে চান তবে নিম্নলিখিত লিখুন:

augeas { "sysctl":
 context => "/files/etc/sysctl.conf",
  changes => [
    "set kernel.sysrq = 0",
    #and whatever other lines are interesting to you
  ],
}

Augeas উদাহরণ এছাড়াও, একটি sysctl Augeus উপর ভিত্তি করে বর্গ কি আপনার প্রশ্নের পোস্ট অনুরূপ একটি কনস্ট্রাক্ট হয়েছে যাতে এছাড়াও কিছু হালকা চালা পারে।


সংজ্ঞাটি মডিউলটির value.ppসাথে বিতরণ করা ম্যানিফেস্টে রয়েছে module-sysctl। দেখে মনে হচ্ছেdefine sysctl::value ( $key = 'name', $value ) {
ewwhite

@wwite দেখে মনে হচ্ছে আপনার সাথে লিখিত ত্রুটিটি আপনার পরিস্থিতির জন্য প্রয়োগ হতে পারে। আপনি কি নিশ্চিত করতে পারবেন যে মডিউলটি আপনার টার্গেট মেশিনে লোড হচ্ছে?
জেফ ফেরল্যান্ড

আমি কীভাবে মডিউলটির উপস্থিতি পরীক্ষা করতে পারি?
ew white

অজিয়ার পদ্ধতির সাথে যাচ্ছি। আমি মনে করি আমি অন্যান্য সমাধান সহ একটি বাগ আঘাত করেছি।
ew white

2

আমি অতীতে এই মডিউলটি আরএইচইএল 5: পুতুল-সিসেক্টল দিয়ে ব্যবহার করেছি

এটি ব্যবহার করার জন্য, আপনাকে মডিউলগুলি আপনার মডিউল ফোল্ডারে ইনস্টল করতে হবে (সম্ভবত / ইত্যাদি / পুতুল / মডিউল / সিসেক্টল) আপনার নোডের ক্লাসটি অন্তর্ভুক্ত করবেন: (সিসেক্টল অন্তর্ভুক্ত করুন) এবং তারপরে ডিএফ রিসোর্সটিকে এভাবে কল করুন:

class s_sysctl::rhel_defaults {
    include sysctl

    # Controls IP packet forwarding
    sysctl::set_value { "net.ipv4.ip_forward": 
                         value => 0 
    }

    # Controls source route verification
    sysctl::set_value { "net.ipv4.conf.default.rp_filter": value => 1 }
}

সুতরাং আপনি ভাবতে পারেন, এই কোডটি আসলে কোথায় যায়? আমি আমার পুতুল গাছটিকে এভাবে সাজিয়ে রাখতে চাই:

site.pp -> nodes.pp -> roles.pp -> /etc/puppet/site-modules/s_sysctl -> /etc/puppet/modules/sysctl

এইভাবে, সাইট-মডিউলগুলিতে হিরা ডেটা, বা টিউনবেল রয়েছে এবং মডিউলগুলি জেনেরিক, প্লাগেবল এবং "মডিউল" থাকে।


হ্যাঁ, এটি আমার প্রশ্নের সাথে যুক্ত। মডিউলটির জন্য কোনও ডকুমেন্টেশন নেই এবং এটি কোথায় ইনস্টল করবেন বা বাস্তবে এটি কীভাবে ব্যবহার করবেন তা নিশ্চিত I'm
ew white

দুঃখিত আমি আপনার পুরো প্রশ্নটি পড়িনি :) মডিউলটিতে একটি সংজ্ঞা দেওয়া আছে, যা অন্য শ্রেণিতে ডাকা দরকার। আমি আমার উত্তরটি সম্পাদনা করব এবং কোডটি অন্তর্ভুক্ত করব ...
রোববিট

সুতরাং যে, ত্রুটি আমি পাই আছেন:err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
ewwhite

দেখে মনে হচ্ছে আপনি 'সিস্টেস্ট :: ::' লেবেলযুক্ত একটি সংজ্ঞায়িত ডাকছেন এবং 'সিস্টেস্ট :: সেট_ভ্যালু' নয়।
রবিবাইট

সংজ্ঞাটি মডিউলটির value.ppসাথে বিতরণ করা ম্যানিফেস্টে রয়েছে module-sysctl। দেখে মনে হচ্ছেdefine sysctl::value ( $key = 'name', $value ) {
ewwhite

0

যতক্ষণ না আপনার মান পরিবর্তন করতে হবে (বা নতুন মানগুলির সাথে লাইন সংযোজন করে সন্তুষ্ট), আপনি সাধারণ ব্যবহার করতে পারেন line। আপনি যখন মান পরিবর্তন করেন তখন আপনি একজোড়া present/ absentকনফিগারেশন ব্যবহার করতে পারেন ।

মানটি পরিবর্তন করতে - ইতিমধ্যে লাইনটি বিদ্যমান রয়েছে ধরে নিয়ে - আপনি replaceএকই মডিউলে ব্যবহার করতে পারেন ।

অথবা আপনি কীভাবে এই সংজ্ঞাগুলি আপনার কাজের সাথে উপযুক্ত করে তুলতে রচনা করেছেন তা দেখতে পারেন - যা মনে রাখবেন, আমি মনে করি এটি সহজ এবং সাধারণ যে এটি পাপেটের ডিফল্ট ধরণের দ্বারা সরবরাহ করা উচিত ছিল enough

তো, কেন হয় না? কারণ পুতুল আশা করেন যে আপনি যে জিনিসগুলি পরিচালনা করছেন তা পুরোপুরি পরিচালনা করবেন। এটি হ'ল, কেবল একটি মান বা অন্য মান যোগ করার বা অপসারণের পরিবর্তে আপনার পুরো সিসটেল ফাইলটি বিতরণ করা উচিত । আমি বলছি না যে এটি করা সহজভাবে একটি সহজ জিনিস, তবে আপনি যদি এটির সাথে পালাতে পারেন তবে আপনি এটি করার সহজতম উপায়।


আমি মনে করি না পুরো ফাইলটি পরিচালনা করা মাপের যোগ্য। আমি জানতাম যে পুরো ফাইল অপশনটি একটি সম্ভাবনা, তবে একটি আরএইচইল রিলিজের মধ্যে ছোট পরিবর্তনগুলির ক্ষেত্রে ব্যবহার করুন ... ডিএইচএল হতে পারে sysctl.confযা আরএইচইএল সংস্করণগুলির মধ্যে পরিবর্তিত হয়। নির্দিষ্ট পরামিতি সেট / পরিবর্তন করা যায় তা নিশ্চিত করার পরিবর্তে আমরা এগুলি উপেক্ষা / ওভাররাইট করতে চাই না।
ইয়েওয়াইট

@Wwite RHEL এর জন্য কোনও স্থানীয় ওভাররাইড ফাইল নেই sysctl.conf? না মানে? আপনি বিভিন্ন কনফিগারেশনের আছে মুক্তির অনুযায়ী? পরবর্তী ক্ষেত্রে, আপনি একটি টেম্পলেট তৈরি করতে পারেন এবং ওএস সংস্করণের উপর নির্ভর করে লাইনগুলি নির্বাচন করতে পারেন।
ড্যানিয়েল সি। সোব্রাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.