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

refreshonly не работает с ресурсом Puppet exec

Я использую следующий пользовательский ресурс для создания unix user, а затем установите начальный пароль для пользователя. Затем я выполнил команду exec с chage, чтобы заставить пользователя изменить свой пароль после его первого входа в систему. Манифест выглядит следующим образом

node 'node2.example.com','node3.example.com'{
  user {
     'askar':
      ensure  => 'present',
      managehome => 'true',
      comment => 'Laskar Home',
      home    => '/home/askar',
      shell   => '/bin/bash',
      expiry  => '2016-04-22',
      password => '$1$T7iMiuVY$bVjrtyWV4diXBKlCgcDKT0',
      password_min_age => '20',
      password_max_age => '60',
    }
exec {
  'chage':
   path => '/usr/bin/',
   command => 'chage -d 0 askar',
  }
}

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

Итак, чтобы избежать этого, я добавляю refreshonly параметр следующим образом

 exec {
   'chage':
    path => '/usr/bin/',
    command => 'chage -d 0 askar',
    subscribe => File['askar'],
    refreshonly => true,
   }
  }

Затем я подтвердил, что после применения refreshonly параметр,
пароль не меняется на пароль по умолчанию, а также chage
в exec не выполняется. Но у меня было мало сомнений относительно того, как работает параметр refreshonly, и я не уверен, работает ли он у меня нормально.

1) Поскольку refreshonly является exec параметр, использующий его внутри exec не вызовет chage -d 0 askar выполнить, если нет изменений в user ресурсные манифесты. Я здесь прав? Означает ли это также, что user ресурс также не будет выполняться вместе с exec из-за refreshonly параметр, который означает, что пароль пользователя не будет установлен по умолчанию, который был определен в user ресурс?

2) Пробовал менять password_min_age => '20' to password_min_age => '30', теперь, поскольку это изменение в user проявляется, я ожидаю, что exec ресурс будет выполнен с chage команда и пользователь будет вынужден изменить свой пароль. Но я не вижу этого изменения. Я неправильно понимаю здесь?

3) или как я определяю refreshonly сам параметр неверен. Синтаксис должен был быть subscribe => User['askar'], вместо того subscribe => File['askar'],

@Zama Вопрос: Учитывая вашу проблему, я столкнулся с той же проблемой, которую вы задали в своем пункте №: 3, когда при изменении каких-либо атрибутов в пользовательском ресурсе ресурс exec не выполняется, что, по нашему мнению, должно быть. Но проблема в том, что мы с вами сделали неправильную вещь, поместив ключ «уведомить / подписаться» в ресурс exec. Подумайте так: если в пользовательском ресурсе изменяются какие-либо атрибуты, он должен «уведомить» ресурс exec о своем выполнении. не так ли? а не наоборот. Посмотрите на мой манифест ниже:

user { "john" :
        ensure => 'present',
        uid => '502',
        password => '$1$3uCLHGag$TVHLvE9T14XVSYoKA4YlH1' ,
        managehome => 'true',
        notify => EXEC['password change']
        }

exec { 'password change' :
        command => 'chage -d 0 john' ,
        path => '/usr/bin',
        refreshonly => 'true'

        }

~ ~ Когда я меняю пароль на "$1$QmJsatk6$4B.7Ksj5D608SHb/qVscM0" , затем он уведомляет ресурс exec о выполнении.

если мы поместим «notify» в ресурс exec, все, что вы измените в пользовательском ресурсе, ресурс exec не будет выполняться. Все зависит от того, где указать «уведомлять». Подсказки: ресурс, который вы ожидаете изменить, примените само уведомление. Надеюсь, это проясняет концепцию.

На ваш третий вопрос: посмотрите мой манифест.

Прохождение password приписывать user ресурс не требуется. Если вы не предоставите пароль, я считаю, что марионетка оставит его отключенным, но вам нужно будет проверить. Я знаю, что если вы не предоставите пароль, марионетка не изменит пароль существующей учетной записи.

У меня нет среды для тестирования, но я считаю, что у вас может быть пользовательский ресурс, который создает учетную запись без пароля, а затем имеет уведомление, которое уведомляет exec, который делает что-то вроде usermod -p '$1$T7iMiuVY$bVjrtyWV4diXBKlCgcDKT0' или что-то.