วิธีการปรับใช้แอปพลิเคชัน (ใน. tar.gz) ด้วย Puppet


11

ฉันเป็นผู้เริ่มต้นด้วย Puppet และฉันต้องการทราบว่าฉันกำลังใช้งานแอปพลิเคชันด้วย Puppet อย่างถูกต้องหรือไม่

applciations อยู่ในไฟล์ tar.gz ซึ่งมีไฟล์ที่มีหมายเลขเวอร์ชัน ดังนั้นฉันจะทำสิ่งนี้เพื่อปรับใช้ (ฉันไปบนเซิร์ฟเวอร์และทำการรีสตาร์ทไคลเอ็นต์เพื่อรับ tarball ใหม่):

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"] ],
    }

แต่เมื่อฉันต้องการอัปเกรดฉันไม่รู้ว่าจะพูดว่า Puppet เพื่อลบไดเรกทอรีเก่าหรือไม่ ตัวอย่างเช่นถ้าฉันต้องการอัพเกรดรุ่น 56 เป็น 57: ฉันต้องลบไดเรกทอรีรุ่น 56

ฉันได้ยินเกี่ยวกับ Capristrano และดูเหมือนว่าจะดีกว่าที่จะใช้ Puppet สำหรับแพ็คเกจ managinig, ไฟล์ config และการใช้ Capristrano เพื่อปรับใช้แอพพลิเคชั่นใช่ไหม?

ขอบคุณ


ฉันใช้โมดูลforge.puppetlabs.comเพื่อจัดการการดาวน์โหลด / การคลายการบีบอัด / การวางสิ่งต่าง ๆ ซึ่งมีให้ใช้งานเป็น tarballs เท่านั้น มันใช้งานได้ดี
jrjohnson

คำตอบ:


0

ฉันต้องการทราบว่าฉันกำลังใช้งานแอพพลิเคชัน Puppet อย่างถูกต้องหรือไม่

ไม่คุณไม่ใช่

คุณควรใช้การจัดการแพ็คเกจที่มีอยู่ในระบบปฏิบัติการของคุณ หากซอฟต์แวร์ของคุณอยู่ในtar.gzรูปแบบที่คุณควรจะ re-แพคเกจเฉพาะ.deb, .rpmหรืออะไรก็ตาม

หากซอฟต์แวร์เป็นสิ่งที่พัฒนาขึ้นในเครื่องคุณควรใช้เครื่องมือสำหรับสร้าง / ปรับใช้ที่พร้อมใช้งาน


10
ในโลกที่สมบูรณ์แบบผู้ดูแลระบบจะใช้เวลาในการสร้างแพ็คเกจจาก tarballs ในโลกแห่งความเป็นจริงประสบการณ์ของฉันแสดงให้เห็นว่าสิ่งนี้ไม่ได้เกิดขึ้น ลูกค้าของเราติดตั้งแอปพลิเคชั่นมากมายบางครั้งแอปพลิเคชันที่มีขนาดใหญ่มากจาก tarballs และไม่มีความตั้งใจที่จะเปลี่ยนแปลงสิ่งนี้
EmmEff

4
@EmmEff นั่นไม่ใช่ความแตกต่างระหว่างโลกที่สมบูรณ์และโลกแห่งความเป็นจริง นั่นเป็นข้อแตกต่างระหว่างสถานที่ "เราติดอยู่กับวิธีเก่าและไม่พร้อมสำหรับการจัดการการกำหนดค่าอัตโนมัติ" และสถานที่ที่การจัดการการกำหนดค่าทำงาน ฉันได้เห็นทั้งสอง - และแม้กระทั่งเห็นการย้อนหลังในอดีตด้วยการเปลี่ยนผู้ดูแลระบบ
Daniel C. Sobral

5
คุณมีสิทธิ์ที่จะแสดงความคิดเห็นของคุณ ข้อสังเกตของฉันในโลกแห่งความเป็นจริงนั้นแตกต่างจากนั้น
EmmEff

13

คุณอาจต้องการลองใช้fpmเพื่อสร้าง RPM หรือ DEB ของ tarballs ของคุณ มันใช้งานง่ายมากและคุณไม่ต้องเข้าใจอะไรเกี่ยวกับรูปแบบแพ็คเกจที่คุณไม่ต้องการ

เพื่อตอบคำถามเดิมของคุณวิธีที่ถูกต้องในการปรับใช้แอปพลิเคชันด้วย Puppet คือการทำให้ Puppet ทำงานได้น้อยที่สุด execแหล่งข้อมูลที่ซับซ้อนใด ๆที่ดาวน์โหลดและแยก tarballs นั้นมีความเปราะบางมากและทำให้ Puppet yum installเป็นเพียงแพ็คเกจที่มีสุขภาพดีในระยะยาว


ฉันรู้ว่าสิ่งที่ฉันทำผิดมาก แต่อาคารรอบต่อนาทีทำให้ฉันกลัวอยู่เสมอ fpm คือความรอดของฉัน ขอบคุณ Handyman5 F-ใช่
8None1

ความคิดเห็นที่ดี แทนที่จะเทศนา "use rpm" ที่คุณให้ไว้ง่ายๆ "ใช้ rpm ปลอมและใช้เครื่องมือง่ายๆนี้เพื่อให้บรรลุ"
Andre de Miranda

6

ฉันจะพยายามอย่างหนักในการรวมแอปเป็นแพคเกจ RPM หรือ. deb และสร้างที่เก็บ yum หรือ apt เพื่อเก็บแพ็คเกจ บรรจุภัณฑ์ของ tarball หรือ zip ที่คุณเพิ่งเปิดเข้าไปในไดเรกทอรีนั้นค่อนข้างง่าย (แต่ควรเป็นคำถามแยกต่างหาก) บรรจุภัณฑ์ที่มีวิธีการติดตามรุ่นอย่างดีและจัดการทุกประเภทของสิ่งที่เพิ่งเปิด tarball จะไม่จัดการได้ดี

ถ้าฉันไม่สามารถสร้างแพ็คเกจที่เหมาะสมได้ฉันจะทำสิ่งนี้:

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;
}

(ซึ่งคุณได้ทำการแก้ไขสิ่งต่าง ๆ อย่างไม่ถูกต้องกับต้นแบบหุ่นอาจต้องใช้แพคเกจใดก็ตามที่ใช้บริการและแจ้งบริการใด ๆ


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

นอกจากนี้การทำทุกอย่างในฐานะผู้บริหารนั้นน่าเกลียดและอาจแก้ไขปัญหาได้ยากเมื่อสิ่งต่าง ๆ เริ่มแตกหัก หากเป็นไปได้ให้เก็บไฟล์แอพเวอร์ชันที่แตกออกมาบนเซิร์ฟเวอร์ puppet และใช้fileทรัพยากรแบบเรียกซ้ำเพื่อเรียกคืน


0

แน่นอนฉันชอบบรรจุ tarball (RPM หรืออะไรก็ตาม) แต่ไม่กี่คำใบ้:

หากต้องการลบเวอร์ชันเก่าคุณสามารถลบเวอร์ชันทั้งหมดยกเว้นเวอร์ชันที่คุณกำลังติดตั้ง ด้วยการทุบตีพอที่ผ่านมาและ extglob rm -r /usr/local/apps/path/apps-version-!(${version})เปิดการใช้งานที่คุณสามารถทำได้ ระวังการลบไฟล์ปรับแต่งและอื่น ๆ คุณสามารถสร้างexec refreshonly => trueและnotifyจากการดำเนินการติดตั้ง

คุณสามารถใช้แอตทริบิวต์แทนcreates unless => 'test -f ...'แต่เข้าใจได้มากกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.