0

/boot/grub/grub.conf のカーネルで始まる (空白を無視する) すべての行を検索し、すべての行をチェックして行のどこかに「nousb」があるかどうかを確認する inspec コントロールを作成しようとしています。nousb が見つからない場合は失敗を返したいと思います。

私の問題は、複数の行がカーネルで始まる場合に、grep から複数の stdout を取得/説明する方法を理解できないことです。.each を使用して達成できることはありますか? これが私のコードです:

control 'os-disable-usb-pcmcia' do
  impact 0.5
  title 'Disable USB and PCMCIA Devices'
  desc "ensure default kernel in grub has 'nousb' option"

  output = command('egrep "^[[:space:]]*kernel" /boot/grub/grub.conf')
  describe output do
    its('stdout') { should match /^\s*kernel[^#]*nousb\b/ } # match nousb anywhere in the 'kernel' line
  end
end

明確にするために編集します。

conf ファイルにこれらの行があるとします。

kernel 1 nousb
kernel 2
kernel 3
kernel 4

複数のカーネル行にnousb要件がないにもかかわらず、最初のものが探していたものと一致したため、テストは合格と見なします。

4

3 に答える 3

0

コンテンツの一致ではなく、解析結果をテストする

grub.conf ファイルを解析し、各レコードnousbにコマンドがあることを確認するコードをブロック内に記述する必要があります。grub.conf を検証するために、grub 用の Augeas レンズを試すこともできます。例えば:

describe 'validate kernel parameters' do
  it 'should include a "nousb" parameter on each line' do
    # 1. parse your file however you like, then
    # 2. store result as a Boolean.
    expect(result).to be_true
  end
end

実行中のカーネルを確認する

または、実行中のカーネルの結果のみを気にする場合は、次のような方法で値を確認できます。

# 1. read the remote's /proc/cmdline however you like, then
# 2. evaluate your match.
expect(command_line_contents).to match /\bnousb\b/
于 2016-09-20T19:45:43.933 に答える