পুতুলের সাথে কীভাবে অ্যাপ্লিকেশনগুলি (.tar.gz) স্থাপন করবেন?


11

আমি পুতুলের সাথে একজন শিক্ষানবিস এবং আমি জানতে চাই আমি পুতুলের সাথে অ্যাপ্লিকেশন স্থাপনের সঠিক পথে আছি কিনা।

অ্যাপ্লিকেশনগুলি একটি tar.gz ফাইলে রয়েছে যা সংস্করণ নম্বর সহ একটি ফাইল রয়েছে। সুতরাং, আমি স্থাপনার জন্য এটি করি (আমি সার্ভারে যাই এবং নতুন টারবাল তুলতে ক্লায়েন্ট পুনরায় চালু করি):

nodes.pp

node 'server1.domain.com' inherits basenode {
    apps { apps:
            version => 56,
            apps_name => "apps_tarball.tgz",
    }


init.pp (modules)

exec {"apps_wget":
            command => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
            unless  => "test -f /tmp/${version}-${apps_name}",
            require => [ Package["wget"] ],
    }

exec {"apps_unzip":
            cwd     => "/usr/local/apps/path",
            command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
            unless  => "test -f /usr/local/apps/path/apps-version-${version}",
            require => [ Package["unzip"], Exec["container_wget"] ],
    }

তবে, যখন আমি আপগ্রেড করতে চাই, তখন পুপেটকে পুরানো ডিরেক্টরিটি মুছতে বলি না? উদাহরণস্বরূপ, আমি যদি ৫ 56 থেকে ৫ 57 সংস্করণে আপগ্রেড করতে চাই: আমাকে অবশ্যই 56 এর সংস্করণ ডিরেক্টরিটি মুছতে হবে।

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

ধন্যবাদ।


আমি কেবল টারবল হিসাবে উপলভ্য জিনিসগুলি ডাউনলোড / ডিকম্প্রেসিং / রাখার ব্যবস্থা করতে ফরজ.পুপেটল্যাবস.কম মডিউলটি ব্যবহার করি । এটি দুর্দান্ত কাজ করে।
jrjohnson

উত্তর:


0

আমি জানতে চাই আমি পুতুলের সাথে অ্যাপ্লিকেশন স্থাপনের সঠিক পথে আছি কিনা।

না তুমি না.

আপনার অপারেটিং সিস্টেমে উপলব্ধ প্যাকেজ পরিচালনা ব্যবহার করা উচিত। আপনার সফ্টওয়্যার থাকে tar.gzবিন্যাস, আপনি এটি স্থানীয়ভাবে হিসেবে পুনরায় প্যাকেজ উচিত .deb, .rpmবা যাই হোক না কেন।

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


10
নিখুঁত বিশ্বে প্রশাসকরা টারবলগুলি থেকে প্যাকেজ তৈরি করতে সময় নেবে। বাস্তব বিশ্বে আমার অভিজ্ঞতা দেখিয়েছে যে এটি ঘটে না। আমাদের ক্লায়েন্টরা অনেক সময় অ্যাপ্লিকেশন ইনস্টল করেন, কখনও কখনও খুব বড় অ্যাপ্লিকেশনগুলি, টারবলগুলি থেকে এবং এটি পরিবর্তন করার কোনও উদ্দেশ্য নেই।
ইম্মেফ

4
@ এমএমএফ এটি নিখুঁত বিশ্ব এবং বাস্তব বিশ্বের মধ্যে কোনও পার্থক্য নয়। "আমরা পুরানো পথে আটকে আছি এবং স্বয়ংক্রিয় কনফিগারেশন পরিচালনার জন্য প্রস্তুত নই" এমন জায়গাগুলি এবং জায়গাগুলির মধ্যে যেখানে কনফিগারেশন পরিচালনা কাজ করে work আমি উভয়ই দেখেছি - এবং এমনকি অ্যাডমিনগুলির পরিবর্তনের মাধ্যমে পূর্ববর্তীটিতে পূর্বের রূপান্তরিত হতে দেখেছি।
ড্যানিয়েল সি সোব্রাল

5
আপনার মতামত আপনার অধিকার আছে। বাস্তব বিশ্বে আমার পর্যবেক্ষণগুলি এর চেয়ে আলাদা।
এমএমএফ

13

ব্যবহার করে আপনি চেষ্টা করতে পারেন FPM RPM গুলি অথবা আপনার tarballs এর DEBS করা; এটি ব্যবহার করা সত্যই সহজ এবং আপনি যে প্যাকেজ ফর্ম্যাটগুলি চান না সেগুলি সম্পর্কে আপনাকে কিছুই বুঝতে হবে না।

আপনার আসল প্রশ্নের উত্তর দেওয়ার জন্য, পুতুলের সাথে অ্যাপ্লিকেশন স্থাপনের সঠিক উপায় হ'ল পুতুলকে যতটা সম্ভব কম কাজ করা; execটার্বলগুলি ডাউনলোড এবং উত্তোলনের যে কোনও জটিল সংস্থান খুব, খুব ভঙ্গুর হতে বাধ্য এবং পুতুলকে কেবল yum installএকটি প্যাকেজ তৈরি করা দীর্ঘমেয়াদী।


আমি জানতাম আমি কী করছিলাম তা খুব ভুল ছিল। তবে আরপিএম বিল্ডিং আমাকে সর্বদা ভয় দেখিয়ে চলেছে। এফপিএম আমার উদ্ধার। আপনাকে হ্যান্ডিম্যান 5 ধন্যবাদ। F-হাঁ।
নোট 1

দুর্দান্ত মন্তব্য। "ব্যবহার RPM" প্রচারের পরিবর্তে আপনি একটি সহজ "জাল আরপিএম ব্যবহার করুন এবং এটি অর্জনের জন্য এই সাধারণ সরঞ্জামটি ব্যবহার করুন" সরবরাহ করেছেন।
আন্দ্রে দে মিরান্ডা

6

আমি RPM বা .deb প্যাকেজ হিসাবে অ্যাপটি বান্ডিল করার জন্য এবং প্যাকেজগুলি ধরে রাখতে একটি ইয়াম বা অ্যাপ্ট রিপোজিটরি তৈরির জন্য খুব চেষ্টা করব। আপনি কেবল একটি ডিরেক্টরিতে খুলছেন এমন একটি টারবাল বা পিনের প্যাকেজিং আপ খুব সহজ (তবে এটি একটি পৃথক প্রশ্ন হওয়া উচিত)। এইভাবে উপলভ্য প্যাকেজিং সংস্করণগুলি সুন্দরভাবে ট্র্যাক করে এবং এমন সব ধরণের জিনিস পরিচালনা করে যা কেবল একটি টারবাল খোলার মাধ্যমে ভাল হ্যান্ডেল করা যায় না।

আমি যদি সত্যিই একটি সঠিক প্যাকেজ তৈরি করতে না পারি তবে আমি এই জাতীয় কিছু করব:

nodes.pp:

node 'server1.domain.com' inherits basenode {
    apps { apps:
            version    => 56,
            oldversion => 55,
            apps_name  => "apps_tarball.tgz",
    }

init.pp (মডিউল):

file {
   [ "/usr/local/apps/path/apps-version-${oldversion}", "/tmp/${oldversion}-${apps_name}" ]:
            recurse => true,
            ensure  => absent;
}
exec {
      "apps_wget_${apps_name}":
            command   => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
            logoutput => on_failure,
            creates   => "/tmp/${version}-${apps_name}",
            require   => [ Package["wget"] ];

      "apps_unzip_${apps_name}":
            cwd     => "/usr/local/apps/path",
            command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
            creates => "/usr/local/apps/path/apps-version-${version}",
            require => [ Package["unzip"], Exec["container_wget"], Exec["apps_wget_${apps_name}] ];
}

অন্য বিকল্পটি হ'ল কেবল একটি পুনরাবৃত্ত পুতুল সংস্থান যেমন:

file {
    "/usr/local/apps/path/":
      source => "puppet:///modules/modulename/apps/path",
      ensure => directory,
      replace => true,
      purge   => true,
      recurse => true;
}

(যেখানে আপনি পুতুলের মাস্টারের কাছে ইতিমধ্যে অনতিচিত জিনিসগুলি রয়েছে Pro সম্ভবত পরিষেবাটি যে প্যাকেজটি চালাচ্ছে তা প্রয়োজন এবং এটি যে পরিষেবাটি চালু রয়েছে তা অবহিত করুন)।


0
file { "/usr/local/apps/path/apps-version-${old-version}":
    ensure => absent
}

একদিকে যেমন, এক্সিকিউটস হিসাবে সমস্ত কিছু করা খুব কুরুচিপূর্ণ, এবং যখন জিনিসগুলি বিরতি শুরু করে তখন সমস্যা সমাধান করা কঠিন হতে পারে; যদি আপনি পারেন তবে পুতুল সার্ভারে অ্যাপ্লিকেশন ফাইলগুলির এক্সট্রাক্ট সংস্করণগুলি রাখতে পারেন এবং fileপুনরুদ্ধার করার জন্য একটি পুনরাবৃত্তি সংস্থান ব্যবহার করবেন ?


0

আমি অবশ্যই টার্বল প্যাকেজিং (আরপিএম বা যাই হোক না কেন) এর পক্ষপাতী, তবে কয়েকটি ইঙ্গিত:

পুরানো সংস্করণ মুছতে আপনি কেবল সমস্ত সংস্করণ মুছতে পারেন তবে যেটি আপনি ইনস্টল করছেন। সাম্প্রতিক পর্যায়ে যথেষ্ট ব্যাশ এবং এক্সট্লোব সক্রিয় করে আপনি এটি করতে পারেন rm -r /usr/local/apps/path/apps-version-!(${version})। কনফিগারেশন ফাইল এবং এগুলি মুছতে সাবধান থাকুন। আপনি করতে পারেন exec refreshonly => trueএবং তারপর notifyইনস্টলেশন Exec থেকে এটা।

আপনি এর createsপরিবর্তে বৈশিষ্ট্যটি ব্যবহার করতে পারেন unless => 'test -f ...'। একটি কিন্তু আরও বোধগম্য।

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