Как скопировать файлы на все машины, используя Puppet Master?
Я установил puppetmaster в Ubuntu 11.04 и установил puppet во всех своих клиентах. Я присоединился ко всем своим кукольным клиентам с мастером кукол. Можно ли скопировать файл для всех этих клиентов кукол из мастера кукол?
Например:
У меня есть файл с именем 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/
Новое обновление:
Как применить этот модуль ко всем узлам? Такой, что файл будет скопирован на все узлы.
1 ответ
Puppet - это немного чудовище, чтобы научиться думать, поэтому обучение на примере - это не плохо. В приведенном ниже я предполагаю, что вы используете модули - пожалуйста, скажите в комментарии, если вы не или если вам нужно больше деталей о том, как собрать модуль вместе.
Допустим, вы запускаете новый модуль под названием mymodule
, В домашнем каталоге марионеток (обычно /etc/puppet
) на Puppet Master вы должны создать каталог манифестов и файлов модуля:
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
}
Убедитесь, что все ваши узлы наследуются от базы, и это должно быть все, что вам нужно сделать. Начиная с версии 0.25 вы можете использовать регулярные выражения в имени узла, например:
node server[0-9] inherits base {}
Дайте мне знать в комментариях, если вам нужны дополнительные разъяснения.
Настройка клиента для общения с мастером кукол
На клиенте нужно сделать:
sudo apt-get install puppet
Затем редактировать /etc/default/puppet
и изменить START=no
в START=yes
,
Также отредактируйте /etc/puppet/puppet.conf
и добавьте строку в [main]
раздел, чтобы сказать, где найти хозяина кукол:
server=puppet.mydomain.com
Тогда мы можем сделать тестовый прогон с sudo puppetd --test
, Если вы получили ошибки в ключах, вам может потребоваться перейти на главный сервер puppet и подписать ключ клиента. Чтобы проверить точное имя, которое вы можете сделать 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 вы можете проверить свой синтаксис, запустив
puppet --parseonly --ignoreimport myfile.pp
или проверить всю партию, вынув --ignoreimport
флаг, хотя это может привести к некоторым забавным сообщениям об ошибках, которые на самом деле не являются ошибками, которые я нашел. Вы также можете запустить Puppet Live на компьютере клиента Puppet, выполнив:
sudo puppetd --test
который показывает различный полезный вывод, с ошибками и предупреждениями, выделенными разными цветами. Если вы хотите еще больше деталей, вы можете запустить:
sudo puppetd --test --debug
но это, как правило, генерирует так много выходных данных, что трудно пройти через них, так что делайте это только в том случае, если вы уже пробовали предыдущие шаги и застряли, и вам нужно увидеть, что все делается.
Обратите внимание, что это основано на Puppet 0.25.x, который я сейчас использую на работе, а также версия в Ubuntu 10.04. Код puppet в главном разделе определенно будет работать, но в более поздних версиях puppet появились новые флаги, которые могут помочь с отладкой вывода.