opskeleton 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +38 -11
- data/TODOS +3 -0
- data/bin/opsk +75 -7
- data/lib/opskeleton/version.rb +1 -1
- data/templates/Rakefile +9 -0
- data/templates/gemfile +2 -0
- data/templates/puppetfile.erb +0 -3
- data/templates/run.sh +1 -1
- data/templates/spec.erb +4 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -1,16 +1,19 @@
|
|
1
|
-
Intro
|
2
|
-
==========
|
3
1
|
|
4
|
-
|
2
|
+
<img src="https://raw.github.com/narkisr/vagrant-sketching-board/master/images/opskeleton.png" width='100%' hight='100%' alt="" />
|
5
3
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
# Intro
|
5
|
+
|
6
|
+
Opskelaton is an opinionated bootstrap tool for local Sandbox projects.
|
7
|
+
|
8
|
+
Opsk aims to solve the following common issues:
|
9
|
+
* Devops develop Puppet modules on master machines which results with 'It works on my (machine) master' approach.
|
10
|
+
* Implicit/Missing dependencies, like ruby version used, operating system, gems, third party puppet module
|
11
|
+
* Manual steps in setting up puppet modules and local sandboxes (like installing third party code).
|
12
|
+
* Non standard layout, projects missing README and LICENSE files, no clear seperation between developed and depdendant code.
|
13
|
+
* No clear development guidelines, for example extracting general modules and exporting them.
|
14
|
+
|
15
|
+
|
16
|
+
See it in action [here](https://www.youtube.com/watch?v=LNlHC54Ej8c).
|
14
17
|
|
15
18
|
Usage
|
16
19
|
=========
|
@@ -18,3 +21,27 @@ Usage
|
|
18
21
|
```bash
|
19
22
|
$ opsk generate name box-type
|
20
23
|
```
|
24
|
+
|
25
|
+
|
26
|
+
## Layout
|
27
|
+
|
28
|
+
Opskelaton creates the complete folder structure fine tuned to match best practices:
|
29
|
+
|
30
|
+
Folder layout:
|
31
|
+
|
32
|
+
<img src="https://raw.github.com/narkisr/vagrant-sketching-board/master/images/opsk-folders.png" width='30%' hight='50%' alt="" />
|
33
|
+
|
34
|
+
|
35
|
+
## Lifecycle
|
36
|
+
|
37
|
+
Opskelaton defines a simple module life cycle:
|
38
|
+
|
39
|
+
1. Internal non reusable modules (usually specific to a client site) go under static-modules
|
40
|
+
2. If we create a general reusable module which is ready for prime time we pull out to a new git repository.
|
41
|
+
3. The extracted module is added back as a third party (using [librarian-puppet](https://github.com/rodjek/librarian-puppet) module which reside under module folder.
|
42
|
+
|
43
|
+
Life cycle scheme:
|
44
|
+
|
45
|
+
<img src="https://raw.github.com/narkisr/vagrant-sketching-board/master/images/module-lifecycle-black.png" width='30%' hight='50%' alt="" />
|
46
|
+
|
47
|
+
|
data/TODOS
ADDED
data/bin/opsk
CHANGED
@@ -1,10 +1,65 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
$:.push 'lib'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'thor'
|
5
6
|
require 'thor/group'
|
7
|
+
require 'opskeleton/version'
|
6
8
|
|
7
9
|
module Opsk
|
10
|
+
class Package < Thor::Group
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
# during dev time
|
15
|
+
if(File.dirname(__FILE__) == './bin')
|
16
|
+
File.dirname('.')
|
17
|
+
else
|
18
|
+
"#{File.dirname(__FILE__)}/../"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_pkg
|
23
|
+
empty_directory('pkg')
|
24
|
+
end
|
25
|
+
|
26
|
+
def package
|
27
|
+
name = File.basename(Dir.getwd)
|
28
|
+
ignored = IO.readlines('.gitignore').map(&:chomp)
|
29
|
+
ignored.delete('modules')
|
30
|
+
excludes = ignored.map{|f| "'#{f}'"}.join(" --exclude=") << ' --exclude-backups --exclude-vcs --exclude=pkg'
|
31
|
+
run("tar --exclude=#{excludes} -czf pkg/#{name}.tar.gz ../#{name} > /dev/null", :verbose => false)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
class Specgen < Thor::Group
|
38
|
+
include Thor::Actions
|
39
|
+
|
40
|
+
argument :name, :type => :string, :desc => "static module name"
|
41
|
+
|
42
|
+
def self.source_root
|
43
|
+
# during dev time
|
44
|
+
if(File.dirname(__FILE__) == './bin')
|
45
|
+
File.dirname('.')
|
46
|
+
else
|
47
|
+
"#{File.dirname(__FILE__)}/../"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_spec_folders
|
52
|
+
%w(classes defines functions hosts).each do |t|
|
53
|
+
empty_directory("static-modules/#{name}/spec/#{t}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_class_spec
|
58
|
+
template('templates/spec.erb', "static-modules/#{name}/spec/classes/")
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
8
63
|
class Generate < Thor::Group
|
9
64
|
include Thor::Actions
|
10
65
|
|
@@ -32,17 +87,14 @@ module Opsk
|
|
32
87
|
template('templates/vagrant.erb', "#{path}/Vagrantfile")
|
33
88
|
end
|
34
89
|
|
35
|
-
def git
|
36
|
-
copy_file('templates/gitignore', "#{path}/.gitignore")
|
37
|
-
inside(path) do
|
38
|
-
run('git init .')
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
90
|
def create_gemfile
|
43
91
|
copy_file('templates/gemfile', "#{path}/Gemfile")
|
44
92
|
end
|
45
93
|
|
94
|
+
def create_rakefile
|
95
|
+
copy_file('templates/Rakefile', "#{path}/Rakefile")
|
96
|
+
end
|
97
|
+
|
46
98
|
def create_rvmrc
|
47
99
|
template('templates/rvmrc.erb', "#{path}/.rvmrc")
|
48
100
|
end
|
@@ -70,6 +122,15 @@ module Opsk
|
|
70
122
|
template('templates/README.erb', "#{path}/README.md")
|
71
123
|
copy_file('templates/LICENSE-2.0.txt',"#{path}/LICENSE-2.0.txt")
|
72
124
|
end
|
125
|
+
|
126
|
+
def git
|
127
|
+
copy_file('templates/gitignore', "#{path}/.gitignore")
|
128
|
+
inside(path) do
|
129
|
+
run('git init .')
|
130
|
+
run('git add -A')
|
131
|
+
run("git commit -m 'initial sandbox import'")
|
132
|
+
end
|
133
|
+
end
|
73
134
|
end
|
74
135
|
end
|
75
136
|
|
@@ -77,6 +138,13 @@ end
|
|
77
138
|
module Opsk
|
78
139
|
class Root < Thor
|
79
140
|
register Opsk::Generate, 'generate', 'generate [name] [box]', 'generates opskelaton project structure'
|
141
|
+
register Opsk::Specgen, 'specgen', 'specgen [module]', 'generates rspec-puppet for static-modules/module'
|
142
|
+
register Opsk::Package, 'package', 'package', 'packages current module for celestial'
|
143
|
+
|
144
|
+
desc 'version', 'print opsk version'
|
145
|
+
def version
|
146
|
+
puts Opskeleton::VERSION
|
147
|
+
end
|
80
148
|
end
|
81
149
|
end
|
82
150
|
|
data/lib/opskeleton/version.rb
CHANGED
data/templates/Rakefile
ADDED
data/templates/gemfile
CHANGED
data/templates/puppetfile.erb
CHANGED
data/templates/run.sh
CHANGED
@@ -1 +1 @@
|
|
1
|
-
puppet apply --modulepath=modules:static-modules manifests/default.pp $@
|
1
|
+
puppet apply --modulepath=modules:static-modules manifests/default.pp --hiera_config hiera.yaml $@
|
data/templates/spec.erb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opskeleton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -41,12 +41,14 @@ files:
|
|
41
41
|
- Gemfile.lock
|
42
42
|
- README.md
|
43
43
|
- Rakefile
|
44
|
+
- TODOS
|
44
45
|
- bin/opsk
|
45
46
|
- lib/opskeleton.rb
|
46
47
|
- lib/opskeleton/version.rb
|
47
48
|
- opskeleton.gemspec
|
48
49
|
- templates/LICENSE-2.0.txt
|
49
50
|
- templates/README.erb
|
51
|
+
- templates/Rakefile
|
50
52
|
- templates/clean.yaml
|
51
53
|
- templates/default.erb
|
52
54
|
- templates/gemfile
|
@@ -55,6 +57,7 @@ files:
|
|
55
57
|
- templates/puppetfile.erb
|
56
58
|
- templates/run.sh
|
57
59
|
- templates/rvmrc.erb
|
60
|
+
- templates/spec.erb
|
58
61
|
- templates/vagrant.erb
|
59
62
|
homepage: https://github.com/narkisr/opskeleton
|
60
63
|
licenses: []
|