【问题标题】:Assign variable from hiera as username (with uid and gid) inside puppet class将 hiera 中的变量分配为 puppet 类中的用户名(带有 uid 和 gid)
【发布时间】:2020-02-11 17:29:57
【问题描述】:

社区成员您好,

我们有一个 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_user 的 uid 和 gid。

如何在内部类“app”中创建用户“appname_user”?

我试图引用 https://puppet.com/docs/puppet/4.10/quick_start_user_group.html 但不确定如何在内部类中执行此操作。任何帮助将不胜感激。

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

感谢和问候, 萨哈

【问题讨论】:

    标签: puppet


    【解决方案1】:

    如何在内部类“app”中创建用户“appname_user”?

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

      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']],
      }
    

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

    第一件事:“内部阶级”不是 Puppet 中使用的术语。可以有嵌套的类,但是

    1. 这不是您提供的内容,并且
    2. 嵌套类被广泛认为是糟糕的风格。

    您所展示的是在类profile::Profname::application::classname定义 内的类app声明。类声明在评估时告诉 Puppet 将指定类包含在目录中,然后正在构建中,并且它可以选择将值绑定到该类的某些参数。在别处必须有一个类的定义来告诉 Puppet 这意味着什么。如果你想让它声明一个它还没有声明的资源,那么它就是必须修改的定义。

    您通常会通过声明User 资源(在一个或另一个类定义中)来管理用户。在您的情况下,您可以找到类 app 的定义并将其放在那里,但您也可以将它与类 app 的现有声明一起放在您的配置文件类中。哪一个最适合您取决于您​​要完成的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      相关资源
      最近更新 更多