LINUX.ORG.RU

Puppet зогадочен.

 ,


0

1

Следим за руками.

[root@blah ~]# puppet apply /etc/puppet/manifests/nodes.pp
Notice: Compiled catalog for blah.co.vu in environment production in 0.04 seconds
Notice: Finished catalog run in 0.03 seconds
[root@blah ~]#

[root@blah~]# cat /etc/puppet/manifests/nodes.pp
node 'default' {
}
node 'blah2' {
include ssh
file { «/tmp/test»:
ensure => «/tmp/test»,
}
file {'testfile':
path => '/tmp/testfile',
ensure => present,
mode => 0640,
content => «I'm a test file.»,
}
}

[root@blah2~]# puppet agent --test
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for blah2.co.vu
Info: Applying configuration version '1401654600'
Notice: Finished catalog run in 0.03 seconds
[root@blah2~]#

[root@blah2~]# ls -l /tmp/
total 0

ПОЧЕМУ???!!?

Ни одного еррора ни в каких логах. То ли лыжи не едут, то ли более конченых мануалов чем у папета я еще нигде не видел. Обьясните что не работет, ибо нервов читать это убожество нет.

Ответ на: комментарий от anonymous

Мамой клянусь, брошу и возьму. Мне просто интересно, как можно так кончено написать продукт чтобы елементарная операция фейлилась без ошибок даже при verbosity=debug?

rorschach ()
Ответ на: комментарий от rorschach

Еще один не осилил.

Info: Caching catalog for blah2.co.vu

Видно, что fqdn не совпадает с определением 'blah2' в nodes.pp. Добавь там домен.

и еще - при безмастерной установке надо указывать путь к манифесту, а не к nodes.pp. http://projects.puppetlabs.com/projects/1/wiki/simplest_puppet_install_pattern

Bers666 ★★★★★ ()

1)

cat /etc/puppet/manifests/nodes.pp

конфиг puppet называется «site.pp»

2)

node 'default' {
}
node 'blah2' {
}
file {'testfile':

В дефолтной ноде у тебя пусто

blah2 не совпадает с именем хоста.

А если у тебя в конфиге есть ноды, то любые классы, не привязанные к нодам, не применяются. Тебя это удивило?

Почитай что ли документацию

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 2)
Ответ на: комментарий от router

Почитай что ли документацию

да шо вы говорите?
[root@blah ~]# puppet apply /etc/puppet/manifests/nodes.pp
Notice: Compiled catalog for blah.co.vu in environment production in 0.09 seconds
Notice: Finished catalog run in 0.05 seconds

[root@blah2 ~]# facter fqdn
blah2.co.vu

rorschach ()
Ответ на: комментарий от rorschach

да шо вы говорите?

Что у меня puppet прекрасно работает и на rhel, и на debian. Так что пока у меня длиннее.

1) сервер puppet отдаёт клиенту не весь манифест, а только ту часть, которая к нему относится. Именно об этом говорит строка

Notice: Compiled catalog for blah.co.vu in environment production in 0.09 seconds

2) вместо встроенного веб-сервера ( как его там, вебрик? ) используй обычный апач, в логах увидишь, что запрашивает клиент. Потом то же самое можешь запросить через curl или wget, и получить то, что получает клиент.

Не забудь, что curl и wget должны использовать клиентский сертификат.

3) Ну и ещё раз. Внимательно сравни fqdn клиента и fqdn в конфиге сервера puppet.

И ещё раз, конфиг сервера - site.pp, а не nodes.pp. Если ты используешь nodes.pp, ты должнен явно включить его в site.pp

router ★★★★★ ()
Ответ на: комментарий от Shtsh

вот пофиксил и получил то что в предыдущем мессадже:

[root@blah ~]# puppet apply /etc/puppet/manifests/nodes.pp
Notice: Compiled catalog for blah.co.vu in environment production in 0.09 seconds
Notice: Finished catalog run in 0.05 seconds

Результата на ноде есс-но нет.

rorschach ()
Ответ на: комментарий от router

fqdn

[root@blah2 ~]# hostname
blah2
[root@blah2 ~]# hostname -f
blah2.co.vu
[root@blah2 ~]# facter fqdn
blah2.co.vu

...и node 'blah2.co.vu' {

Вроде сходится.

Если ты про masterhttp то вот логи от вчера(еще с неправильной нодой в конфиге):

[2014-06-03 06:01:09] - -> /production/file_metadatas/pluginfacts?recurse=true&ignore=.svn&ignore=CVS&ignore=.git&links=manage&checksum_type=md5
[2014-06-03 06:01:09] 107.170.134.8 - - [03/Jun/2014:06:01:09 EDT] «GET /production/file_metadatas/plugins?recurse=true&ignore=.svn&ignore=CVS&ignore=.git&links=manage&checksum_type=md5 HTTP/1.1» 200 283
[2014-06-03 06:01:09] - -> /production/file_metadatas/plugins?recurse=true&ignore=.svn&ignore=CVS&ignore=.git&links=manage&checksum_type=md5
[2014-06-03 06:01:10] 107.170.134.8 - - [03/Jun/2014:06:01:10 EDT] «POST /production/catalog/blah2.co.vu HTTP/1.1» 200 574
[2014-06-03 06:01:10] - -> /production/catalog/blah2.co.vu
[2014-06-03 06:01:10] 107.170.134.8 - - [03/Jun/2014:06:01:10 EDT] «PUT /production/report/blah2.co.vu HTTP/1.1» 200 16
[2014-06-03 06:01:10] - -> /production/report/blah2.co.vu

rorschach ()
Ответ на: комментарий от tazhate

парень не осилил прочитать документацию и жалуется, что ничего не понимает. Я его уже послал на rtfm, он не идёт.

Тогда я сказал ему, как пощупать руками уже работающую систему.

Что не так? Ну поставит он ansible, и будет кричать что у него ansible не работает

З.Ы. использовал puppet, сейчас сменил работу и использую cfengine. После чтения документации проблем нет.

router ★★★★★ ()
Ответ на: комментарий от aol

Где вот здесь я просил blah.co.vu вместо blah2.co.vu ???

node 'default' {
}
node 'blah2.co.vu' {

Плюс. Если в nodes.pp добавить node 'blah.co.vu - замечательно процесит и работает на мастере.

rorschach ()

Выкладывай /etc/puppet/puppet.conf и запусти puppet agent -t -d

Shtsh ★★★★ ()
Ответ на: комментарий от rorschach

1) Третий раз говорю, конфиг puppet - это site.pp, а не nodes.pp. Приводи в топик вывод:

grep import /etc/puppet/manifests/site.pp 
grep nodes.pp /etc/puppet/manifests/site.pp

Без этого ищи сам свои косяки

ты хорошо понимаешь, что раньше ты на клиенте запускал puppet agent, который запрашивает у сервера манифест, а на сервере ты для проверки запускал puppet apply, который выполнит любой указанный файл, хоть /tmp/fuckfuckfuck.pp, непосредственно ( без запроса к мастеру ) ?

2) убедись, что в конфиге ( /etc/puppet/puppet.conf ) клиента есть

[main]
report=true

в конфиге сервера есть

[master]
reports = log # или, например, "log, store, tagmail"

3) Вместо

node 'default' {
}

пиши

node default  {
    notify { 'obsoleted':
        message => "host $hostname still assign to default node"
    }
} 

4) убедись, что ключ клиента существует и подписан

на мастере:

puppetca --list --all | grep blah2

на агенте:

puppet agent --fingerprint

5) смотри лог на мастере ( tail -f $log ) в момент, когда клиент запрашивает манифест. Обычно /var/log/messages для rhel/centos и /var/log/syslog для debian/ubuntu

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от tazhate

Да с ним то понятно все, меня вот немного пугают такие сложности в паппете :)

В выходные кастати в тему, разверну несколько виртуалок для тестов и напишу в вики howto по поднятию сервера puppet с нуля

А вообще в puppet нет сложности с установкой сервера, подключением клиентов и созданнии простого конфига, это в документации хорошо описано.

Сложности в puppet, как и в любой системе управления конфигурацией, начинаются дальше, когда ты будешь создавать конфиг для сложной инфраструктуры. Тут как Си - верёвка достаточной длины, чтобы прострелить себе ногу. Или как в анекдотах о студенческой лабе - вот есть отвётрка, есть болтики, а теперь самостоятельно соберите синхрофазатрон. Т.е. документация хорошо описывает установку агента и сервера, синтаксис манифеста, элементарные задачи; но совершенно не даёт метолодогии, как бороться с крупной инфраструктурой

router ★★★★★ ()
Ответ на: комментарий от tazhate

Дело не в конкретном usecase, а именно в полном отсутствии методологии. Слишком много альтернатив в синтаксисе, почти как в универсальном языке программирования. Школьник не напишет с нуля сложный софт, только профессиональный программист.А puppet предназначен для админов, которые в общем случае не обязаны быть профессиональными программистами

1. можно писать один большой конфиг, можно бить его на отдельные ноды. Ноды могут быть иерархические. Иерархические ноды удобно привязывать к хорошо структурированной сети ( node root, node cod-a inherits root, node cod-a-dmz inherits cod-a, node cod-a-vlan-app inherits cod-a, node cod-a-vlan-infrastucture inherits cod-a, node vm-jira-app inherits cod-a-vlan-app ), но где об этом хоть слово в документации? Никто не мешает сделать node squid, node vm-dca-squid inherits squid, node vm-dcb-squid inherits squid. Или вообще для каждой отдельной ноды ничего не наследовать и писать с нуля.

2. содержимое файла можно менять через file .. content, file .. template или вообще augeas. У них разные, но сильно пересекающиеся области применения. И нигде не сказано, в каких случаях стоит использовать template, а в каких - augeas.

3. Нигде нет хоть какого-нибудь совета, когда кусок кода стоит обособить в модуль. И нигде не сказано что например модуль не должен быть привязан к конкретной сети.

Ну допустим я много писал на perl, плюс в школе дельфи и в институте джентельменский набор. Исходя из своего ИМХО, я привязываю ноды к сетям. Исходя из своего ИМХО, я стараюсь сделать модули независимыми. Исходя из своего ИМХО, я использую в модулях параметризованные классы ( define ) вместо того, чтобы в нодах определить глобальные переменные, а в модуле, исходя из этоих переменных, создавать разную конфигурацию.

Но вот натыкаюсь на example42 и вижу, что они как раз используют глобальные переменные, и мало define. А foreman вообще не умеет через свой веб-интерфейс использовать параметризованные классы.

Кто неправ? Тут спор получается как между сторонниками ООП и ФП . Какждый построил свой собственный puppet, с блекджеком и шлюхами, и нельзя взять чужой модуль и использовать его без переписывания под свою методологию.

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 3)
Ответ на: комментарий от router

А к нему существует хороший best practice ?

Во-первых, у него огромная документация официальная, в которую въезжаешь за минут 5.
http://docs.ansible.com/playbooks_best_practices.html
Во-вторых, гугль отвечает на конкретные моменты моментально :)

Достаточно понять задачу, которую ты хочешь написать и начать писать плейбук. К концу написания плейбуков для этой самой задачи погружение уже будет полное.

Он правда очень, ОЧЕНЬ простой для изучения.

tazhate ★★★★★ ()
Ответ на: комментарий от tazhate

->Он правда очень, ОЧЕНЬ простой для изучения. звучит как «я мудак что связался, присоединяйтесь что я был не один»

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.