【问题标题】:Nested resources in Chef InSpecChef InSpec 中的嵌套资源
【发布时间】:2016-11-02 07:52:34
【问题描述】:

是否可以在 Chef InSpec 的其他资源中使用一种资源?

示例:

 describe command('su srijava') do
     describe file ('/app/java/latest') do     
         it{ should exist }
     end
 end

它会抛出如下错误:

`method_missing': undefined method `file' for RSpec::ExampleGroups::CommandSuSriava:Class (NoMethodError)

实际上我想要做的是我需要运行一个安装在其他用户中的实用程序,我必须检查从该会话返回的输出并验证它。示例:

  • 我以 srijava 用户身份安装了 java
  • 现在在 Inspec 中,我编写了测试 Java 版本的命令(假设 java -version 仅在该用户中运行,而不是以 root 身份运行)。
  • 如果我使用su srijava,那么我不会得到返回的输出 根会话和测试失败
  • 如果我在没有su srijava 的情况下运行,那么我的实用程序将抛出一个错误 用户不是 SriJava

带有su 的代码:

describe command('su srijava ; cd /app/java; ./java --version') do
        its('stdout') { should match('1.7') }
 end

没有su的代码:

describe command('cd /app/java; ./java --version') do
        its('stdout') { should match('1.7') }
 end

我该怎么做?

【问题讨论】:

    标签: rspec chef-infra inspec


    【解决方案1】:

    正如 Noah 所指出的,目前还不支持嵌套的描述块。我也认为你不需要那些。

    result = command('runcommand').stdout
    filename = result + '/path'
    describe file (filename) do     
      it{ should exist }
    end
    

    另一方面,您可以使用bash 资源来运行多个命令。 command 使用用户的默认 shell,bash 强制执行它。这使您能够:

    describe bash('su srijava ; cd /app/java; ./java --version') do
      its('stdout') { should match('1.7') }
    end
    

    【讨论】:

      【解决方案2】:

      不,这也没有任何意义,因为即使在正常的 RSpec 中,两者也不会合并。如果您的问题是您需要以 root 身份检查文件,您可以使用 InSpec 的 sudo 选项。我不知道您为什么要检查某个文件是否以某个用户的身份存在,但这是不受支持的。

      【讨论】:

      • su 作为目标用户运行一个新的 shell。它不会神奇地影响稍后在同一 shell 中的命令。你想要sudo -u whatever bash -c "cd /foo; something"
      • 这不起作用。我像describe command('sudo -u whatever bash -c "cd /foo; something" ') do it { should exist } end 那样做,它说像expected command sudo -u whatever bash -c "cd /foo; something" to exist
      • InSpec 中的 command 资源不响应 exist 匹配器。命令具有标准输出/错误内容和退出状态等匹配器。
      • command 资源确实有 exist 匹配器。参考this
      猜你喜欢
      • 2020-06-23
      • 2016-12-15
      • 2016-12-09
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多