标签: lwrp

chef only_if属性等于true

问题:我有一个厨师声明,只有在属性为"true"时才能运行.但它每次都会运行.

预期行为:default[:QuickBase_Legacy_Stack][:dotNetFx4_Install] = "false"dotnet4不应安装.

实际行为:无论属性设置为什么,它都会安装dotnet4.

我的代码:

属性文件:

default[:QuickBase_Legacy_Stack][:dotNetFx4_Install] = "false"
Run Code Online (Sandbox Code Playgroud)

食谱文件:

windows_package "dotnet4" do
    only_if node[:QuickBase_Legacy_Stack][:dotNetFx4_Install]=='true'
    source "#{node[:QuickBase_Legacy_Stack][:dotNetFx4_URL]}"
    installer_type :custom
    action :install
    options "/quiet /log C:\\chef\\installLog4.txt /norestart /skipmsuinstall"
end
Run Code Online (Sandbox Code Playgroud)

ruby chef-infra lwrp

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

包括来自另一本食谱的厨师LWRP

我写了一个小LWRP我的app食谱(trim_log),它的工作原理.但是,现在我正在尝试将这个特定的LWRP移动到commons食谱中,这样我的其他食谱也可以使用它.问题是我无法弄清楚如何将trim_log资源/提供者加载到任何烹饪书中,包括我的app食谱.

??? app
?   ??? recipes
?       ??? default.rb
??? commons
   ??? providers
   ?   ??? trim_log.rb
   ??? resources
       ??? trim_log.rb
Run Code Online (Sandbox Code Playgroud)

我已经trim_log在commons cookbook中定义了提供者/资源.现在我希望trim_logappcookbook中使用这个提供者/资源.我怎么能在那里提供它?

chef-infra lwrp

9
推荐指数
1
解决办法
9039
查看次数

厨师LW资源属性默认值如何引用另一个属性?

我正在尝试将一个资源属性的默认值设置为另一个属性的值.

我正在为我正在构建的tomcat cookbook定义一个具有以下定义的资源.我想拥有可以独立设置的"name"和"service_name"属性.如果未设置服务名称,我希望它默认为"name"提供的任何内容.

以下不能像我期望的那样工作:

attribute :name,         :kind_of => String, :required => true, :name_attribute => true
attribute :service_name, :kind_of => String, :default => :name
Run Code Online (Sandbox Code Playgroud)

注意第二行末尾的":default =>:name".当我在配方中的新块中引用我的资源时

my_tomcat "install tomcat" do
  name "foo_bar"
end
Run Code Online (Sandbox Code Playgroud)

属性值被指定为

 name = "foo_bar"
 service_name = "name"
Run Code Online (Sandbox Code Playgroud)

这不是我的预期.除非明确设置,否则我希望service_name为"foo_bar".

我试过了

attribute :service_name, :kind_of => String, :default => new_resource.name
attribute :service_name, :kind_of => String, :default => @new_resource.name
Run Code Online (Sandbox Code Playgroud)

但那些不编译.

有没有办法做我想做的事情?

ruby chef-infra lwrp

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

在Chef的提供者的default.rb中使用File :: read

我正在尝试创建一个LWRP,它将调用自身内部定义的资源.我的食谱结构如下:

在此输入图像描述

在机器食谱的提供者,我有一个代码片段如下:

require 'chef/provisioning'  # driver for creating machines
require '::File'

    def get_environment_json
      @@environment_template = JSON.parse(File::read(new_resource.template_path + "environment.json"))
      return @@environment_template
    end
Run Code Online (Sandbox Code Playgroud)

代码只是尝试读取json文件,我正在使用File :: read.

我一直收到如下错误:

LoadError

无法加载此类文件 - :: File

有谁知道如何在我的LWRP提供商内部使用File :: read?

ruby chef-infra chef-recipe lwrp

5
推荐指数
2
解决办法
1692
查看次数

厨师cookbook lwrp,最简单的方法使用new_resource.updated_by_last_action(true)

我正在为厨师10编写一个LWRP.当该资源在其他配方中运行时,如果某些内容发生了变化,则应将其标记为"updated_by_last_action".但如果没有任何改变.updated_by_last_action应为false.

例如,我有厨师文档http://docs.opscode.com/lwrp_custom_provider.html#updated-by-last-action.该示例将资源模板包装在变量中以测试它是否已更改,然后设置updated_by_last_action状态.所以我的代码看起来应该是这样的

f = file new_resource.filename do
xxx
end
new_resource.updated_by_last_action(f.updated_by_last_action?)

t = template new_resource.templatename do
xxx
end
new_resource.updated_by_last_action(t.updated_by_last_action?)

m mount new_resource.mountpoint do
xxx
end
new_resource.updated_by_last_action(m.updated_by_last_action?)
Run Code Online (Sandbox Code Playgroud)

但是如果一个提供者变得更大并且使用了很多资源,比如模板,文件,目录,mount等等.应该将所有这些资源包装在像示例这样的变量中,以找出资源是否已经更新,以便进一步发送此提供程序已更新的状态.

我想知道是否有一种更简单,更清晰的方式来运行new_resource.updated_by_last_action(true)其他,然后将所有资源包装在变量中.因为如果我在每次厨师运行时将LWRP标记为更新之前放入new_resource.updated_by_last_action(true)内部,这不是最佳选择.actionend

ruby chef-infra lwrp

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

需要自定义LWRP

我被困在尝试创建我的第一个lwrp

我创建了一个非常基本的资源+提供者:

resources/rack_site.rb
providers/rack_site.rb
Run Code Online (Sandbox Code Playgroud)

我一直在尝试在同一个食谱的配方中测试'rack_site'资源,但是它失败并且找不到有关资源的错误.我尝试将这两个文件移动到我作为依赖项添加的食谱中,但仍然失败.

将自定义资源用于配方必须做些什么?

chef-infra lwrp

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

如何在Cookbook食谱中使用库模块

在食谱中,我有一个库(client_helper.rb)。在其中定义了一个模块。模块名称为Client_helper。这是模块代码。

module Client_helper
# This module contains helper methods

def network_zone
        Chef::Log.debug('network zone called...********')
        Chef::Log.debug("inside-::::"+self.class.to_s)
end    

end
Chef::Recipe.send(:include, Client_helper)
Run Code Online (Sandbox Code Playgroud)

现在,我有默认食谱。我在直接配方中调用方法network_zone的地方正在工作。

但是,当我在ruby_block(例如Client_helper.network_zone)内调用方法network_zone时,它不起作用

请找到配方代码。

# Cookbook: client
# Recipe: default

Chef::Resource.send(:include, Sap_splunk_client_helper)   


  host_network_zone = network_zone # This is working

Log.info("inside-::::"+self.class.to_s)

ruby_block 'parse auto generated templates' do
  block do
    host_network_zone = Client_helper.network_zone #This is not working
    Log.info("inside ruby block-::::"+self.class.to_s)
end
end
Run Code Online (Sandbox Code Playgroud)

我的食谱目录结构-

在此处输入图片说明

请帮我。

cookbook chef-infra chef-recipe chef-solo lwrp

2
推荐指数
1
解决办法
6826
查看次数

带着色器图的双面着色器

在着色器方面,我是一个完整的初学者,我正在构建一个项目,我需要在其中使用 Shader Graph。

我想知道是否可以在脸部的每一侧渲染两个不同的东西,例如在正常一侧渲染纹理和法线贴图,在脸部背面渲染没有阴影或灯光的纯黑色。

unity-game-engine lwrp

2
推荐指数
1
解决办法
5940
查看次数