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

Ресурс «файла» марионетки очистил каталог

Я нахожусь в несколько затруднительном положении из-за того, что случайно удалил несколько ТБ важных данных через Puppet, и я просто пытаюсь понять, почему это могло произойти.

Во-первых, я почти уверен, что причина, по которой он исчез (как и в случае неисправности, за исключением резервных копий):

File { backup => false }

в моем site.pp. Узлы были настроены для жесткого монтирования чего-либо через NFS, поэтому точка монтирования / монтирование и строка в fstab выглядят так:

nfsserver:/mount   /mount  nfs   <options> 0 0

Я хотел избавиться от монтирования и заменить его символической ссылкой на то же возможное местоположение (хотя и другим путем).

Мой манифест марионетки выглядел так:

class symlinks::linkdirtest ( ) { 
        file { '/mount':
            ensure => "link",
            target => "/anotherdir/mount",
        }
        mount { "/mount":
            ensure => "absent",
        }
}

Это привело к следующему при выполнении марионеточного пробега:

notice: /Stage[main]/Symlinks::Linkdirtest/File[/mount]: Not removing directory; use 'force' to override

Итак, я должным образом (или глупо) добавил:

class symlinks::linkdirtest ( ) { 
        file { '/mount':
            ensure => "link",
            target => "/anotherdir/mount",
                    force => "true",
        }
....

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

Есть идеи, почему это могло произойти?

Спасибо

Он заменил этот каталог ссылкой:

http://docs.puppetlabs.com/references/latest/type.html#parameters-4

Под «силой»:

«Заменить каталоги файлами или ссылками»

Для справки в будущем вы можете попробовать запустить в режиме noop, чтобы увидеть, какие изменения будут внесены:

puppet agent --test --debug --noop --show-diff

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

class symlinks::linkdirtest ( ) { 
    file { '/mount':
        ensure => "link",
        target => "/anotherdir/mount",
    }
    mount { "/mount":
        ensure => "absent",
        before => File['/mount'],
    }
}