标签: hiera

Hiera命令行:如何查看给定节点的层次结构中的所有数据?

只测试hiera,我希望能够查看给定节点的层次结构中的所有可用数据(变量=值对).

我的Hiera层次结构配置为:

---
:backends:
  - yaml
  - json
:yaml:
  :datadir: C:\Puppet\hieradata
:hierarchy: 
  - "Env/%{::env}"
  - common
Run Code Online (Sandbox Code Playgroud)

我可以运行以下命令来返回'some-common'变量的node1值:

>hiera some-common ::env=node1
data
Run Code Online (Sandbox Code Playgroud)

我希望能够看到的是层次结构中node1可用的所有变量=值对,这可能吗?谢谢

puppet hiera

12
推荐指数
1
解决办法
7028
查看次数

从Puppet自定义类型访问hiera范围

我正在构建一个自定义类型,我无法从defaultto块访问hiera范围

module Puppet
  require 'puppet/parser/functions/hiera' 
  newtype(:my_type) do

    ensurable

    newparam(:myparam) do
      defaultto { Puppet::Parser::Functions.hiera('myparam') }
    end
    newproperty(:value) do
        desc "Value of the item."
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但我明白了

Error: undefined method `hiera' for Puppet::Parser::Functions:Module
Run Code Online (Sandbox Code Playgroud)

我实际上正在使用Puppet 3.8和未来的解析器

作为一种解决方法,我们使用

  $my_vals = hiera_hash('mytype_vals')
  create_resource(my_type, $myvals, {myparam => hiera('myparam')})
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但是my_type期望在目录中的任何地方实例化对象,并且预期myparam所有实例中的对象都是相同的.因此,不需要多个默认值声明.

另一种方法是放置

My_type{
  myparam => hiera('myparam')
}
Run Code Online (Sandbox Code Playgroud)

在节点清单中.这也可以解决问题,但我们正在开发一个模块,主要清单超出了我们的范围

puppet hiera

7
推荐指数
1
解决办法
337
查看次数

如何按角色拆分hiera配置?

我正在使用hiera 为我的节点分配类webserver或类dbserver.该webserver班仅包括了Apache和设置它的一些配置(如端口).显然我不想为每个节点复制这个配置,所以我把它放在common.yaml中.但是,我的common.yaml变大了,所以我想把它分开.我想有一个文件包含webserver角色的配置,另一个文件包含dbserver角色等.我想我的hiera.yaml看起来像这样:

:hierarchy:
  - "fqdn/%{::fqdn}"
  - "role/%{ROLE}"
  - common
Run Code Online (Sandbox Code Playgroud)

role文件夹将包含类似的文件webserver.yaml,appserver.yaml,dbserver.yaml.我已经看到各种博客帖子说解决方案是创建一个自定义的"角色"事实,但大多数人通过从代理节点上的文件(例如从/etc/role)加载该事实来实现这一点,这对我来说似乎打败了木偶点(我特意使用木偶,所以每次我希望它有一些新角色时我都不必登录每个节点并更改一些配置).

为了清楚起见,我不想编辑代理上的文件以使其工作,我希望使用主服务器上的配置完成所有操作.

我想我可能会有类似下面的内容并详尽地列出每个角色作为层次结构中的元素,但这似乎不可管理.

:hierarchy:
  - "fqdn/%{::fqdn}"
  - "webserver"
  - "appserver"
  - "dbserver"
  - common
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题吗?

puppet hiera

6
推荐指数
1
解决办法
1651
查看次数

在Ansible中的Puppet hiera相当于

hiera.yaml

---
:hierarchy:
- node/%{host_fqdn}
  - site_config/%{host_site_name}
  - site_config/perf_%{host_performance_class}
  - site_config/%{host_type}_v%{host_type_version}
  - site/%{host_site_name}
  - environments/%{site_environment}
  - types/%{host_type}_v%{host_type_version}
  - hosts
  - sites
  - users
  - common
# options are native, deep, deeper
:merge_behavior: deeper
Run Code Online (Sandbox Code Playgroud)

我们目前有这个hiera配置.因此,配置按以下顺序合并:common.yaml> users.yaml> sites.yaml> hosts.yaml> types/xxx_vxxx.yaml>等.对于变量顶层次结构,仅当该文件存在时才会被覆盖.

例如:common.yaml

server:
  instance_type: m3.medium
Run Code Online (Sandbox Code Playgroud)

site_config/mysite.yaml

server:
  instance_type: m4.large
Run Code Online (Sandbox Code Playgroud)

因此对于所有其他站点,实例类型将是m3.medium,但仅对于mysite,它将是m4.large.

我怎样才能在Ansible中实现同样的目标?

puppet ansible hiera ansible-playbook

6
推荐指数
1
解决办法
3600
查看次数

如何从Puppet函数中读取Hiera值?

我必须编写一个函数,按顺序执行以下操作来读取变量的值:

  • 检查是否定义了一个facter变量.如果不,
  • 从Hiera读取变量的值.如果不,
  • 使用默认值.

我已经设法使用此if条件在我的Puppet脚本中执行此操作.

  # foo is read from (in order of preference): facter fact, hiera hash, hard coded value
  if $::foo == undef {
     $foo = hiera('foo', 'default_value')
  } else {
     $foo = $::foo
  }
Run Code Online (Sandbox Code Playgroud)

但是我想避免重复这个,如果我希望以这种方式解析的每个变量的条件,因此想到写一个格式的新Puppet函数get_args('foo', 'default_value'),它将返回我的值

  1. 一个事实,如果它存在,
  2. 变量变量,或
  3. 刚刚返回default_value.

我知道我可以用来lookupvar从ruby函数中读取一个因素.如何从我的Puppet ruby​​函数中读取hiera变量?

ruby puppet hiera

5
推荐指数
1
解决办法
3270
查看次数

复杂的hiera查找不起作用

我在yaml文件中有以下定义:

keepalived:
    cluster_name: "cluster.example.lan"
    cluster_ip: "192.168.1.10"
    cluster_nic: "eth0"
haproxy:
    bind_address: %{hiera('keepalived::cluster_ip')}
Run Code Online (Sandbox Code Playgroud)

结果bind_address我得到一个空字符串.

如果我使用%{hiera('keepalived')}我已经打印了整个哈希,但我只需cluster_ip要从这个哈希.我该如何查找cluster_ip

puppet hiera

5
推荐指数
1
解决办法
3188
查看次数

在puppet清单中迭代深度嵌套的hiera哈希

我正在为我的网络服务器构建一个结构.我在hiera有我的设置,但我似乎无法让傀儡回馈正确的类型.

在common.yaml

vhosts:
  hostname:
    sitename:
      app_url: value
      app_type: value
Run Code Online (Sandbox Code Playgroud)

我有每个vhost多个站点和多个虚拟主机.在我的清单中,我将创建文件夹结构和其他设置任务,但是现在我甚至无法让它迭代网站.

目前的清单:

define application($app_name, $app_url) {
  notice("App Type: ${app_type}")
  notice("App Url: ${app_url}")
}

$vhosts = hiera('vhosts')

$vhosts.each |$vhost| {
  create_resources(application, $vhost)
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是create_resources需要哈希.但是,如果我输入演员,$vhost我知道它不是哈希而是元组.

我怎么从我的yaml哈希中得到一个元组?有没有更好的方法来迭代这个数据集来获得我需要的东西?

puppet hiera

4
推荐指数
1
解决办法
7116
查看次数

无法傀儡查找 hiera 插值哈希

获取字符串而不是数组

这是我的 common.yaml

aa::params:

- '--params:"abc.com'

- 'abc2.com'


test::packages:

  package1:

    ensure:'present'

    install_options: "%{lookup('aa:params')}"
Run Code Online (Sandbox Code Playgroud)

这是我的清单文件

$packages = lookup("test::packages",undef,undef,'')

$params= lookup("aa::params",undef,undef,'')

$packages.each | String $packagename, Hash $attributes | {

notify { " ${packagename}, ${attributes[ensure]},${attributes['install_options]},${params} hello ":


  }

}
Run Code Online (Sandbox Code Playgroud)

预期的

"package1,present,[--params="abc.com, abc2.com"],[--params="abc.com, abc2.com"] hello"
Run Code Online (Sandbox Code Playgroud)

实际的

"package1,present,["--params=\"abc.com", "abc2.com\""],[--params="abc.com, abc2.com"] hello"
Run Code Online (Sandbox Code Playgroud)

看起来数组正在被字符串化,有人可以解释一下为什么我会这样吗

hiera

4
推荐指数
1
解决办法
825
查看次数

如何使用Vagrant,Puppet和Hiera配置时区?

我正在使用PuPHPet作为我的测试环境,它基于Vagrant/Puppet + Hiera.

在config.yml(Hiera配置文件)中,我想为我的时区添加部分

并使用命令 vagrant provision正确设置它.

这可能吗?

puppet vagrant puphpet hiera

3
推荐指数
2
解决办法
4030
查看次数

如何使用Ruby向YAML哈希添加值

我在YAML文件中有一堆哈希(它用于某些服务器的基于Puppet/Hiera的配置),如下所示:

---
apache_vhosts:
  'webuser.co.uk':
    ip: '*'
    port: '80'
    serveraliases: ['www.webuser.co.uk',]
    add_listen: false
    docroot: '/home/webuser/public_html'
    docroot_owner: 'webuser'
    docroot_group: 'apache'
    serveradmin: 'webmaster@webuser.co.uk'
    scriptalias: '/home/webuser/public_html/cgi-bin/'
    access_log_format: '\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'
    override: 'all'
users:
  'webuser':
    ensure: 'present'
    gid: '500'
    managehome: true
    home: '/home/webuser'
    password: '$6$zix5AzRheEzQwadthjvLNh.8maO6o4DU4Y0POTaS6xfgjfdvihP2O/UQN6eVDHjG2hTCT6VTLk5HsXeB9FF0xMlYiYY9W1'
    password_max_age: '99999'
    password_min_age: '0'
    shell: '/sbin/nologin'
    uid: '500'
Run Code Online (Sandbox Code Playgroud)

我需要以自动方式在Ruby中附加这些哈希值.这个想法是一个请求进来并命中一个运行ruby脚本的webhook,该脚本添加了一个新的Apache VHost和随附的用户.从操作YAML的角度来看,Ruby文档非常不合适,谷歌搜索没有提出任何相关的东西.也许有人可以指出我正确的方向?

ruby hash yaml webhooks hiera

3
推荐指数
1
解决办法
5301
查看次数

标签 统计

hiera ×10

puppet ×8

ruby ×2

ansible ×1

ansible-playbook ×1

hash ×1

puphpet ×1

vagrant ×1

webhooks ×1

yaml ×1