ocean_kit 0.1.1 → 0.1.4

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
  SHA256:
3
- metadata.gz: 3a7c18376eb5ecea1afb1556c36e5737408e62fe0f56f748e3854a2e505256ef
4
- data.tar.gz: 4b8dfd49bd3ccebd047ce80413735eb7b3904d94e8764a5dd8520d889d34e79b
3
+ metadata.gz: f64bff4db9951b545ab33726c4cb0ad20ccaa0d55006737759d023352ccb0f9f
4
+ data.tar.gz: e1bf61b1b1ec8d36ed813ec00681f5a8ae8b06de9046eee2e7f4785edabc4a27
5
5
  SHA512:
6
- metadata.gz: 10736e6687f8776e27d85c02efc41f07f0662161f99f46eb74e1b8f177d86f68f87f4d10ea4660711cfeb3da7b6093e801ee8f7ec0a185c576cdbdf0ced31d85
7
- data.tar.gz: 8f8454d175bddb8b5933f5d4a5cfc7afbfe75058f6f3811d69f1d41bb4778272f34db9e1da7c76afe13248bdbe02b87a3629c633b8544732d45385526ecd7b41
6
+ metadata.gz: 68d98b0f3681e5cab5ebb2f6e5635cd06993382406a7f3ce0d881820416ecf35ee6b98196e426553752e9a6724fdcfcae3605e87af8a3f0613c3541c5d2f8c37
7
+ data.tar.gz: 27d79bfe3f6241dc8a07a26476b2148bdb705c88c25aee38cb5f7361dca878337c5a94570229c53f2399d6d66f99e578526e410fdaa0a6fb131d329527a54b00
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ocean_kit (0.1.0)
4
+ ocean_kit (0.1.3)
5
5
  droplet_kit (~> 3.16, >= 3.16.1)
6
6
  pastel
7
7
  thor (~> 1.2)
data/README.md CHANGED
@@ -55,7 +55,7 @@ Commands:
55
55
  ocean_kit firewalls enable_all_ssh # Enables SSH on all firewalls
56
56
  ocean_kit firewalls enable_ssh [firewall_number] # Enable SSH on given firewall
57
57
  ocean_kit firewalls help [COMMAND] # Describe subcommands or one specific subcommand
58
- ocean_kit firewalls list # Lists all firewalls for account.
58
+ ocean_kit firewalls list # Lists all firewalls.
59
59
  ```
60
60
 
61
61
  ## Development
data/exe/ocean_kit CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  require "ocean_kit"
4
4
 
5
- require_relative "../lib/helpers"
5
+ check_credentials_file
6
6
 
7
7
  OceanKit::Client.start(ARGV)
@@ -0,0 +1,3 @@
1
+ require_relative "./client"
2
+ require_relative "./console"
3
+ require_relative "./firewalls"
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ def do_client
4
+ DropletKit::Client.new(access_token: access_token)
5
+ end
6
+
7
+ def access_token
8
+ credentials_file["digital_ocean_token"]
9
+ rescue => e
10
+ puts pastel.red.bold("Error: #{e.message}")
11
+ end
12
+
13
+ def credentials_file
14
+ YAML.load(File.read(File.expand_path("~/.ocean_kit/credentials.yml")))
15
+ end
16
+
17
+ def check_credentials_file
18
+ if credentials_file.nil?
19
+ puts pastel.red.bold("Error: credentials file not found. Please run `ocean_kit setup` first.")
20
+ exit 1
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ def pastel
4
+ Pastel.new
5
+ end
6
+
7
+ def default_text(text)
8
+ pastel.white(text)
9
+ end
10
+
11
+ def underline_text(text)
12
+ pastel.white.bold.underline(text)
13
+ end
14
+
15
+ def bold_text(text)
16
+ pastel.white.bold(text)
17
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ def fetch_firewall(number)
4
+ do_client.firewalls.all.each_with_index.filter { |firewall, index| index == number.to_i }.flatten.first
5
+ end
6
+
7
+ def update_firewall(firewall)
8
+ new_firewall = DropletKit::Firewall.new(
9
+ name: firewall.name,
10
+ inbound_rules: firewall.inbound_rules.map { |rule| new_inbound_rule(rule) },
11
+ outbound_rules: firewall.outbound_rules,
12
+ droplet_ids: firewall.droplet_ids,
13
+ tags: firewall.tags
14
+ )
15
+ do_client.firewalls.update(new_firewall, id: firewall.id)
16
+ end
17
+
18
+ def firewall_inbound_rules(firewall)
19
+ firewall.inbound_rules.map(&:to_h)
20
+ end
21
+
22
+ def new_inbound_rule(rule)
23
+ DropletKit::FirewallInboundRule.new(
24
+ protocol: rule[:protocol],
25
+ ports: rule[:ports],
26
+ sources: rule[:sources]
27
+ )
28
+ end
29
+
30
+ def remove_ssh_rule(rules_array)
31
+ rules_array.delete_if { |r| r[:ports] == "22" }
32
+ end
33
+
34
+ def add_ssh_rule(rules_array)
35
+ rules_array << {protocol: "tcp", ports: "22", sources: {addresses: ["0.0.0.0/0", "::/0"]}}
36
+ end
@@ -0,0 +1,3 @@
1
+ require_relative "./firewalls"
2
+ require_relative "./droplets"
3
+ require_relative "./config"
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OceanKit
4
+ class Config < Thor
5
+ desc "setup", "Setup OceanKit environment"
6
+ def setup
7
+ # First create the ~/.ocean_kit directory if it doesn't exist
8
+ Dir.mkdir(File.expand_path("~/.ocean_kit")) unless File.directory?(File.expand_path("~/.ocean_kit"))
9
+ # Next create the credentials.yml file if it doesn't exist
10
+ unless File.file?(File.expand_path("~/.ocean_kit/credentials.yml"))
11
+ File.write(File.expand_path("~/.ocean_kit/credentials.yml"), <<~YAML)
12
+ ---
13
+ digital_ocean_token: <YOUR_DIGITAL_OCEAN_TOKEN>
14
+
15
+ YAML
16
+ end
17
+ puts pastel.green.bold("Successfully setup OceanKit environment.")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OceanKit
4
+ class Droplets < Thor
5
+ desc "list", "Lists all droplers."
6
+ def list
7
+ puts underline_text("Droplets:")
8
+ puts pastel.blue.bold "🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳\n"
9
+ do_client.droplets.all.each_with_index do |droplet, index|
10
+ puts pastel.white.bold "Name: ", pastel.clear.white(droplet.name)
11
+ puts pastel.white.bold "ID: ", pastel.clear.white(droplet.id)
12
+ puts pastel.white.bold "Public IP: ", pastel.clear.white(droplet.networks.v4.first.ip_address)
13
+ puts pastel.white.bold "Region: ", pastel.clear.white(droplet.region.slug)
14
+ puts pastel.white.bold "Status: ", pastel.clear.white(droplet.status)
15
+ puts pastel.white.bold "Created: ", pastel.clear.white(droplet.created_at)
16
+ puts pastel.blue.bold "\n🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳\n"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module OceanKit
4
4
  class Firewalls < Thor
5
- desc "list", "Lists all firewalls for account."
5
+ desc "list", "Lists all firewalls."
6
6
  def list
7
7
  puts pastel.white.bold.underline("Firewalls:\n")
8
8
  do_client.firewalls.all.each_with_index do |firewall, index|
@@ -45,7 +45,7 @@ module OceanKit
45
45
 
46
46
  desc "enable_ssh [firewall_number]", "Enable SSH on given firewall"
47
47
  def enable_ssh(number)
48
- firewall = do_client.firewalls.find(id: fetch_firewall_id(number))
48
+ firewall = fetch_firewall(number)
49
49
  inbound_rules = firewall_inbound_rules(firewall)
50
50
  firewall.inbound_rules = add_ssh_rule(inbound_rules)
51
51
  begin
@@ -58,7 +58,7 @@ module OceanKit
58
58
 
59
59
  desc "disable_ssh [firewall_number]", "Disable SSH on given firewall"
60
60
  def disable_ssh(number)
61
- firewall = do_client.firewalls.find(id: fetch_firewall_id(number))
61
+ firewall = fetch_firewall(number)
62
62
  inbound_rules = firewall_inbound_rules(firewall)
63
63
  firewall.inbound_rules = remove_ssh_rule(inbound_rules)
64
64
  begin
@@ -68,50 +68,5 @@ module OceanKit
68
68
  puts pastel.red.bold("Error: #{e.message}")
69
69
  end
70
70
  end
71
-
72
- private
73
-
74
- def fetch_firewall_id(number)
75
- do_client.firewalls.all.each_with_index.filter { |firewall, index| index == number.to_i }.flatten.first.id
76
- end
77
-
78
- def update_firewall(firewall)
79
- new_firewall = DropletKit::Firewall.new(
80
- name: firewall.name,
81
- inbound_rules: firewall.inbound_rules.map { |rule| new_inbound_rule(rule) },
82
- outbound_rules: firewall.outbound_rules,
83
- droplet_ids: firewall.droplet_ids,
84
- tags: firewall.tags
85
- )
86
- do_client.firewalls.update(new_firewall, id: firewall.id)
87
- end
88
-
89
- def firewall_inbound_rules(firewall)
90
- firewall.inbound_rules.map(&:to_h)
91
- end
92
-
93
- def new_inbound_rule(rule)
94
- DropletKit::FirewallInboundRule.new(
95
- protocol: rule[:protocol],
96
- ports: rule[:ports],
97
- sources: rule[:sources]
98
- )
99
- end
100
-
101
- def remove_ssh_rule(rules_array)
102
- rules_array.delete_if { |r| r[:ports] == "22" }
103
- end
104
-
105
- def add_ssh_rule(rules_array)
106
- rules_array << {protocol: "tcp", ports: "22", sources: {addresses: ["0.0.0.0/0", "::/0"]}}
107
- end
108
-
109
- def pastel
110
- Pastel.new
111
- end
112
-
113
- def find_firewall_by_id(id)
114
- do_client.firewalls.find(id:)
115
- end
116
71
  end
117
72
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OceanKit
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.4"
5
5
  end
data/lib/ocean_kit.rb CHANGED
@@ -6,23 +6,19 @@ require "thor"
6
6
  require "yaml"
7
7
 
8
8
  require_relative "ocean_kit/version"
9
- require_relative "./ocean_kit/firewalls"
9
+ require_relative "./ocean_kit/resources/base"
10
+ require_relative "./ocean_kit/helpers/base"
10
11
 
11
12
  module OceanKit
12
13
  class Client < Thor
13
- desc "firewalls SUBCOMMAND ...ARGS", "manage your DO firewall"
14
- subcommand "firewalls", Firewalls
14
+ desc "config SUBCOMMAND ...ARGS", "Create OceanKit folder and credentials.yml file"
15
+ subcommand "config", Config
15
16
 
16
- no_commands {
17
- def client
18
- DropletKit::Client.new(access_token: access_token)
19
- end
17
+ desc "droplets SUBCOMMAND ...ARGS", "manage your Digital Ocean droplets"
18
+ subcommand "droplets", Droplets
20
19
 
21
- def access_token
22
- credentials_file = YAML.load(File.read(File.expand_path("~/.ocean_kit/credentials.yml")))
23
- credentials_file["digital_ocean_token"]
24
- end
25
- }
20
+ desc "firewalls SUBCOMMAND ...ARGS", "manage your Digital Ocean firewalls"
21
+ subcommand "firewalls", Firewalls
26
22
  end
27
23
 
28
24
  class Error < StandardError; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocean_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leo Policastro
@@ -77,9 +77,15 @@ files:
77
77
  - README.md
78
78
  - Rakefile
79
79
  - exe/ocean_kit
80
- - lib/helpers.rb
81
80
  - lib/ocean_kit.rb
82
- - lib/ocean_kit/firewalls.rb
81
+ - lib/ocean_kit/helpers/base.rb
82
+ - lib/ocean_kit/helpers/client.rb
83
+ - lib/ocean_kit/helpers/console.rb
84
+ - lib/ocean_kit/helpers/firewalls.rb
85
+ - lib/ocean_kit/resources/base.rb
86
+ - lib/ocean_kit/resources/config.rb
87
+ - lib/ocean_kit/resources/droplets.rb
88
+ - lib/ocean_kit/resources/firewalls.rb
83
89
  - lib/ocean_kit/version.rb
84
90
  - ocean_kit.gemspec
85
91
  - sig/ocean_kit.rbs
data/lib/helpers.rb DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- def do_client
4
- ocean = OceanKit::Client.new
5
- ocean.client
6
- end