【问题标题】:Execute command line in attribute在属性中执行命令行
【发布时间】:2017-10-31 01:59:49
【问题描述】:

我想在属性中生成 MAC 地址和 UUID,然后将值传递给模板。 像这样:

Attribute/default.rb:

default['libvirt']['xml_mac_Adrr'] = 'openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//''
default['libvirt']['xml_uuid'] = 'uuidgen virbr0'

Template/network.erb:

<uuid><%= node['libvirt']['xml_uuid'] %></uuid>
  <mac address='<%= node['libvirt']['xml_mac_Adrr']%>'/>

我该怎么做?

更新 我想为虚拟网络修改default.xml 网络。基本上,我们必须通过virsh-net command 现在我想使用模板将 UUID 和 MAC 地址值传递给 XML 文件并在客户机中修改它。 这是我的食谱:

template '/etc/libvirt/qemu/network/default.xml' do
 source 'qemu-network.erb'
 owner "root"
 group "root"
 mode "0644"
end

【问题讨论】:

    标签: templates attributes chef-infra cookbook


    【解决方案1】:

    你可以使用反引号在 ruby​​ 中执行 shell 命令并捕获响应:

    default['libvirt']['xml_mac_Adrr'] = `openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'`
    default['libvirt']['xml_uuid'] = `uuidgen virbr0`
    

    编辑:

    我看到的第二个问题是您必须在控制器中使用实例变量来与视图共享信息。所以最好的方法是:

    @mac = `openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'`
    @uuid = `uuidgen virbr0`
    

    然后在视图级别你可以使用:

    <uuid><%=@uuid %></uuid>
    <mac address='<%=@mac %>'/>
    

    【讨论】:

    • 遗憾的是,厨师属性文件不能很好地处理反引号,并且该问题无缘无故地被标记为 RoR。
    • acctualy 我尝试为虚拟网络修改 default.xml。您对命令的建议是正确的。运行 default.rb 没有任何错误。但我无法将命令的值传递给 erb 文件。我会用它的回复更新我的问题。
    【解决方案2】:

    在依赖系统命令的 chef 中应该通过 shell_out 方法(包含在配方 dsl 中)以避免在运行 DSL 解释器并获取方法来清理输出时出现一些怪癖。

    我会走这条路:

    default['libvirt']['xml_mac_Adrr'] = Chef::ShellOut.new("openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'").stdout.chomp
    default['libvirt']['xml_uuid'] = Chef::ShellOut.new('uuidgen virbr0').stdout.chomp
    

    但这有一个问题,每次运行都会生成一个新的mac地址,所以你应该使用normal并避免重新定义它,这是最容易移到配方中的,在你的模板代码之前的配方文件中应该做:

    node.normal['libvirt']['xml_mac_Adrr'] = shell_out("openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'").stdout.chomp unless node['libvirt'].includes?('xml_mac_Adrr')
    

    【讨论】:

    • 非常感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多