koma 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 63a1b4f591b94eb71dd8a2c1a6d1ec5d1ba4bc98
4
- data.tar.gz: 22605355d9d199568a98106b4963b13db8b7f0f4
3
+ metadata.gz: ba14ba42f09152b6d30fb5806378955b624bc54f
4
+ data.tar.gz: b5285a745b7a381849079f3105a66485360efa7f
5
5
  SHA512:
6
- metadata.gz: f15869068fc4feb9170db659e9f7492ba91bdb56f8fa85ae810f8540927e6f6e3ba3945e510d5c45c4b831e13e23653e96216e4dc80389f3427ea870e781566c
7
- data.tar.gz: 10fcfac7fb4fa48c250883d0b9db3cfc65117cbf59772636a1facb68bd60292c03e1df97c5ba894153f0e97b504d757d768904fa30f0dbb5165642bbd997ab1a
6
+ metadata.gz: 13375bf06a378b82895c8e0eb4c37ffe59a02e467554590472d9f0c6f34980b42a0b6c9a3578cc22d13045a428d1865f111144d6d6f8836a9e604e1021e4896c
7
+ data.tar.gz: f2b517d4a3fe7f5fe7d83a2fdf142a2559614eb22e9bd3e6a5e37cb716b8c83a330914af53f9fbd1c7d69a11a3d3ca5f28125c6196e3d1d26ca9035fd1f977a5
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Koma [![Build Status](https://travis-ci.org/k1LoW/koma.svg?branch=master)](https://travis-ci.org/k1LoW/koma)
1
+ # Koma [![Gem](https://img.shields.io/gem/v/koma.svg)](https://rubygems.org/gems/koma) [![Build Status](https://travis-ci.org/k1LoW/koma.svg?branch=master)](https://travis-ci.org/k1LoW/koma)
2
2
 
3
3
  Koma gather host inventory without agent.
4
4
 
@@ -12,15 +12,47 @@ gem 'koma'
12
12
 
13
13
  And then execute:
14
14
 
15
- $ bundle
15
+ ```sh
16
+ $ bundle
17
+ ```
16
18
 
17
19
  Or install it yourself as:
18
20
 
19
- $ gem install koma
21
+ ```sh
22
+ $ gem install koma
23
+ ```
20
24
 
21
25
  ## Usage
22
26
 
23
- $ koma ssh example.com
27
+ If you login remote server via `ssh example.com`, you can execute:
28
+
29
+ ```sh
30
+ $ koma ssh example.com
31
+ ```
32
+
33
+ And get stdout like [this](stdout_sample.json).
34
+
35
+ ## Host inventory keys
36
+
37
+ ```sh
38
+ $ koma keys
39
+ memory
40
+ ec2
41
+ hostname
42
+ domain
43
+ fqdn
44
+ platform
45
+ platform_version
46
+ filesystem
47
+ cpu
48
+ virtualization
49
+ kernel
50
+ block_device
51
+ package
52
+ user
53
+ group
54
+ service
55
+ ```
24
56
 
25
57
  ## Contributing
26
58
 
data/lib/koma/cli.rb CHANGED
@@ -5,7 +5,7 @@ include Specinfra::Helper::Set
5
5
 
6
6
  module Koma
7
7
  class CLI < Thor
8
- desc 'ssh', 'stdout server inventory'
8
+ desc 'ssh', 'stdout remote host inventory'
9
9
  option :key,
10
10
  type: :string,
11
11
  banner: '<key1,key2,..>',
@@ -34,7 +34,7 @@ module Koma
34
34
  puts JSON.pretty_generate out(options[:key])
35
35
  end
36
36
 
37
- desc 'exec', 'stdout local inventory'
37
+ desc 'exec', 'stdout local host inventory'
38
38
  option :key,
39
39
  type: :string,
40
40
  banner: '<key1,key2,..>',
@@ -45,7 +45,7 @@ module Koma
45
45
  puts JSON.pretty_generate out(options[:key])
46
46
  end
47
47
 
48
- desc 'keys', 'server inventory keys'
48
+ desc 'keys', 'host inventory keys'
49
49
  def keys
50
50
  inventory_keys.each do |key|
51
51
  puts key
@@ -1,5 +1,9 @@
1
1
  class Specinfra::Command::Redhat::Base::Inventory < Specinfra::Command::Linux::Base::Inventory
2
2
  class << self
3
+ def get_service
4
+ "chkconfig --list"
5
+ end
6
+
3
7
  def get_package
4
8
  "rpm -qa --queryformat 'name:%{NAME}\tversion:%{VERSION}\trelease:%{RELEASE}\tarch:%{ARCH}\tinstalltime:%{INSTALLTIME}\tbuildtime:%{BUILDTIME}\n'"
5
9
  end
@@ -0,0 +1,7 @@
1
+ class Specinfra::Command::Redhat::V7::Inventory < Specinfra::Command::Redhat::Base::Inventory
2
+ class << self
3
+ def get_service
4
+ "systemctl list-unit-files --quiet -t service | cat"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ module Specinfra
2
+ class HostInventory
3
+ class Base
4
+ private
5
+
6
+ def create_parser_class(resource_type)
7
+ os_info = backend.os
8
+ family = os_info[:family]
9
+ version = os_info[:release] ? "V#{os_info[:release].to_i}" : nil
10
+ common_class = Specinfra::HostInventory::Parser
11
+ base_class = common_class.const_get('Base')
12
+ os_class = family.nil? ? base_class : common_class.const_get(family.capitalize)
13
+
14
+ if family && version
15
+ begin
16
+ version_class = os_class.const_get(version)
17
+ rescue
18
+ version_class = os_class.const_get('Base')
19
+ end
20
+ elsif family.nil?
21
+ version_class = os_class
22
+ elsif family != 'base' && version.nil?
23
+ version_class = os_class.const_get('Base')
24
+ end
25
+
26
+ begin
27
+ parser_class = version_class.const_get(resource_type.to_camel_case)
28
+ rescue
29
+ end
30
+
31
+ parser_class.create(backend)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,16 @@
1
+ class Specinfra::HostInventory::Parser::Base
2
+ class << self
3
+ def backend
4
+ @backend
5
+ end
6
+
7
+ def create(backend)
8
+ @backend = backend
9
+ self
10
+ end
11
+
12
+ def parse(cmd_ret)
13
+ cmd_ret
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ class Specinfra::HostInventory::Parser::Redhat::Base::Service < Specinfra::HostInventory::Parser::Base
2
+ class << self
3
+ def parse(cmd_ret)
4
+ services = {}
5
+ lines = cmd_ret.split(/\n/)
6
+ lines.each do |line|
7
+ status = line.split("\t")
8
+ service = status[0].strip
9
+ enabled = status[4].include?(':on') # level 3
10
+ cmd = backend.command.get(:check_service_is_running, service)
11
+ services[service] = {
12
+ enabled: enabled,
13
+ running: backend.run_command(cmd).success?
14
+ }
15
+ end
16
+ services
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ class Specinfra::HostInventory::Parser::Redhat::Base;end
2
+
@@ -0,0 +1,19 @@
1
+ class Specinfra::HostInventory::Parser::Redhat::V7::Service < Specinfra::HostInventory::Parser::Base
2
+ class << self
3
+ def parse(cmd_ret)
4
+ services = {}
5
+ lines = cmd_ret.split(/\n/)
6
+ lines.each do |line|
7
+ status = line.split(/ +/)
8
+ next unless status.count == 2
9
+ service = status[0].gsub(/\.service\z/, '')
10
+ cmd = backend.command.get(:check_service_is_running, service)
11
+ services[service] = {
12
+ enabled: status[1].include?('enabled'),
13
+ running: backend.run_command(cmd).success?
14
+ }
15
+ end
16
+ services
17
+ end
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ class Specinfra::HostInventory::Parser::Redhat::V7;end
@@ -0,0 +1,2 @@
1
+ class Specinfra::HostInventory::Parser::Redhat;end
2
+
@@ -0,0 +1,10 @@
1
+ class Specinfra::HostInventory::Parser;end;
2
+
3
+ require 'koma/ext/specinfra/host_inventory/parser/base'
4
+ require 'koma/ext/specinfra/host_inventory/parser/redhat'
5
+ require 'koma/ext/specinfra/host_inventory/parser/redhat/base'
6
+ require 'koma/ext/specinfra/host_inventory/parser/redhat/base/service'
7
+ require 'koma/ext/specinfra/host_inventory/parser/redhat/v7'
8
+ require 'koma/ext/specinfra/host_inventory/parser/redhat/v7/service'
9
+
10
+
@@ -0,0 +1,20 @@
1
+ module Specinfra
2
+ class HostInventory
3
+ class Service < Base
4
+ def get
5
+ cmd = backend.command.get(:get_inventory_service)
6
+ ret = backend.run_command(cmd)
7
+ if ret.success?
8
+ parse(ret.stdout)
9
+ else
10
+ nil
11
+ end
12
+ end
13
+
14
+ def parse(cmd_ret)
15
+ parser = create_parser_class('service')
16
+ parser.parse(cmd_ret)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,6 +1,9 @@
1
+ require 'koma/ext/specinfra/host_inventory/base'
2
+ require 'koma/ext/specinfra/host_inventory/parser'
3
+
1
4
  module Specinfra
2
5
  class HostInventory
3
- EXTRA_KEYS = %w(package user group)
6
+ EXTRA_KEYS = %w(package user group service)
4
7
 
5
8
  def self.inventory_keys
6
9
  KEYS + EXTRA_KEYS
data/lib/koma/ext.rb CHANGED
@@ -1,3 +1,6 @@
1
1
  require 'koma/ext/specinfra/host_inventory'
2
+ require 'koma/ext/specinfra/host_inventory/parser'
3
+
2
4
  require 'koma/ext/specinfra/command/base/inventory'
3
5
  require 'koma/ext/specinfra/command/redhat/base/inventory'
6
+ require 'koma/ext/specinfra/command/redhat/v7/inventory'
data/lib/koma/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Koma
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end