sambot 0.1.43 → 0.1.44

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: e9956d6ca9c4ab939d89580be328d56bc800ae79
4
- data.tar.gz: e9863b2063c6b84127843ddf1d58082b3952fff7
3
+ metadata.gz: 1ff206043b3d053e2f72817f49310550e883eb52
4
+ data.tar.gz: c0571205dfe9c6d50e0cf3ffdece5f0425b7f71d
5
5
  SHA512:
6
- metadata.gz: 556e2d28b7270fa2c943c67adfe540d2719ad228521afa6412e7653c9da823b639539f3702e778fec06c181eeb9759ec798e14185d00821b3068fb14aa33a759
7
- data.tar.gz: fb213573790311cf5eee1f13892eea56353435e5bbfc9d1b7b86c71e6691e36c397a245cd3d5eae944948af992d4fc4b1db9daa3b578b36dd26efbe9b7c1de6d
6
+ metadata.gz: bc916312401b0e9ddc4ed9042c1980e5c75a6d87098d9018872fc1c299abbc18370ee3bac21e91600c1fc2fe993224f82d834d5f3d6ac9d13c2acab7c7d4e801
7
+ data.tar.gz: b1096e1a3eee52a6ba5d981e287dfbc5bce9d0ffda7caf92362d794ca2a880f4a0325a723c613452161a67ccacd2b564dba12c28debfe92316620c4bae06ca27
data/lib/sambot/cli.rb CHANGED
@@ -2,6 +2,11 @@ require 'thor'
2
2
  require_relative 'domain/common/application_exception'
3
3
  require_relative 'domain/common/file_checker'
4
4
  require_relative 'domain/secrets/vault'
5
+ require_relative 'domain/workstations/hosts'
6
+ require_relative 'domain/workstations/env'
7
+ require_relative 'domain/workstations/ssh_config_file'
8
+ require_relative 'domain/workstations/ssh_config_section'
9
+ require_relative 'domain/workstations/ssh_parser'
5
10
  require_relative 'domain/common/ui'
6
11
  require_relative 'domain/common/config'
7
12
  require_relative 'domain/common/runtime'
@@ -12,7 +17,7 @@ require_relative 'domain/cookbooks/metadata'
12
17
  require_relative 'commands/cookbook'
13
18
  require_relative 'commands/secret'
14
19
  require_relative 'commands/teamcity'
15
- require_relative 'commands/inventory'
20
+ require_relative 'commands/workstation'
16
21
 
17
22
  module Sambot
18
23
  class CLI < Thor
@@ -26,8 +31,8 @@ module Sambot
26
31
  desc 'secret', 'Manage secrets inside Chef cookbooks'
27
32
  subcommand 'secret', Sambot::Commands::Secret
28
33
 
29
- desc 'inventory', 'Manage instance inventories'
30
- subcommand 'inventory', Sambot::Commands::Inventory
34
+ desc 'workstation', 'Manage engineer workstations'
35
+ subcommand 'workstation', Sambot::Commands::Workstation
31
36
 
32
37
  end
33
38
  end
@@ -22,6 +22,11 @@ module Sambot
22
22
  Sambot::Vault.new.write(path)
23
23
  end
24
24
 
25
+ desc 'list', 'List all secrets at a given path'
26
+ def list
27
+ Sambot::Vault.new.list(path)
28
+ end
29
+
25
30
  end
26
31
  end
27
32
  end
@@ -0,0 +1,22 @@
1
+ module Sambot
2
+ module Commands
3
+
4
+ class Session < Thor
5
+
6
+ namespace 'session'
7
+
8
+ desc "start", "Start a new DEV/QE session"
9
+ def start
10
+ username = ask('What is your DEV/QE username?')
11
+ password = ask('What is your DEV/QE password?')
12
+ puts "not implemented"
13
+ end
14
+
15
+ desc "stop", "Stop the DEV/QE session"
16
+ def start
17
+ puts "not implemented"
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module Sambot
2
+ module Commands
3
+
4
+ class Workstation < Thor
5
+
6
+ namespace 'workstation'
7
+
8
+ desc "cnfigure", "Sets up an engineering workstation"
9
+ def configure
10
+ username = ask("What is your DEV/QE Active Directory username i.e. john.smith?")
11
+ debug("Updating your SSH configuration.")
12
+ config = Domain::Workstations::SshParser.new.update('DEV\\' + username)
13
+ config.save
14
+ debug("Updating your environment variables.")
15
+ Domain::Workstations::Env.new.update
16
+ debug("Generating the datasource for Free Remote Desktop Manager, your RDP client.")
17
+ filename = Domain::Workstations::Hosts.new.generate
18
+ info("Your workstation is now ready for use. The RDM datasource is available here: #{filename}")
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -1,6 +1,6 @@
1
1
  module Sambot
2
2
  module Domain
3
- module Chef
3
+ module Secrets
4
4
  class Vault
5
5
 
6
6
  def initialize
File without changes
File without changes
@@ -0,0 +1 @@
1
+ brew install vault
@@ -0,0 +1,81 @@
1
+ module Sambot
2
+ module Domain
3
+ module Workstations
4
+ class SshConfigFile
5
+
6
+ def initialize
7
+ @make_backups = true
8
+ @header_lines = []
9
+ @sections = []
10
+ @sections_by_name = {}
11
+ read_config
12
+ end
13
+
14
+ def sections
15
+ @sections
16
+ end
17
+
18
+ def sections_by_name
19
+ @sections_by_name
20
+ end
21
+
22
+ def add_section(name)
23
+ section = SshConfigSection.new(name)
24
+ @sections << section
25
+ @sections_by_name[section.name] = section
26
+ section
27
+ end
28
+
29
+ def read_config
30
+ current_section = nil
31
+ IO.readlines(File.expand_path("~/.ssh/config")).each_with_index do |line, i|
32
+ line.rstrip!
33
+ if line =~ /\bHost\s+(.+)/
34
+ current_section = add_section($1)
35
+ else
36
+ if current_section
37
+ current_section.lines << line
38
+ else
39
+ @header_lines << line
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ def set(host_nick, key, value)
46
+ section = @sections_by_name[host_nick] || add_section(host_nick)
47
+ section[key] = value
48
+ end
49
+
50
+ def dump
51
+ to_text([@header_lines, @sections].flatten)
52
+ end
53
+
54
+ def rm(host_nick)
55
+ if @sections_by_name.key?(host_nick)
56
+ @sections_by_name.delete host_nick
57
+ @sections.delete_at(@sections.index{|s| s.name == host_nick})
58
+ end
59
+ end
60
+
61
+ def add_alias(host_nick, new_alias)
62
+ section = @sections_by_name[host_nick] || add_section(host_nick)
63
+ section.aliases.push(new_alias) unless section.aliases.member?(new_alias)
64
+ end
65
+
66
+ def save
67
+ File.open(File.expand_path("~/.ssh/config"), "w") do |file|
68
+ file.puts dump
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def to_text(ray)
75
+ ray.map {|s| s.to_s } * "\n"
76
+ end
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,84 @@
1
+ module Sambot
2
+ module Domain
3
+ module Workstations
4
+ class SshConfigSection
5
+
6
+ attr_accessor :name, :aliases, :lines, :settings
7
+
8
+ def initialize(name)
9
+ all_names = name.split(/\s+/)
10
+ @name = all_names.shift
11
+ @aliases = all_names
12
+ @settings = {}
13
+ @lines = []
14
+ end
15
+
16
+ def [](setting)
17
+ unless @settings.key? setting
18
+ if line = lines[setting_index(setting)]
19
+ key,val = line.split(nil, 2)
20
+ @settings[key] = val
21
+ end
22
+ end
23
+ @settings[setting]
24
+ end
25
+
26
+ def unset(setting)
27
+ if line_num = setting_index(setting)
28
+ @settings.delete setting
29
+ @lines.delete_at line_num
30
+ end
31
+ end
32
+
33
+ def header
34
+ name_with_aliases = [@name, *aliases].join(" ")
35
+ "Host #{name_with_aliases}"
36
+ end
37
+
38
+ def to_s
39
+ [header, *lines] * "\n"
40
+ end
41
+
42
+ def []=(setting, value)
43
+ if value.is_a?(Array)
44
+ value.each do |val|
45
+ line_num = lines.length
46
+ lines[line_num] = format_line(setting, val)
47
+ end
48
+ elsif value != '-'
49
+ line_num = lines.length
50
+ lines[line_num] = format_line(setting, value)
51
+ else
52
+ @settings.delete(setting)
53
+ @lines.delete_at(setting_index(setting))
54
+ end
55
+ end
56
+
57
+ def matches?(text)
58
+ r = Regexp.new text
59
+ name =~ r || aliases.any? {|a| a =~ r} || lines.any? {|line| line =~ r}
60
+ end
61
+
62
+ def matches_exactly?(text)
63
+ name == text || has_alias?(text)
64
+ end
65
+
66
+ def has_alias?(text)
67
+ aliases.member?(text)
68
+ end
69
+
70
+ protected
71
+
72
+ def format_line(setting, value)
73
+ " #{setting} #{value}"
74
+ end
75
+
76
+ def setting_index(setting)
77
+ r = Regexp.new(setting)
78
+ lines.index {|line| line =~ r}
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,48 @@
1
+ require_relative 'ssh_config_file'
2
+ require_relative 'ssh_config_section'
3
+
4
+ module Sambot
5
+ module Domain
6
+ module Workstations
7
+ class SshParser
8
+
9
+ ENTRIES = {
10
+ 'bastion': {
11
+ username: '',
12
+ 'HostName': '146.177.10.174',
13
+ 'LocalForward': [
14
+ '8200 vault.brighter.io:8200',
15
+ '9997 splunk.brighter.io:9997'
16
+ ]
17
+ },
18
+ 'AVG-*': {
19
+ aliases: ['avg-*', 'GD-*', 'gd-*', 'NW-*', 'nw-*','PHX-* phx-* RS-* rs-* THD-* thd-*'],
20
+ username: '',
21
+ 'ProxyJump': 'bastion',
22
+ 'StrictHostKeyChecking': 'no'
23
+ }
24
+ }
25
+
26
+ def update(username)
27
+ config = SshConfigFile.new
28
+ sections = config.sections_by_name
29
+ ENTRIES.each_pair do |key, val|
30
+ config.rm(key.to_s)
31
+ val.each_pair do |x, y|
32
+ if x == :aliases
33
+ val[x].each do |new_alias|
34
+ config.add_alias(key.to_s, new_alias.to_s)
35
+ end
36
+ elsif x == :username
37
+ config.set(key.to_s, 'Username', username)
38
+ else
39
+ config.set(key.to_s, x.to_s, y)
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module Sambot
2
- VERSION = '0.1.43'.freeze
2
+ VERSION = '0.1.44'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sambot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.43
4
+ version: 0.1.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olivier Kouame
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-29 00:00:00.000000000 Z
11
+ date: 2017-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -190,9 +190,10 @@ files:
190
190
  - lib/sambot.rb
191
191
  - lib/sambot/cli.rb
192
192
  - lib/sambot/commands/cookbook.rb
193
- - lib/sambot/commands/inventory.rb
194
193
  - lib/sambot/commands/secret.rb
194
+ - lib/sambot/commands/session.rb
195
195
  - lib/sambot/commands/teamcity.rb
196
+ - lib/sambot/commands/workstation.rb
196
197
  - lib/sambot/domain/common/application_exception.rb
197
198
  - lib/sambot/domain/common/config.rb
198
199
  - lib/sambot/domain/common/file_checker.rb
@@ -203,6 +204,12 @@ files:
203
204
  - lib/sambot/domain/cookbooks/kitchen.rb
204
205
  - lib/sambot/domain/cookbooks/metadata.rb
205
206
  - lib/sambot/domain/secrets/vault.rb
207
+ - lib/sambot/domain/workstations/env.rb
208
+ - lib/sambot/domain/workstations/hosts.rb
209
+ - lib/sambot/domain/workstations/install.sh
210
+ - lib/sambot/domain/workstations/ssh_config_file.rb
211
+ - lib/sambot/domain/workstations/ssh_config_section.rb
212
+ - lib/sambot/domain/workstations/ssh_parser.rb
206
213
  - lib/sambot/templates/.gitignore
207
214
  - lib/sambot/templates/.kitchen.centos.yml
208
215
  - lib/sambot/templates/.kitchen.gcp.centos.yml
@@ -1,15 +0,0 @@
1
- module Sambot
2
- module Commands
3
-
4
- class Inventory < Thor
5
-
6
- namespace 'inventory'
7
-
8
- desc "generate", "Gets the Rackspace inventory list for use with Remote Desktop Manager"
9
- def generate
10
- say("Not implemented yet")
11
- end
12
-
13
- end
14
- end
15
- end