首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用木偶动态更新sshd配置文件中各个匹配节的值

如何使用木偶动态更新sshd配置文件中各个匹配节的值
EN

Stack Overflow用户
提问于 2020-08-04 16:48:16
回答 1查看 100关注 0票数 0

通过传递索引,我可以将值更新到"User“和"Host *.example.net”部分。如果我传递索引1或2,相应的值将被更新。

我的代码:

代码语言:javascript
复制
$sections = ['Host *.example.net', 'User foo']

$sections.each |String $section| {
  sshd_config_match { "${section}":
    ensure => present,
  }
}

$settings = [['User foo', 'X11Forwarding yes', 'banner none'],['Host *.example.net', 'X11Forwarding no', 'banner none']]
$settings.each |Array $setting| {
  $setting_array = split($setting[1],/ /)
  sshd_config { "${setting_array[0]} ${setting[0]}":
    ensure    => present,
    key       => "${setting_array[0]}",
    condition => "${setting[0]}",
    value     => "${setting_array[1]}",
  }
}

目前的结果:

代码语言:javascript
复制
 Match Host *.example.net
      # Created by Puppet
      X11Forwarding no
     
    Match User foo
      # Created by Puppet
      X11Forwarding yes

预期成果:

代码语言:javascript
复制
Match Host *.example.net
  # Created by Puppet
  X11Forwarding no
  Banner none
Match User foo
  # Created by Puppet
  X11Forwarding yes
  Banner none

我只能更新索引中提到的一个值,但我正在寻找一种方法来更新列表中提到的更多或所有的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-04 22:13:48

目前还不清楚是哪个模块提供了您的sshd_config_matchsshd_config资源类型,也不清楚它们到底是做什么的。尽管如此,如果我们考虑到这个密码..。

$settings =[“用户foo”、“X11Forwarding是”、“横幅无”、“主机*.example.net”、“X11Forwarding no”、“横幅无”] $settings.each x $setting| { $setting_array = split($setting1,/ /) sshd_config { "${setting_array} ${User}“:确保=>,键=> "${setting_array}",条件=>”${User}“,值=> "${setting_array1}",}

..。我们可以看到,$settings的每个元素都是一个三元素数组,其中each调用只访问索引0和1处的数组,这似乎与您看到的结果相匹配,该结果不包含来自索引2中元素的任何数据。

您可以从索引1开始遍历内部$setting元素,而不是只考虑该元素,但我建议您更自然地重新构造数据,并编写适合重组数据的代码。数组中有混合意义的数据,并且不必要地将键和值干扰到一起,因此需要花费精力将它们重新分开。将数据构造为散列而不是数组数组可能是一个好的开始:

代码语言:javascript
复制
$settings = {
  'User foo'           => { 'X11Forwarding' => 'yes', 'banner' => 'none'},
  'Host *.example.net' => { 'X11Forwarding' => 'no',  'banner' => 'none'},
}

这不仅提高了您的可读性(主要来自格式化),而且还提供了更大的可用性。也就是说,尽管我在这里猜到了一点,但是您应该能够做一些类似于以下的事情:

代码语言:javascript
复制
$settings.each |String $condition, Hash $properties| {
  $properties.each |String $key, String $value| {
    sshd_config { "${condition} ${key}":
      ensure    => 'present',
      condition => $condition,
      key       => $key,
      value     => $value,
    }
  }
}

同样,更好的可读性,这一次很大程度上来自于有帮助的名称选择,同时也更加清晰地表明,这样的东西实际上是代码的正确结构(假设我已经对您使用的类型进行了足够的推断)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63251501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档