Class: Inspec::Resources::Host

Inherits:
Object
  • Object
show all
Defined in:
lib/resources/host.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hostname, params = {}) ⇒ Host



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/resources/host.rb', line 47

def initialize(hostname, params = {})
  @hostname = hostname
  @port = params[:port]

  if params[:proto]
    warn '[DEPRECATION] The `proto` parameter is deprecated. Use `protocol` instead.'
    @protocol = params[:proto]
  else
    @protocol = params.fetch(:protocol, 'icmp')
  end

  return skip_resource 'Invalid protocol: only `tcp` and `icmp` protocols are support for the `host` resource.' unless
    %w{icmp tcp}.include?(@protocol)

  @host_provider = nil
  if inspec.os.linux?
    @host_provider = LinuxHostProvider.new(inspec)
  elsif inspec.os.windows?
    @host_provider = WindowsHostProvider.new(inspec)
  elsif inspec.os.darwin?
    @host_provider = DarwinHostProvider.new(inspec)
  else
    return skip_resource 'The `host` resource is not supported on your OS yet.'
  end

  missing_requirements = @host_provider.missing_requirements(protocol)
  return skip_resource 'The following requirements are not met for this resource: ' \
    "#{missing_requirements.join(', ')}" unless missing_requirements.empty?
end

Instance Attribute Details

#hostnameObject (readonly)

Returns the value of attribute hostname.



45
46
47
# File 'lib/resources/host.rb', line 45

def hostname
  @hostname
end

#portObject (readonly)

Returns the value of attribute port.



45
46
47
# File 'lib/resources/host.rb', line 45

def port
  @port
end

#protocolObject (readonly)

Returns the value of attribute protocol.



45
46
47
# File 'lib/resources/host.rb', line 45

def protocol
  @protocol
end

Instance Method Details

#connectionObject



101
102
103
# File 'lib/resources/host.rb', line 101

def connection
  ping[:connection]
end

#ipaddressObject

returns all A records of the IP address, will return an array



110
111
112
# File 'lib/resources/host.rb', line 110

def ipaddress
  resolve.nil? || resolve.empty? ? nil : resolve
end

#protoObject



77
78
79
80
# File 'lib/resources/host.rb', line 77

def proto
  warn '[DEPRECATION] The `proto` method is deprecated. Use `protocol` instead.'
  protocol
end

#reachable?Boolean



88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/resources/host.rb', line 88

def reachable?
  # ping checks do not require port or protocol
  return ping.fetch(:success, false) if protocol == 'icmp'

  # if either port or protocol are specified but not both, we cannot proceed.
  if port.nil? || protocol.nil?
    raise "Protocol required with port. Use `host` resource with host('#{hostname}', port: 1234, proto: 'tcp') parameters." if port.nil? || protocol.nil?
  end

  # perform the protocol-specific reachability test
  ping.fetch(:success, false)
end

#resolvable?(type = nil) ⇒ Boolean

if we get the IP address, the host is resolvable



83
84
85
86
# File 'lib/resources/host.rb', line 83

def resolvable?(type = nil)
  warn "The `host` resource ignores #{type} parameters. Continue to resolve host." if !type.nil?
  resolve.nil? || resolve.empty? ? false : true
end

#socketObject



105
106
107
# File 'lib/resources/host.rb', line 105

def socket
  ping[:socket]
end

#to_sObject



114
115
116
117
118
119
# File 'lib/resources/host.rb', line 114

def to_s
  resource_name = "Host #{hostname}"
  resource_name += " port #{port} proto #{protocol}" if port

  resource_name
end