kanmon 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 271479b1cbec8d070ad4daaaa7a47af0e77862a271f7417cb00c88d6e51f6df5
4
- data.tar.gz: 4a0a8c012fe218f30c63ff3921038e2e817b7ea4f39d9dbccea049f199893c4f
3
+ metadata.gz: 7cd9e1d8a755e41165434ffa463b63985f11d472198afc132c3d6c32ad962196
4
+ data.tar.gz: cf18367379ee2bd8bf97844cdcba1f0cd49f0103b64c66f5124373218c7de991
5
5
  SHA512:
6
- metadata.gz: 588b0c59e9697d502483ef90c3b5b1c774809c08883238b9b99ae4840002b06dd49e0e3cb7121ccac6d25ec7412ec87cd6deb27b6f668074240618d0a0c18184
7
- data.tar.gz: 7f42b9031b1fea39f1cbdf5c9747333e30f89a6034e1402287cbb15258a4d61c1806085c114044bcfc342cbfca705e0f75e605b503ee67ecf50cd11aba083def
6
+ metadata.gz: 252463b76b73e7df45e78d08dae7cf93594d0e3e8df629d9d0270473b0f5e837b63836f7d7412da111400ddd9948b3ec71e8c9c05fa505223a2ca9afba5c2a30
7
+ data.tar.gz: 7511a1468e453590f321400a699ccc704627f00eb2efd96040f32fa39fc737385abba27b9fa044939b5541dab0faa97d5002ae54972dbc62b5ad60f1583056d3
data/kanmon.gemspec CHANGED
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "yao", ">= 0.4.1"
23
+ spec.add_dependency "yao", ">= 0.12.0"
24
24
  spec.add_dependency "thor", ">= 0.20.0"
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.16"
27
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rake", ">= 12.3.3"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
  end
data/lib/kanmon.rb CHANGED
@@ -21,8 +21,4 @@ module Kanmon
21
21
  end
22
22
  end
23
23
 
24
- def self.load_config(file_name)
25
- YAML.load_file(file_name)
26
- end
27
-
28
24
  end
data/lib/kanmon/cli.rb CHANGED
@@ -5,79 +5,95 @@ require "kanmon/version"
5
5
  require "kanmon/securitygroup"
6
6
  require "kanmon/server"
7
7
  require "kanmon/exclude_ips"
8
-
9
- module Yao::Resources
10
- class Server < Yao::Resources::Base
11
- def self.add_security_group(server_id, security_group_name)
12
- action(server_id, {"addSecurityGroup": {"name": security_group_name}})
13
- end
14
-
15
- def self.remove_security_group(server_id, security_group_name)
16
- action(server_id, {"removeSecurityGroup": {"name": security_group_name}})
17
- end
18
- end
19
- end
8
+ require "kanmon/config"
20
9
 
21
10
  module Kanmon
22
11
  class CLI < Thor
23
- class_option :kanmon_config, aliases: "f", type: :string, default: "kanmon.yml", banner: "FILE", desc: "Load configure from FILE"
12
+ class_option :config_file, aliases: "f", type: :string, default: nil, banner: "FILE", desc: "Specifies an alternate configuration file. (Default: ~/.kanmon.yml or ./kanmon.yml)"
24
13
  class_option :target, aliases: "t", type: :string, default: nil, banner: "TARGET", desc: "If more than one Security Group is in the setting, select target"
25
14
 
26
15
  desc "open", "Commands about add rules to SecurityGroup"
27
16
  def open
28
- @kanmon.open
17
+ adapter = load_adapter(config)
18
+ adapter.open
29
19
  puts "Success!!"
30
20
  rescue Yao::Conflict => e
31
21
  puts "Is not it already opened?" if e.message.include?("Security group rule already exists.")
32
22
  puts e
23
+ rescue Kanmon::AlreadySecurityExistsError
33
24
  end
34
25
 
35
26
  desc "close", "Commands about delete rules from SecurityGroup"
27
+ method_option :all, aliases: "a", type: :boolean, default: false, desc: "If set, close all Security Groups(Exclusive witeh --target)"
36
28
  def close
37
- @kanmon.close
29
+ if options[:all] && options[:target].nil?
30
+ config.targets.each do |name|
31
+ puts "Checking #{name}"
32
+ config.set(name)
33
+ adapter = load_adapter(config)
34
+ adapter.close
35
+ end
36
+ else
37
+ adapter = load_adapter(config)
38
+ adapter.close
39
+ end
38
40
  puts "Success!!"
39
41
  end
40
42
 
41
- desc "ssh HOSTNAME", "Commands about exec ssh"
43
+ desc "ssh [args]", "Commands about exec ssh"
42
44
  def ssh(*args)
43
- invoke :exec, args.unshift("ssh")
45
+ ssh_args = args.unshift("ssh", config.target)
46
+ invoke :exec, ssh_args
44
47
  end
45
48
 
46
49
  desc "exec COMMAND", "Commands about open, exec command, close"
47
50
  def exec(*args)
48
- @kanmon.open do
51
+ adapter = load_adapter(config)
52
+ adapter.open do
49
53
  command = Shellwords.join(args)
50
54
  Process.wait spawn(command)
51
55
  end
52
56
  end
53
57
 
58
+ desc "list", "Commands about list targets"
59
+ def list
60
+ puts config.targets.sort.join("\n")
61
+ end
62
+
54
63
  desc "version", "Commands about show version"
55
64
  def version
56
65
  puts Kanmon::VERSION
57
66
  end
58
67
 
59
68
  no_commands do
60
- def invoke_command(command, *args)
61
- unless %w(help version).include?(command.name)
62
- Kanmon.init_yao
63
- @config = Kanmon.load_config(options[:kanmon_config])
64
- @config = @config[options[:target]] if options[:target]
69
+ def config
70
+ if @__config.nil?
71
+ @__config = Config.load_file(options[:config_file])
72
+ end
73
+
74
+ if target = options[:target]
75
+ @__config.set(target)
76
+ end
77
+
78
+ @__config
79
+ end
80
+
81
+ def load_adapter(opts)
82
+ Kanmon.init_yao
65
83
 
66
- if @config.key?("security_group")
67
- @kanmon = SecurityGroup.new(@config["security_group"], @config["port"])
68
- end
69
- if @config.key?('server')
70
- @kanmon = Server.new(@config["server"], @config["port"])
71
- end
84
+ adapter = if opts.security_group
85
+ SecurityGroup.new(opts.security_group, opts.port)
86
+ elsif opts.server
87
+ Server.new(opts.server, opts.port)
88
+ end
72
89
 
73
- exclude_ips = ExcludeIps.new(@config["exclude_ips"])
74
- if exclude_ips.include?(@kanmon.ip)
75
- puts "MyIP(#{@kanmon.ip}) is included in exclude IPs."
76
- exit
77
- end
90
+ exclude_ips = ExcludeIps.new(opts.exclude_ips)
91
+ if exclude_ips.include?(adapter.ip)
92
+ puts "MyIP(#{adapter.ip}) is included in exclude IPs."
93
+ exit
78
94
  end
79
95
 
80
- super
96
+ adapter
81
97
  end
82
98
  end
83
99
  end
@@ -0,0 +1,39 @@
1
+ require "yaml"
2
+
3
+ module Kanmon
4
+ class Config
5
+ def self.load_file(filepath)
6
+ data = if filepath
7
+ YAML.load_file(filepath)
8
+ else
9
+ default_files = [File.expand_path("~/.kanmon.yml"), "./kanmon.yml"]
10
+ config_file = default_files.find {|path| File.exists?(path)}
11
+ YAML.load_file(config_file)
12
+ end
13
+
14
+ new(data)
15
+ end
16
+
17
+ def initialize(data)
18
+ @data = data
19
+ end
20
+
21
+ def targets
22
+ @data.keys
23
+ end
24
+
25
+ def set(target)
26
+ @target = target
27
+ end
28
+
29
+ %w(security_group server port exclude_ips).each do |name|
30
+ define_method(name) do
31
+ if @target
32
+ @data[@target][name]
33
+ else
34
+ @data[name]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,8 @@
1
+
2
+ module Kanmon
3
+ class AlreadySecurityExistsError < StandardError
4
+ def initialize(msg="Security Group already exists.")
5
+ super
6
+ end
7
+ end
8
+ end
data/lib/kanmon/server.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "yao"
2
2
 
3
3
  require "kanmon/myip"
4
+ require "kanmon/error"
4
5
 
5
6
  module Kanmon
6
7
  class Server
@@ -32,12 +33,21 @@ module Kanmon
32
33
  Yao::Server.add_security_group(@id, sg_name)
33
34
  end
34
35
 
36
+ def validate_sg_already_exists
37
+ if Yao::SecurityGroup.list({name: sg_name}).size > 0
38
+ puts "Security Group #{sg_name} already exists."
39
+ puts "Is not it already opened?"
40
+ raise Kanmon::AlreadySecurityExistsError
41
+ end
42
+ end
43
+
35
44
  def remove_sg
36
45
  puts "Remove security group #{sg_name} from server '#{@server.name}'."
37
46
  Yao::Server.remove_security_group(@id, sg_name)
38
47
  end
39
48
 
40
49
  def open
50
+ validate_sg_already_exists
41
51
  create_sg
42
52
  add_sg
43
53
 
@@ -53,10 +63,11 @@ module Kanmon
53
63
 
54
64
  def close
55
65
  begin
56
- @sg = Yao::SecurityGroup.get(sg_name)
57
- remove_sg
58
- delete_sg
59
-
66
+ result = Yao::SecurityGroup.find_by_name(sg_name)
67
+ if @sg = result.first
68
+ remove_sg
69
+ delete_sg
70
+ end
60
71
  rescue => e
61
72
  p e
62
73
  end
@@ -1,3 +1,3 @@
1
1
  module Kanmon
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanmon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuki Koya
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-12 00:00:00.000000000 Z
11
+ date: 2020-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yao
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.1
19
+ version: 0.12.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.4.1
26
+ version: 0.12.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: 12.3.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: 12.3.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -101,6 +101,8 @@ files:
101
101
  - kanmon.gemspec
102
102
  - lib/kanmon.rb
103
103
  - lib/kanmon/cli.rb
104
+ - lib/kanmon/config.rb
105
+ - lib/kanmon/error.rb
104
106
  - lib/kanmon/exclude_ips.rb
105
107
  - lib/kanmon/myip.rb
106
108
  - lib/kanmon/securitygroup.rb
@@ -124,8 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  - !ruby/object:Gem::Version
125
127
  version: '0'
126
128
  requirements: []
127
- rubyforge_project:
128
- rubygems_version: 2.7.6
129
+ rubygems_version: 3.1.2
129
130
  signing_key:
130
131
  specification_version: 4
131
132
  summary: CLI tool of add public IP to Securoity Group on OpenStack.