resource_in 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f8c4c14f7b4880004d746b81563a92fef6cfdb1f
4
+ data.tar.gz: 3b02b6126dff78fe353c863215e53d26b761e67d
5
+ SHA512:
6
+ metadata.gz: 0f59e34ca17f34645cda020faba37777daa2d2b04aa6cfb1904637782ae657e4329dda3b9723afa0519bcc536f6d0d90abfc097aa965faa4d39c9f0712b9e944
7
+ data.tar.gz: 4da6b34a1e1f97920a113aadce829995937f1c26b7c87459f06e1ac6dc3c62d587f2ef6a36c295743395438b80b30f4942e167cc0183df4b819739ee20e7fc10
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ Gemfile.lock
2
+ .*sw*
3
+ /tmp/
4
+ lib/resource_in/driver
5
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in resource-in.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ Resource Integrator
2
+ ===================
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/r-in ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.dirname(__FILE__)
4
+
5
+ require "optparse"
6
+ require "resource_in"
7
+ require "colorize"
8
+
9
+ # here is default definition of commandline-options
10
+ options = {
11
+ :type => 'all',
12
+ }
13
+ parser = OptionParser.new do |opt|
14
+ opt.banner = <<-EOS
15
+ Usage: #{"r-in <subcommands>".bold}
16
+
17
+ #{"Command Overview".bold}
18
+ #{"r-in list [condition]".bold}
19
+ list all resource information overview. When you specify a condition, you can filter results.
20
+ #{"r-in get [server-name]".bold}
21
+ get a server information which is specified in argument.
22
+ EOS
23
+ end
24
+
25
+ subparsers = Hash.new {|h,k|
26
+ puts "No such subcommand: #{k}"
27
+ exit 1
28
+ }
29
+ subparsers['list'] = OptionParser.new.on('-t [ computing | all(DEFAULT) ] ') \
30
+ {|type| options[:type] = type}
31
+ subparsers['get'] = OptionParser.new.on()
32
+
33
+ command = parser.order!(ARGV).first
34
+ subparsers[ARGV.shift].parse!(ARGV) unless ARGV.empty?
35
+
36
+ if ResourceIn::Command.respond_to?(command)
37
+ ResourceIn::Command.send(command, options, ARGV)
38
+ else
39
+ puts parser.banner()
40
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'ucs_driver'
2
+ require_relative 'vmware_driver'
3
+
4
+ require 'terminal-table/import'
5
+
6
+ module ResourceIn
7
+ class Command
8
+ def self.list(opts, argv)
9
+ resource_kls = case opts[:type]
10
+ when 'all'
11
+ Machine
12
+ when 'machine'
13
+ Machine
14
+ else
15
+ raise 'unknown type is detected'
16
+ end
17
+
18
+ resource = resource_kls.new
19
+
20
+ resource.output(resource.filter(argv.first, resource.list))
21
+ end
22
+ def self.get(opts, argv)
23
+ machine = Machine.new
24
+
25
+ data = machine.get(argv.first)
26
+
27
+ if data != [nil]
28
+ machine.output_detail(data)
29
+ else
30
+ puts "warning: no such resource '#{argv.first}' in this environment."
31
+ exit 1
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,18 @@
1
+ require 'json'
2
+
3
+ module ResourceIn
4
+ class Driver
5
+ FORMAT = ['name', 'address', 'status', 'location', 'boottime', 'created_by']
6
+ DETAIL_FORMAT = ['name', 'address', 'status', 'location', 'boottime', 'created_by', 'cores', 'RAM', 'OS', 'Alarm']
7
+
8
+ def invoke(command, cachepath = '/dev/null')
9
+ cachepath.gsub!(' ', '_')
10
+
11
+ if !!cachepath and FileTest.exists?(cachepath) and not FileTest.zero?(cachepath)
12
+ JSON.parse(File.read(cachepath))
13
+ else
14
+ JSON.parse(`#{command} 2> /dev/null | tee #{cachepath}`)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ require_relative "machine_impl"
2
+ require_relative "resource"
3
+
4
+ module ResourceIn
5
+
6
+ class Machine < Resource
7
+ attr_reader :location, :manager
8
+
9
+ def initialize
10
+ super
11
+ @drivers = [UCSDriver, VMwareDriver]
12
+ end
13
+
14
+ include MachineResourceImpl
15
+ end
16
+ end
@@ -0,0 +1,80 @@
1
+ module ResourceIn
2
+ module MachineResourceImpl
3
+ def list
4
+ @drivers.map do |klass|
5
+ driver_racktables = RacktablesDriver.new
6
+ obj = klass.new
7
+
8
+ case [klass]
9
+ when [ResourceIn::VMwareDriver]
10
+ obj.list.map do |each|
11
+ last_update = driver_racktables.get_lastupdate(each['name'])
12
+ if !!last_update and last_update['status'] != 'error'
13
+ each['created_by'] = "#{last_update['person']}"
14
+ end
15
+
16
+ each
17
+ end
18
+ else
19
+ obj.list
20
+ end
21
+ end.flatten
22
+ end
23
+ def get(condition)
24
+ @drivers.map do |klass|
25
+ obj = klass.new
26
+
27
+ obj.get(condition)
28
+ end.flatten
29
+ end
30
+ def filter(condition, data)
31
+ data.select do |d|
32
+ cond = false
33
+ cond |= d['name'] =~ /^#{condition}/
34
+ cond |= d['address'].any? {|x| x =~ /^#{condition}/}
35
+ end
36
+ end
37
+ def output(data)
38
+ format = Driver::FORMAT
39
+
40
+ table_output = table do |t|
41
+ t.headings = format
42
+ data.each do |each|
43
+ line = []
44
+ format.each_with_index do |k, i|
45
+ case k
46
+ when 'address'
47
+ line[i] = each[k].join("\n")
48
+ else
49
+ line[i] = each[k]
50
+ end
51
+ end
52
+ t << line
53
+ end
54
+ end
55
+
56
+ puts table_output
57
+ end
58
+ def output_detail(data)
59
+ table = Terminal::Table.new do |t|
60
+ format = Driver::DETAIL_FORMAT
61
+
62
+ t << [key = format.shift, data.first[key]]
63
+ t << :separator
64
+
65
+ format.each do |k|
66
+ t << [k, data.first[k]]
67
+ end
68
+ end
69
+
70
+ puts table
71
+ end
72
+ def do_create(options)
73
+ @drivers.each do |klass|
74
+ obj = klass.new
75
+
76
+ obj.create(options)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,14 @@
1
+ require_relative "driver"
2
+ require 'rbconfig'
3
+
4
+ module ResourceIn
5
+ class RacktablesDriver < Driver
6
+ def initialize
7
+ @cmd_lastupdate = 'get_vm_lastupdate'
8
+ @cachepath = '/tmp/cache.racktables'
9
+ end
10
+ def get_lastupdate(vm)
11
+ invoke("#{@cmd_lastupdate} '#{vm}'", @cachepath + ".last_update.#{vm}")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+ module ResourceIn
2
+ class Resource
3
+ attr_reader :name, :type, :drivers
4
+
5
+ def initialize
6
+ @drivers = []
7
+ end
8
+
9
+ ### These methods are assumed to be override by each Resource SubClass
10
+ def list
11
+ # This methods list data from each drivers
12
+ # @output: Array
13
+ end
14
+
15
+ def filter(data, condition)
16
+ # This implement filters of input data
17
+ # @input:
18
+ # - data : Array
19
+ # - condition : String
20
+ # @output : Array
21
+ end
22
+
23
+ def output(data)
24
+ # This outputs data to STDOUT
25
+ # @input : Array
26
+ end
27
+
28
+ def do_create(options)
29
+ # This create resoruce
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ require_relative "driver"
2
+
3
+ module ResourceIn
4
+ class UCSDriver < Driver
5
+ def initialize
6
+ @cmd_list = '/usr/local/bin/ucs_list_servers'
7
+ @cachepath = '/tmp/ucs_servers.cache'
8
+ end
9
+ def list
10
+ invoke(@cmd_list, @cachepath).each do |d|
11
+ d['status'] = case d['status']
12
+ when 'ok'
13
+ 'ok'
14
+ else
15
+ 'warning'
16
+ end
17
+ d['address'] = []
18
+ d['boottime'] = ''
19
+ d['created_by'] = ''
20
+ end
21
+ end
22
+ def get(_)
23
+ # Not implemented yet
24
+ []
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module ResourceIn
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,21 @@
1
+ require_relative "driver"
2
+ require_relative "racktables_driver"
3
+
4
+ module ResourceIn
5
+ class VMwareDriver < Driver
6
+ def initialize
7
+ @cmd_list = '/usr/local/bin/vmware_list_servers'
8
+ @cmd_get = '/usr/local/bin/vmware_get_server'
9
+
10
+ @cachepath = '/tmp/vmware_servers.cache'
11
+ end
12
+ def list
13
+ invoke(@cmd_list, @cachepath).each do |d|
14
+ d['status'] = d['status'] == 'green' ? 'ok' : 'warning'
15
+ end
16
+ end
17
+ def get(condition)
18
+ invoke("#{@cmd_get} #{condition}")
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ require "resource_in/version"
2
+ require "resource_in/command"
3
+ require "resource_in/machine"
4
+ require "resource_in/resource"
5
+ require "resource_in/version"
6
+
7
+ module ResourceIntegrator
8
+ def self.version
9
+ VERSION
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'resource_in/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "resource_in"
8
+ spec.version = ResourceIn::VERSION
9
+ spec.authors = ["Hiroyasu OHYAMA"]
10
+ spec.email = ["user.localhost2000@gmail.com"]
11
+
12
+ spec.summary = %q{This integrates IT resources.}
13
+ spec.description = %q{}
14
+ spec.homepage = "https://github.com/userlocalhost2000/resource-in"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "bin"
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "terminal-table", "1.5.2"
22
+ spec.add_runtime_dependency "colorize", "0.7.7"
23
+ spec.add_runtime_dependency "dl_racktables", "~> 0.0.1"
24
+ spec.add_development_dependency "bundler", "~> 1.11"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rspec", "~> 3.0"
27
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resource_in
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Hiroyasu OHYAMA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: terminal-table
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.5.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.5.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.7.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: dl_racktables
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.11'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.11'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ description: ''
98
+ email:
99
+ - user.localhost2000@gmail.com
100
+ executables:
101
+ - r-in
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - .gitignore
106
+ - .rspec
107
+ - .travis.yml
108
+ - Gemfile
109
+ - README.md
110
+ - Rakefile
111
+ - bin/r-in
112
+ - lib/resource_in.rb
113
+ - lib/resource_in/command.rb
114
+ - lib/resource_in/driver.rb
115
+ - lib/resource_in/machine.rb
116
+ - lib/resource_in/machine_impl.rb
117
+ - lib/resource_in/racktables_driver.rb
118
+ - lib/resource_in/resource.rb
119
+ - lib/resource_in/ucs_driver.rb
120
+ - lib/resource_in/version.rb
121
+ - lib/resource_in/vmware_driver.rb
122
+ - resource-in.gemspec
123
+ homepage: https://github.com/userlocalhost2000/resource-in
124
+ licenses: []
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.0.14.1
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: This integrates IT resources.
146
+ test_files: []
147
+ has_rdoc: