我是Chef和Ruby的新手,我几天都在玩食谱。目前我遇到了一个问题,我认为这个问题很简单,但由于缺乏适当的知识,我无法解决。
我要去creste chef recipy,它将在Linux VM上配置网络接口。
我的ifcfg-ethX模板如下所示:
的ifcfg-ethX.erb
DEVICE=<% @int_name %>
HWADDR=<% @mac_address%>
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTBROTO=static
IPADDR=<% @ip_addr%>
NETMASK=<% @netmask %>
大部分属性都将从环境文件中检索出来。该文件的结构是:
default_attributes dev: {
#######################################################
#dev.bootstrap
#######################################################
#default.dev.
bootstrap: {
################## nodes #######################
# nodes being managed this environment
nodes: [
{
fqdn: "Host01a",
ip: "10.108.95.139",
run_list: "role[roleA]",
configs: [:FUNC01a],
},
{
fqdn: "Host01b",
ip: "10.108.95.140",
run_list: "role[roleA]",
configs: [:FUNC01b],
},
############### End of bootstrap nodes #################
#default.dev.bootstrap.nodes []
]
},
config: {
###################### CONFIGS ######################
#default.dev.config.
FUNC01a: {
ip: "10.0.0.1",
fqdn: "Host01a",
network: "255.25.255.0",
int: "eth0",
internal_ip: "10.1.0.1",
internal_fqdn: "Host01aINT",
internal_network: "255.25.255.0",
internal_int" "eth1",
traffic_ip: "10.2.0.1",
traffic_fqdn: "Host01aPROD",
traffic_network: "255.25.255.0",
traffic_int" "eth2",
},
FUNC01b: {
ip: "10.0.0.2",
fqdn: "Host01b",
network: "255.25.255.0",
int: "eth0",
internal_ip: "10.1.0.2",
internal_fqdn: "Host01bINT",
internal_network: "255.25.255.0",
internal_int" "eth1",
traffic_ip: "10.2.0.2",
traffic_fqdn: "Host01bPROD",
traffic_network: "255.25.255.0",
traffic_int" "eth2",
},
我的问题是我无法动态地从该环境文件中检索网络参数。我目前的env flile只定义了两个主机,但是会有几十个主机,并且可能会不断添加新主机,所以我必须有一个处理它的配方。 所有解决方案将不胜感激。
答案 0 :(得分:0)
这不是您使用Chef环境功能的方式。节点属性始终是每节点数据,环境级别的attrs将用于为每个环境设置的每个节点数据,例如在生产服务器的较长日志保留期或登台时的不同软件包版本期间。对于这种情况,您可能必须在每个节点中设置这些值(作为normal
级别属性),因为没有适用于它们的角色或环境分组,它们是唯一的雪花数据。