Как скопировать файлы на все машины, используя 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 появились новые флаги, которые могут помочь с отладкой вывода.

Другие вопросы по тегам