将hiera中的变量指定为puppet类中的用户名(带有uid和gid)

将hiera中的变量指定为puppet类中的用户名(带有uid和gid),puppet,Puppet,社区成员你好 我们有一个puppet文件,其主要类如下: class profile::Profname::application::classname { $appname_homedir = hiera('appname::appname_homedir') $appname_installdir = hiera('appname::appname_installdir') $java_optional_args = "${java_ke

社区成员你好

我们有一个puppet文件,其主要类如下:

class profile::Profname::application::classname {

  $appname_homedir          = hiera('appname::appname_homedir')
  $appname_installdir       = hiera('appname::appname_installdir')
  $java_optional_args      = "${java_keystore_args} ${java_proxy_args} ${java_timezone_args}"
..
..
  $user                    = hiera('appname::appname_user')
  $gid                     = hiera('appname::appname_user_gid')
  $uid                     = hiera('appname::appname_user_uid')


exec { "Many blocks":
    command => "commands",
    ..
  }

exec { "Many blocks":
    command => "commands",
    ..
  }

#  Install and configure app

  class { 'app':
    user             => hiera('classname::appname_user'),
    jvm_opts         => $java_optional_args,
    download_url     => "s3://${s3_bucket}/${APPDIR}/appname",
    dbserver         => hiera('appname::db-endpoint'),
    notify           => Exec["Change appname gid and uid"],
    require          => [ Class['java'], Exec['Create Homedir'], Exec['Create Appdir']],
  }

#other exec blocks

exec { "blocks"
..
..
}

}
现在我在hiera中还有两个变量,它们是:appname_用户的uid和gid

如何在内部类“app”中创建用户“appname\u user”

我试图引用,但不确定如何在内部类中执行此操作。任何帮助都将不胜感激

稍后创建用户时,我执行了另一个exec块来更改用户的uid和gid,但这种方式似乎不适用于某些已经存在的文件。虽然木偶处决是成功的。因此,我希望在创建时使用uid和gid创建用户

感谢和问候, 萨哈

如何在内部类“app”中创建用户“appname\u user”

我最好的猜测是,你的意思是在这个结构中:

答案很简单:你不能。但是你可以做很多相关的事情

首先,“内部阶级”不是木偶中使用的术语。可以有嵌套类,但是

  • 这不是你展示的,而且
  • 嵌套类被广泛认为是糟糕的样式
  • 您所显示的是class
    app
    的声明,它位于class
    profile::Profname::application::classname
    的定义中。在计算类声明时,它告诉Puppet将指定的类包含在目录中,然后在构造中,它可以选择将值绑定到该类的一些参数。其他地方必须有一个类的定义来告诉Puppet这意味着什么。如果希望它声明一个尚未声明的资源,则必须修改该定义

    您通常会通过声明
    user
    资源(在一个或另一个类定义中)来管理用户。在您的例子中,您可以找到class
    app
    的定义并将其放在那里,但也可以将其放在profile类中,与class
    app
    的现有声明一起。哪一个最适合你取决于你想要完成什么

      class { 'app':
        user             => hiera('classname::appname_user'),
        jvm_opts         => $java_optional_args,
        download_url     => "s3://${s3_bucket}/${APPDIR}/appname",
        dbserver         => hiera('appname::db-endpoint'),
        notify           => Exec["Change appname gid and uid"],
        require          => [ Class['java'], Exec['Create Homedir'], Exec['Create Appdir']],
      }