2012-06-05 5 views
5

Я пытаюсь получить поддержку augeas на моей машине-бродяге.Поддержка Augeas на моей бродяжнической машине?

Я попытался установить некоторый пакет с этими директивами:

package { "augeas-tools": ensure => installed } 
package { "libaugeas-dev": ensure => installed } 
package { "libaugeas-ruby": ensure => installed } 

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

err: Could not find a suitable provider for augeas 

Я используя точный32 официальный бокс с Vagrant 1.0.3.

Vagrant 1.0.3 имеет рубин 1.8.7 и кукольного 2.7.14

$ ruby -v 
$ ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux] 
$ puppet help 
$ Puppet v2.7.14 

Это мой маленький манифест с PHP класса, включенным после апача класса, MySQL и других классов испытания в отдельности. Все работает правильно, за исключением команды augeas.

class php { 

    exec { "apt-update": 
     command  => "/usr/bin/apt-get update", 
     refreshonly => true; 
    } 

    package { "augeas-tools": ensure => installed } 
    package { "libaugeas-dev": ensure => installed } 
    package { "libaugeas-ruby": ensure => installed } 

    package { "php5":    ensure => installed } 
    package { "php5-cli":   ensure => installed } 
    package { "php5-xdebug":  ensure => installed } 
    package { "php5-curl":   ensure => installed } 
    package { "php5-intl":   ensure => installed } 
    package { "php5-imap":   ensure => installed } 
    package { "php5-mcrypt":  ensure => installed } 
    package { "php5-imagick":  ensure => installed } 
    package { "php5-sqlite":  ensure => installed } 
    package { "php5-gd":   ensure => installed } 
    package { "php-apc":   ensure => installed } 

    package { 
     "libapache2-mod-php5" : 
      ensure => installed, 
      require => Package["php5"] 
    } 

    augeas { "php-cli": 
     require => [ 
         Package["php5"], 
         Package["augeas-tools"], 
         Package["libaugeas-dev"], 
         Package["libaugeas-ruby"], 
        ], 
     context => "/etc/php5/cli/php.ini", 
     changes => [ 
      "set date.timezone Europe/Rome", 
      "set short_open_tag Off", 
     ]; 
    } 

    augeas { "php-apache": 
     require => [ 
         Package["php5"], 
         Package["augeas-tools"], 
         Package["libaugeas-dev"], 
         Package["libaugeas-ruby"], 
        ], 
     context => "/etc/php5/apache2/php.ini", 
     changes => [ 
      "set date.timezone Europe/Rome", 
      "set short_open_tag Off", 
     ]; 
    } 

} 

После установки пакетов, войдя в бродячей машину с "бродячей SSH", я запустить:

[email protected]:~$ ruby -raugeas -e "puts Augeas.open" 
#<Augeas:0xb77a3598> 

Спасибо заранее!

+0

Какую версию марионетки вы используете, и как выглядит ваш марионеточный код? –

+0

Я добавил запрошенную вами информацию. Я надеюсь, что это поможет ... –

ответ

1

На Puppet 2.7.14 этот should work, поскольку зависимости для провайдеров будут оцениваться только тогда, когда они понадобятся - т. Е. Когда Puppet должен запускать эти ресурсы Augeas.

Без полного файла журнала Puppet для подтверждения, я подозреваю, что это связано с тем, что вам не хватает явных зависимостей между пакетами Augeas и ресурсами Augeas, которые им нужны. Помните, что перечисление ресурсов в манифесте в этом порядке не означает, что Puppet выполняет его таким образом.

Вы можете либо добавить требуются параметры для каждого ресурса Авгий:

augeas { "php-cli": 
    require => [ Package["php5"], Package["libaugeas-ruby"] ], 
    # ... 
} 

Или же используйте chaining syntax автоматически сделать каждый ресурс Авгий зависит от пакета. Добавьте это на линии внутри класса, но не внутри любого ресурса:

Package["libaugeas-ruby"] -> Augeas <| |> 
+0

Я добавил все требования к директиве augeas, но проблема все еще сохраняется. Примечание. Я отредактировал основной вопрос с новым кодом, включая новый. Спасибо за ответ ... –

+0

Хорошо, вы можете попробовать запустить эту команду после установки libaugeas-ruby? 'ruby -raugeas -e" ставит Augeas.open "' –

+0

, добавленный к основному вопросу: #

7

Оказывается, что это не было зафиксировано в bug #6907, что я ссылается на мой другой ответ. Это исправление работает только для поставщиков Puppet, которые зависят от команд, которые затем были поставлены во время прогона.

Для провайдера Augeas он использует внутренний кукол, называемый «функциями», чтобы проверить, доступна ли библиотека ruby-augeas или нет. Функции проверяются только один раз, и результаты кэшируются, поэтому даже после установки библиотеки это означает, что функция по-прежнему оценивается как false.

Я зарегистрировал это направление вверх как bug #14822 и отправил (а) pull request с исправлением.Тестирование с помощью патча, теперь я получаю этот успешный пробег:

notice: /Stage[main]//Package[ruby-augeas]/ensure: created 
notice: /Stage[main]//Augeas[test]/returns: executed successfully 

Я не знаком с Vagrant, но я думаю, что вам нужно найти обходной путь, чтобы установить пакет libaugeas-рубиновый до Кукольного работать в тем временем.

+1

Я уверен, что это способ найти решение, но не само решение. Голосовать! :) –

8

Я добавил следующее к моему Vagrantfile, и он начал работать.

Прежде чем объявить кукольный Provisioner добавить следующую строку, если на убунту:

config.vm.provision: оболочка,: рядный => «Sudo APT-получить обновление & & Sudo APT-получить установку кукольный -y "

Это обновит ваши аппетитные пакеты, а затем обновит кукольный клиент, у последней версии которого есть исправление.

1

После прочтения ответа от @ m0dlx я осмотреть /home/vagrant/postinstall.sh файл и обнаружил, что бродяга использует собственную копию Ruby:

# The base path to the Ruby used for the Chef and Puppet gems ruby_home="/opt/vagrant_ruby"

После этого я найти файл augeas.rb в /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/puppet-2.7.19/lib/puppet/provider/augeas/augeas.rb и редактировать его, изменяя линию

confine :true => Puppet.features.augeas? 

в

confine :true => :augeas 

(Короче говоря, я частично применил patch from @m0dlx.)

После этого эта ошибка исчезла.

 Смежные вопросы

  • Нет связанных вопросов^_^