วิธีคัดลอกไฟล์ไปยังเครื่องทั้งหมดโดยใช้ puppet master?


12

ฉันได้ติดตั้ง puppetmaster ใน Ubuntu 11.04 และฉันได้ติดตั้ง puppet ในไคลเอนต์ของฉันทั้งหมด ฉันได้เข้าร่วมกับลูกค้าหุ่นเชิดของฉันกับเจ้านายหุ่นเชิด เป็นไปได้หรือไม่ที่จะคัดลอกไฟล์ไปยังไคลเอนต์ puppet เหล่านี้ทั้งหมดจาก puppet master?

ตัวอย่างเช่น:

ฉันมีไฟล์ชื่อ datas.xls ในเดสก์ท็อปของฉัน (Puppet Master) ฉันจะคัดลอกไฟล์นี้ไปยังลูกค้าหุ่นกระบอกของฉันทั้งหมดในตำแหน่งต่อไปนี้ (/ home / operator1 / Desktop / Backup /) ได้อย่างไร

ปรับปรุง:

  • สวัสดียังไม่ได้แชร์ไฟล์
  • วิธีแก้ไขบรรทัดนี้puppet:///modules/module_name/datas.xlsไฟล์ที่จะทำการคัดลอกอยู่ภายใต้ตำแหน่งนี้/etc/puppet/modules/mymodule/manifests/datas.xls?

ข้อผิดพลาดบนไคลเอ็นต์: (แก้ไขแล้ว)

root@testing:~# puppetd --test 
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class sudo at /etc/puppet/manifests/site.pp:2 on node testing.chn.jd.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

ข้อผิดพลาด 2 บนไคลเอ็นต์:

root@tme13:~# puppetd --test
err: Could not run Puppet configuration client: Could not retrieve local facts: bad URI(is not URI?): http://169.254.169.254/2008-02-01/meta-data/<HTML><HEAD><TITLE>HTTP access denied</TITLE></HEAD><BODY><img src/

อัพเดทใหม่:

จะใช้โมดูลนี้กับทุกโหนดได้อย่างไร ไฟล์ดังกล่าวจะถูกคัดลอกไปยังโหนดทั้งหมด


... แต่คุณไม่ได้ถามคำถามนี้หรือ askubuntu.com/questions/61080/…
fossfreedom

ใช่ แต่ทางออกไม่ทำงานอีกต่อไป
karthick87

ยังไม่ชัดเจนผู้ใช้เพียงคัดลอกเนื้อหาจากบางเว็บไซต์
karthick87

ยังไม่มีเหตุผลที่จะถามคำถามใหม่ (?) btw ฉันคัดลอกมาจากลิงค์ Jorge ให้ฉันและเขาบอกให้ฉัน c / p มัน;) afaik สิ่งที่อยู่ในคำตอบที่ยังคงทำงาน!?
Rinzwind

นี่คืออีกการอ้างอิง: serverfault.com/questions/200101/…
Rinzwind

คำตอบ:


24

หุ่นเชิดเป็นสัตว์ประหลาดนิดหน่อยที่จะมุ่งหน้าไปรอบ ๆ ดังนั้นการเรียนรู้จากตัวอย่างจึงไม่ใช่เรื่องเลวร้าย ในด้านล่างฉันสมมติว่าคุณกำลังใช้โมดูล - โปรดพูดในความคิดเห็นหากคุณไม่ต้องการหรือถ้าคุณต้องการรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการรวมโมดูลเข้าด้วยกัน

mymoduleสมมติว่าคุณเริ่มต้นโมดูลใหม่ที่เรียกว่า ในไดเรกทอรีบ้านหุ่นเชิด (โดยปกติ/etc/puppet) บนต้นแบบหุ่นเชิดคุณควรสร้างรายการโมดูลและไดเรกทอรีไฟล์:

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files

จากนั้นสร้างไฟล์ในไดเรกทอรีนั้นชื่อinit.ppและป้อน:

class myfile {
    file { '/home/operator1/Desktop/Backup':
        ensure => directory,
        mode => '0755',
        owner => 'operator1',
        group => 'operator1',
    }

    file { "/home/operator1/Desktop/Backup/datas.xls":
        mode => "0644",
        owner => 'operator1',
        group => 'operator1',
        source => 'puppet:///modules/module_name/datas.xls',
    }
}

จากนั้นใส่datas.xlsไฟล์ลงในfilesไดเรกทอรีของโมดูล- ในตัวอย่างmodules/mymodule/files/นี้ (หมายเหตุอาจมีtemplatesไดเรกทอรีสำหรับเทมเพลตด้วย )

ในmanifests/site.ppไฟล์คุณต้องนำเข้าโมดูลและรวมคลาสโดยทำสิ่งที่ชอบ:

import 'mymodule'

node base {
    include myfile
}

node server1 inherits base {}
node server2 inherits base {
    # extra config here
}

ตรวจสอบให้แน่ใจว่าโหนดทั้งหมดของคุณสืบทอดจากฐานและควรเป็นสิ่งที่คุณต้องทำ ตั้งแต่ puppet 0.25 คุณสามารถใช้นิพจน์ทั่วไปในชื่อโหนดเช่น:

node server[0-9] inherits base {}

แจ้งให้เราทราบในความคิดเห็นหากคุณต้องการคำชี้แจงเพิ่มเติม

การตั้งค่าไคลเอนต์เพื่อพูดคุยกับต้นแบบหุ่นเชิด

ในไคลเอนต์คุณต้องทำ:

sudo apt-get install puppet

แก้ไขแล้ว/etc/default/puppetและการเปลี่ยนแปลงไปSTART=noSTART=yes

แก้ไข/etc/puppet/puppet.confและเพิ่มบรรทัดใน[main]ส่วนเพื่อบอกตำแหน่งที่จะค้นหาต้นแบบหุ่นเชิด:

server=puppet.mydomain.com

sudo puppetd --testแล้วเราสามารถทำการทดสอบการทำงานกับ หากคุณได้รับข้อผิดพลาดที่สำคัญคุณอาจต้องไปที่เซิร์ฟเวอร์หุ่นเชิดหลักและลงนามรหัสลูกค้า ในการตรวจสอบชื่อที่แน่นอนคุณสามารถทำได้sudo puppetca --listแล้วsudo puppetca --sign server1.mydomain.com(หรือชื่อเซิร์ฟเวอร์ใดก็ได้จากคำสั่ง list)

ตอนนี้เริ่มบริการหุ่นเชิดด้วยsudo service puppet startและคุณควรจะไป บริการหุ่นกระบอกจะทำงานทุกชั่วโมงดังนั้นหากคุณอัปเดตสูตรอาหารหุ่นของคุณลูกค้าของคุณทั้งหมดจะได้รับการอัปเดตด้วย

การลบไฟล์

ฉันบันทึกในคำถามเดิมที่คุณต้องการทราบวิธีการลบไฟล์ คุณจะแก้ไขmanifests/init.ppเป็น

file { "/home/operator1/Desktop/Backup/datas.xls":
    ensure => absent,
}

เคล็ดลับที่มีประโยชน์อื่น ๆ

หากคุณกำลังมีปัญหามีบางสิ่งที่คุณสามารถทำได้ ในเครื่องที่ติดตั้งหุ่นกระบอกคุณสามารถตรวจสอบไวยากรณ์ของคุณด้วยการเรียกใช้

puppet --parseonly --ignoreimport myfile.pp

หรือตรวจสอบล็อตทั้งหมดโดยการ--ignoreimportตั้งค่าสถานะแม้ว่าอาจนำไปสู่ข้อผิดพลาดตลกที่ไม่พบข้อผิดพลาดจริง ๆ นอกจากนี้คุณยังสามารถเรียกใช้หุ่นเชิดสดบนเครื่องไคลเอ็นต์หุ่นเชิดโดยทำ:

sudo puppetd --test

ซึ่งแสดงผลลัพธ์ที่เป็นประโยชน์ต่าง ๆ พร้อมข้อผิดพลาดและคำเตือนที่เน้นด้วยสีที่ต่างกัน หากคุณต้องการรายละเอียดมากขึ้นคุณสามารถเรียกใช้:

sudo puppetd --test --debug

แต่โดยทั่วไปแล้วจะสร้างเอาต์พุตจำนวนมากจนยากที่จะลุยได้ดังนั้นให้ทำเช่นนั้นหากคุณได้ลองทำตามขั้นตอนก่อนหน้านี้แล้วและค้างอยู่และต้องการดูทุกสิ่งที่ทำ

หมายเหตุสิ่งนี้ขึ้นอยู่กับหุ่นเชิด 0.25.x ซึ่งเป็นสิ่งที่ฉันใช้ในที่ทำงานในปัจจุบันและเป็นเวอร์ชั่นใน Ubuntu 10.04 รหัสหุ่นกระบอกในส่วนหลักจะยังคงใช้งานได้อย่างแน่นอน แต่รุ่นที่ใหม่กว่าของหุ่นกระบอกจะมีค่าสถานะใหม่ที่สามารถช่วยในการดีบักเอาต์พุต


ให้ฉันลองวิธีแก้ปัญหานี้คืนนี้และแจ้งให้คุณทราบการปรับปรุง ขอบคุณมาก :)
karthick87

วิธีแก้ไขบรรทัดนี้puppet:///modules/module_name/datas.xlsไฟล์ที่จะทำการคัดลอกอยู่ในตำแหน่งนี้/etc/puppet/modules/mymodule/manifests/datas.xls
karthick87

ควรใส่ไฟล์ที่จะคัดลอก/etc/puppet/modules/mymodule/files/datas.xls- ฉันจะอัปเดตคำตอบให้ชัดเจนยิ่งขึ้น
Hamish Downer

โอเคขอบคุณ วิธีการใช้งานรายการ?
karthick87

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