opskeleton 0.0.2 → 0.0.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.
- 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: []
|