পুতুল: ফাইল (বা প্যাকেজ) আপডেট করা হলে শেল কমান্ড চলমান


8

mysql_tzinfo_to_sqlযখনই tzinfo প্যাকেজ (উবুন্টু সার্ভারে) পরিবর্তন হয় আমি চালাতে চাই । আমি বুঝতে পারি পুতুল এটি যত্ন নিতে পারে।

আমি ভেবেছিলাম যে প্যাকেট প্যাকেজ সংস্করণে পরিবর্তনের জন্য প্রতিক্রিয়া জানাবে, না হলে প্যাকেজে থাকা কোনও ফাইলের টাইমস্ট্যাম্পে পরিবর্তন আনবে।

আমি এটি করতে কেবল একমাত্র উপায় হ'ল সরাসরি কাজ না করে এমন একটি সংস্থান থাকা এবং এটির উপর নির্ভর করে একটি নির্বাহী থাকা।

আমার যে প্রশ্নগুলি রয়েছে তা হ'ল:

  1. কেবলমাত্র অন্য সংস্থানটি (যেমন এক্সিকিউট ) অবহিত করার জন্য ব্যবহৃত একটি ফাইল সংজ্ঞা দেওয়া সম্ভব ?
  2. প্যাকেজটির সংস্থান সংজ্ঞা দেওয়া কি প্যাকেজ পরিবর্তন বা আপডেট হওয়ার সাথে সাথে অন্য সংস্থান (যেমন এক্সিকিউট ) সক্রিয় হয়?
  3. ফাইল সিস্টেম থেকে কমান্ডের পরিবর্তে শেল কমান্ড লাইন (উদাহরণস্বরূপ পাইপ এবং পুনঃনির্দেশ সহ) চালিত এমন একটি এক্সিকিউট রিসোর্সটি কি সংজ্ঞায়িত করা সম্ভব ?

সব একসাথে নেওয়া, এটি অপ্রতিরোধ্য মনে হয়।

অনুসরণ : চমত্কার উত্তর! সম্পূর্ণতার স্বার্থে (এবং রেকর্ডের জন্য), আমাকে নিম্নলিখিতগুলি লক্ষ্য করা উচিত:

  1. আগ্রহের সম্পূর্ণ শেল কমান্ডটি হ'ল mysql_tzinfo_to_sql | mysql -u root -p password (এটি মাইএসকিউএল ব্যবহারের জন্য মাইএসকিউএল ডাটাবেসে tzinfo লোড করে)।
  2. /etc/tzinfoএটি নিছক স্থানীয় সময় অঞ্চল কনফিগারেশন হিসাবে নিরীক্ষণ নিরর্থক হবে; লক্ষ্যটি হ'ল tzinfo ডেটাতে নিজেই পরিবর্তন (এইভাবে দেখা /usr/share/zoneinfo) for
  3. তেমনি, বিষয়বস্তুগুলি দেখার মতো ভুল জিনিস হবে - কারণ তারা সম্ভবত পরিবর্তন না করে; সেরা ঘড়ি হবে র দ্বারা mtime বা সব থেকে filetimes প্রত্যেক tzinfo আপডেটের পরে পরিবর্তন করা উচিত।

এছাড়াও, জেমস টার্নবুল যখন এটি চালু হয়েছিল অডিটিং সম্পর্কে সমস্ত লিখেছিলেনMetaparameter রেফারেন্স এর ক্রিয়াকাণ্ড একটি সংক্ষিপ্ত বিবরণ রয়েছে auditপ্যারামিটার।


উত্তরগুলির মধ্যে দুটিই কি সমস্যার সমাধান করেছিল? যদি তা হয় তবে আপনি যে কোনওটিকে সবচেয়ে ভাল সমাধান করেছেন তা কি গ্রহণ করতে পারবেন? আমি এই সমস্যাটিতেও আগ্রহী, এবং এটি অনুসরণকারী হিসাবে দরকারী পয়েন্টার হতে পারে।
টম অ্যান্ডারসন

আমি কখনই এটি পুরোপুরি কাজ করতে পেতাম না - আমি ছেড়ে দিয়েছি এবং সময় সময় (বা ইনস্টল করার সময়) হাতে হাতে এটি করেছি।
মেই

উত্তর:


7

ফাইলের সামগ্রী বা প্যাকেজ সংস্করণ নম্বর ট্র্যাক করতে অডিট বৈশিষ্ট্যটি ব্যবহার করুন এবং প্যাকেজ সংস্থানটিতে সাবস্ক্রাইব করে পরিবর্তনটি ট্রিগার করুন। এটির সাথে কয়েকটি সমস্যা, এটি --noop এর সাথে কাজ করে না কারণ state.yaml ফাইলটি md5 চেকসাম / প্যাকেজ সংস্করণ --noop মোডে আপডেট করবে। আমি নিশ্চিত নই যে এই মুহূর্তে এটি ট্র্যাক করতে পারছি না কারণ এটি কোনও মুলতুবি ত্রুটি।

file { '/etc/tzinfo':
  audit => content,
}

exec { '/usr/bin/mysql_tzinfo_to_sql':
  subscribe => File['/etc/tzinfo'],
}

আরও নির্ভরযোগ্য পদ্ধতি হ'ল ফাইলটি অন্য কোথাও অনুলিপি করা এবং আপডেটগুলি ট্রিগার করার জন্য এটি ব্যবহার করা (অবস্থানটি গুরুত্বপূর্ণ নয় আমরা কেবল উত্স হিসাবে মূল tzinfo ট্র্যাক করছি)।

file { '/etc/puppet/stage/tzinfo':
  source => '/etc/tzinfo',
}

exec { '/usr/bin/mysql_tzinfo_to_sql':
  subscribe => File['/etc/tzinfo'],
}

দ্বিতীয় পদ্ধতিটি প্যাকেজগুলির সাথে কাজ করে না তবে আপনি --noop এবং state.yaml সমস্যাগুলি এড়াতে পারবেন।

তৃতীয় প্রশ্ন সম্পর্কিত, হ্যাঁ, আপনি পাইপ এবং পুনঃনির্দেশগুলি ব্যবহার করতে পারেন (একটি শিরোনাম ব্যবহার করুন এবং কমান্ড অ্যাট্রিবিউটে কমান্ডটি রাখবেন):

exec { 
  '/bin/echo foo | grep foo > /tmp/foo':
}

এটি একটি দুর্দান্ত উত্তর - যদিও আমি বর্তমান টাইমজোনটি দেখতে আগ্রহী নই, তবে / usr / share / tzinfo- তে টাইমজোন ডেটার পরিবর্তিত। / নিরীক্ষা / ভাগ / tzinfo বিপরীতে 'নিরীক্ষণ => সমস্ত' ব্যবহার করা যথেষ্ট, ঠিক আছে?
মেই

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

ভাল পয়েন্ট - যদিও আমি পুনরাবৃত্তি বলতে চাইনি। ডিরেক্টরি / usr / share / tzinfo প্রতিবার tddata প্যাকেজ আপডেট হওয়ার সময় পরিবর্তন করা উচিত - কমপক্ষে, এটাই ছিল আমার চিন্তাভাবনা।
মেই

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

5

হ্যাঁ, আপনি এটি করতে সক্ষম হবেন।

* তাত্ত্বিক কোড উদাহরণ

package{'tzinfo':
  audit  => all,
  notify => Exec['mysql_tzinfo_to_sql'],
}

exec{'mysql_tzinfo_to_sql':
  refreshonly  => true,
  command      => "bash -c '/usr/local/bin/mysql_tzinfo_to_sql >> /var/log/stuff.log'",
}
  1. হ্যাঁ, বিজ্ঞপ্তি মেটা-প্যারামিটারের মাধ্যমে। তবে আমি 100% ইতিবাচক নই যে পুতুলের নিয়ন্ত্রণের বাইরে প্যাকেজ সংস্করণ পরিবর্তন হয় তবে পুতুল ২.6 এ নতুন অডিট বৈশিষ্ট্যটি একটি বিজ্ঞপ্তিকে ট্রিগার করবে।

  2. হ্যাঁ, রিফ্রেশনি => সত্য সহ

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


1
আমার মনে হয় রিফ্রেশনিই এখানে গুরুত্বপূর্ণ। Bash কমান্ডটি অসম্পূর্ণ বলে মনে হচ্ছে: যদি সেই কমান্ডটি কাজ করে, তবে একটি সাধারণ শেল কমান্ডটি খুব বেশি কাজ করা উচিত, তাই না? যে কোনও ক্ষেত্রে এটির মতো শোনাচ্ছে।
মেই

আপনাকে bash -cপুনর্নির্দেশ করার জন্য এটি ব্যবহার করা দরকার?
টম অ্যান্ডারসন

হ্যাঁ, bash -cএই উদাহরণে শেল পুনর্নির্দেশের জন্য প্রয়োজনীয়। পুতুল এর জন্য একটি ইন্টারেক্টিভ শেল ব্যবহার করে না exec
রোবট

2

আমি বিশ্বাস করি আমি এই কাজটি করতে সক্ষম হয়েছি। আমার পুতুল প্রকাশের প্রাসঙ্গিক বিটগুলি এখানে:

file { '/usr/share/zoneinfo':
  audit => mtime,
  recurse => true,
  notify => Exec['mysql_tzinfo']
}

exec { 'mysql_tzinfo':
  refreshonly => true,
  command => 'mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql',
}

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


2

এই প্রশ্নটি পুরানো, তবে আমি এটির অন্যদিকে কিছু অনুসন্ধান করে ঘুরেছিলাম এবং বিবেচনার জন্য একটি বিকল্প উত্তর যুক্ত করতে চেয়েছিলাম।

এটি পুতুল ব্যবহার করে না: যেহেতু আমরা একটি আরপিএম ইনস্টল / আপডেটে ট্রিগার করতে চাইছি কেন আরপিএম ট্রিগার ব্যবহার করবেন না? এটি ইনস্টলটি করতে ব্যবহৃত সিস্টেমে খুব ভাল ব্যবহার করে, এটি সঠিকভাবে প্রসারিত করে যার জন্য এটি নকশা করা হয়েছিল।

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

যদিও আমরা এখানে পুতুলের জন্য রয়েছি, এবং পুতুলের সাথে সমস্যাটি সমাধানযোগ্য, আমি উদ্বিগ্ন যে এটি একটি সরঞ্জামের দুর্বল অংশটি খারাপ অবস্থার সাথে খারাপ প্রতিক্রিয়া জানাতে পারে যা ইতিমধ্যে হোস্ট এবং একটি সরঞ্জামে থাকা একটি সরঞ্জামের সাহায্যে ট্রিগার করা আরও সহজ that's যার মধ্যে বাক্সের বেশিরভাগ প্রশাসকদের তাদের পায়ের আঙ্গুলটি ডুবিয়ে দেওয়া উচিত ছিল। লাইনের বাইরে সমাধানের পরামর্শ দেওয়ার জন্য দুঃখিত, তবে আপনি যদি ভবিষ্যতে এই বার্তাটি ঘুরে বেড়াচ্ছেন আমার মতো, এবং আরপিএম ট্রিগার আপনার জন্য একটি বিকল্প, দয়া করে এটি বিবেচনা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.