The `system.hostname` return the result of either `hostname -s` or `hostnamectl --static` depending of the availability of each command. The `system.platform` return a hash with tweaked `inspec.platform` values: - `system.platform[:family]` provides a family name for Arch - `system.platform[:name]` modify `amazon` to `amazonlinux` - `system.platform[:release]` tweak for Arch and Amazon Linux: - `Arch` is always `base-later` - `Amazon Linux` release `2018` became `1` - `system.platform[:finger]` is just the concatenation of the name and the first release number (except for Ubuntu which gives `20.04` for example)tags/v1.3.0
# InSpec Profile: `share` | |||||
This shows the implementation of the `share` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md). | |||||
It's goal is to share the libraries between all profiles. | |||||
## Libraries | |||||
### `system` | |||||
The `system` library provides easy access to system dependents informations: | |||||
- `system.hostname`: return the result of `hostname -s` or `hostnamectl --static` based on the availability of each commans | |||||
- `system.platform`: take `inspec.platform` and mangle things a bit to be useful | |||||
- `system.platform[:family]` provides a family name for Arch | |||||
- `system.platform[:name]` modify `amazon` to `amazonlinux` | |||||
- `system.platform[:release]` tweak for Arch and Amazon Linux: | |||||
- `Arch` is always `base-later` | |||||
- `Amazon Linux` release `2018` became `1` | |||||
- `system.platform[:finger]` is just the concatenation of the name and the first release number (except for Ubuntu which gives `20.04` for example) |
# -*- coding: utf-8 -*- | |||||
# vim: ft=yaml | |||||
--- | |||||
name: share | |||||
title: Inspec shared resources | |||||
maintainer: SaltStack Formulas | |||||
license: Apache-2.0 | |||||
summary: shared resources | |||||
supports: | |||||
- platform-name: debian | |||||
- platform-name: ubuntu | |||||
- platform-name: centos | |||||
- platform-name: fedora | |||||
- platform-name: opensuse | |||||
- platform-name: suse | |||||
- platform-name: freebsd | |||||
- platform-name: amazon | |||||
- platform-name: arch |
# frozen_string_literal: true | |||||
# system.rb -- InSpec resources for system values | |||||
# Author: Daniel Dehennin <daniel.dehennin@ac-dijon.fr> | |||||
# Copyright (C) 2020 Daniel Dehennin <daniel.dehennin@ac-dijon.fr> | |||||
HOSTNAME_CMDS = %w[hostname hostnamectl].freeze | |||||
HOSTNAME_CMDS_OPT = { | |||||
'hostname' => '-s', | |||||
'hostnamectl' => '--static' | |||||
}.freeze | |||||
class SystemResource < Inspec.resource(1) | |||||
name 'system' | |||||
attr_reader :platform | |||||
attr_reader :hostname | |||||
def initialize | |||||
@platform = build_platform | |||||
@hostname = found_hostname | |||||
end | |||||
private | |||||
def found_hostname | |||||
cmd = guess_hostname_cmd | |||||
unless cmd.exit_status.zero? | |||||
raise Inspec::Exceptions::ResourceSkipped, | |||||
"Error running '#{cmd}': #{cmd.stderr}" | |||||
end | |||||
cmd.stdout.chomp | |||||
end | |||||
def guess_hostname_cmd | |||||
HOSTNAME_CMDS.each do |cmd| | |||||
if inspec.command(cmd).exist? | |||||
return inspec.command("#{cmd} #{HOSTNAME_CMDS_OPT[cmd]}") | |||||
end | |||||
end | |||||
raise Inspec::Exceptions::ResourceSkipped, | |||||
"Error: #{@platform[:finger]}} has none of #{HOSTNAME_CMDS.join(', ')}" | |||||
end | |||||
def build_platform | |||||
{ | |||||
family: build_platform_family, | |||||
name: build_platform_name, | |||||
release: build_platform_release, | |||||
finger: build_platform_finger | |||||
} | |||||
end | |||||
def build_platform_family | |||||
case inspec.platform[:name] | |||||
when 'arch' | |||||
'arch' | |||||
else | |||||
inspec.platform[:family] | |||||
end | |||||
end | |||||
def build_platform_name | |||||
case inspec.platform[:name] | |||||
when 'amazon' | |||||
'amazonlinux' | |||||
else | |||||
inspec.platform[:name] | |||||
end | |||||
end | |||||
def build_platform_release | |||||
case inspec.platform[:name] | |||||
when 'amazon' | |||||
# `2018` relase is named `1` in kitchen.yaml | |||||
inspec.platform[:release].gsub(/2018.*/, '1') | |||||
when 'arch' | |||||
'base-latest' | |||||
else | |||||
inspec.platform[:release] | |||||
end | |||||
end | |||||
def build_platform_finger | |||||
"#{build_platform_name}-#{build_finger_release}" | |||||
end | |||||
def build_finger_release | |||||
case inspec.platform[:name] | |||||
when 'ubuntu' | |||||
build_platform_release.split('.').slice(0, 2).join('.') | |||||
else | |||||
build_platform_release.split('.')[0] | |||||
end | |||||
end | |||||
end |