dockershell 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ #! /usr/bin/env ruby
2
+ require 'puppet'
3
+ require 'fileutils'
4
+
5
+ Puppet.initialize_settings
6
+
7
+ certname = ARGV[0] || exit(1)
8
+ course = ARGV[1]
9
+ environment = certname.split('.').first.gsub('-','_')
10
+
11
+ known_courses = [
12
+ 'autoloading', 'classes', 'cli_intro', 'code', 'facter_intro', 'hiera',
13
+ 'hiera_intro', 'infrastructure', 'inheritance', 'module', 'parser',
14
+ 'puppet_lint', 'relationships', 'resources', 'smoke_test', 'testing',
15
+ 'troubleshooting', 'unit_test', 'validating', 'get_hiera1', 'get_hiera2',
16
+ 'get_hiera3', 'get_hiera4', 'get_hiera5', 'exec',
17
+ ]
18
+ course = 'default' unless known_courses.include? course
19
+
20
+ path = "#{Puppet.settings[:environmentpath]}/#{environment}"
21
+ FileUtils.mkdir_p "#{path}/modules"
22
+ FileUtils.mkdir_p "#{path}/manifests"
23
+
24
+ # Create site manifest with include course_selector::course::${course}
25
+ File.open("#{path}/manifests/site.pp", 'w') { |file|
26
+ file.write "node default {\n"
27
+ file.write " include course_selector::course::#{course}\n"
28
+ file.write "}\n"
29
+ }
@@ -0,0 +1,39 @@
1
+ #! /usr/bin/env ruby
2
+ require 'puppet'
3
+ require 'puppetclassify'
4
+ require 'socket'
5
+ require 'fileutils'
6
+
7
+ Puppet.initialize_settings
8
+
9
+ certname = ARGV[0] || exit(1)
10
+ groups = ARGV[1] # TODO: future enhancement?
11
+ environment = certname.split('.').first.gsub('-','_')
12
+ master = Socket.gethostbyname(Socket.gethostname).first
13
+ auth_info = {
14
+ 'ca_certificate_path' => Puppet.settings[:cacert],
15
+ 'certificate_path' => Puppet.settings[:hostcert],
16
+ 'private_key_path' => Puppet.settings[:hostprivkey],
17
+ }
18
+
19
+ FileUtils.mkdir_p "#{Puppet.settings[:environmentpath]}/#{environment}/modules"
20
+ FileUtils.mkdir_p "#{Puppet.settings[:environmentpath]}/#{environment}/manifests"
21
+
22
+ classifier = PuppetClassify.new("http://#{master}:4433/classifier-api", auth_info)
23
+ group_hash = {
24
+ 'name' => certname,
25
+ 'environment' => environment,
26
+ 'environment_trumps' => true,
27
+ 'parent' => '00000000-0000-4000-8000-000000000000',
28
+ 'classes' => {},
29
+ 'rule' => ['or', ['=', 'name', certname]],
30
+ }
31
+
32
+ begin
33
+ classifier.groups.create_group(group_hash)
34
+ rescue => e
35
+ puts "Could not create node group #{certname}: #{e.message}"
36
+ exit 1
37
+ end
38
+
39
+ puts "Created node group #{certname} assigned to environment #{environment}"
data/scripts/pe_purge ADDED
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env ruby
2
+ require 'puppet'
3
+ require 'puppetclassify'
4
+ require 'socket'
5
+ require 'fileutils'
6
+
7
+ Puppet.initialize_settings
8
+
9
+ certname = ARGV[0] || exit(1)
10
+ groups = ARGV[1] # TODO: future enhancement?
11
+ environment = certname.split('.').first.gsub('-','_')
12
+ master = Socket.gethostbyname(Socket.gethostname).first
13
+ auth_info = {
14
+ 'ca_certificate_path' => Puppet.settings[:cacert],
15
+ 'certificate_path' => Puppet.settings[:hostcert],
16
+ 'private_key_path' => Puppet.settings[:hostprivkey],
17
+ }
18
+
19
+ classifier = PuppetClassify.new("http://#{master}:4433/classifier-api", auth_info)
20
+
21
+ begin
22
+ group_id = classifier.groups.get_group_id(certname)
23
+ classifier.groups.delete_group(group_id)
24
+ rescue => e
25
+ puts "Error removing node group #{certname}: #{e.message}"
26
+ end
27
+
28
+ begin
29
+ system('puppet', 'cert', 'clean', certname)
30
+ system('puppet', 'node', 'deactivate', certname)
31
+ rescue => e
32
+ puts "Error cleaning certificate #{certname}: #{e.message}"
33
+ end
34
+
35
+ FileUtils.rm_rf "#{Puppet.settings[:environmentpath]}/#{environment}"
36
+
37
+ puts "Removed node group #{certname} and environment #{environment}"
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dockershell
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ben Ford
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: facter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: |2
28
+ Dockershell can be used as a user login shell, or simply run on the CLI. It
29
+ will stand up a Docker container and then drop the user into a bash shell
30
+ on the container. It's highly configurable and supports multiple profiles.
31
+ email: binford2k@gmail.com
32
+ executables:
33
+ - dockershell
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - README.md
38
+ - bin/dockershell
39
+ - lib/dockershell/wordgen.rb
40
+ - lib/dockershell.rb
41
+ - resources/places.txt
42
+ - scripts/course_selector
43
+ - scripts/pe_classify
44
+ - scripts/pe_purge
45
+ homepage: https://github.com/binford2k/dockershell/
46
+ licenses:
47
+ - Apache-2.0
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 2.0.14.1
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Provides a user shell backed by a Docker container.
69
+ test_files: []