refreshonly 无法与 Puppet exec 资源配合使用

refreshonly 无法与 Puppet exec 资源配合使用

我使用以下用户资源创建unix用户,然后为用户设置初始密码。然后我执行了 exec with 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) 由于refreshonlyexec参数,因此在内部使用它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'],

答案1

@Zama Ques:考虑到您的问题,我遇到了与您在第 3 点中提出的完全相同的问题,即更改用户资源中的任何属性,执行资源都不会得到执行,而根据我们的想法,它应该得到执行。但是,问题是您和我在执行资源中放置“通知/订阅”键时做错了。这样想,如果用户资源中的任何属性发生变化,那么它应该“通知”执行资源以执行。不是吗?而不是相反。看看下面的清单:

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 资源执行。

如果我们将“通知”放在 exec 资源中,则无论你在用户资源中更改什么,exec 资源都不会执行。这完全取决于你在哪里指定“通知”。提示:你希望更改的资源,请在那里应用通知。希望这能让你清楚概念。

对于您的第三个问题:请查看我的清单。

答案2

无需将属性传递password给资源。如果您不提供密码,我相信 puppet 会将其禁用,但您需要进行测试。我知道如果您不提供密码,那么 puppet 不会更改现有帐户的密码。user

我没有可以测试的环境,但我相信您可以拥有一个无需密码即可创建帐户的用户资源,然后发出通知,通知执行人员执行类似操作usermod -p '$1$T7iMiuVY$bVjrtyWV4diXBKlCgcDKT0'或其他操作。

相关内容