Назад | Перейти на главную страницу

Марионетка Augeas с / etc / hosts

Я новичок в Авгия, но мне сказали, что это то инструмент для изменения конфигурации с помощью марионетки.

Я пытаюсь создать простой класс, который добавляет строку в / etc / hosts, если она еще не существует.

    augeas { "test_config":
             context => "/files/etc/hosts/01/",
             changes => [
                         "set ipaddr 192.168.100.3",
                         "set canonical test.localdomain",
                         "set alias[1] test",
                        ],

Это создает линию, за которой я следую.

Файл hosts выглядит так

127.0.0.1       localhost       localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost       localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.3     test.localhost test
192.168.0.4     badger.oam.eeint.co.uk badger

Поскольку мне не нужны дубликаты, я создал строку соответствия в augtool, чтобы найти совпадение.

augtool> match / files / etc / hosts / 3 / alias / files / etc / hosts / 3 / alias = test

Моя текущая конфигурация кажется в лучшем случае непредсказуемой

    augeas { "test_config":
             context => "/files/etc/hosts/*/",
             changes => [
                         "set ipaddr 192.168.100.3",
                         "set canonical test.localdomain",
                         "set alias[1] test",
                        ],

            onlyif => "match alias 'test'",
           }

Может ли кто-нибудь помочь мне в этом вопросе в правильном направлении?

Для управления записями хоста вы должны использовать host тип ресурса.

Этот тип по умолчанию поставляется с Puppet, но вы также можете использовать его с Augeas (что я бы рекомендовал), используя augeasproviders модуль (и, в частности, модуль augeasproviders-base).

Почему бы не использовать exec ресурс?

exec{'serverfault demo':
     command => 'echo 192.168.100.3       test.localdomain >> /etc/hosts',
     unless => 'grep test.localdomain /etc/hosts',
     path => ['/bin','/usr/bin'],
}

Это запустит echo команду и добавьте эту строку, только если строка 192.168.100.3 test.localdomain не существует в / etc / hosts.