nailed 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +14 -0
- data/README.md +71 -0
- data/README.rdoc +64 -0
- data/bin/app +142 -0
- data/bin/nailed +90 -0
- data/config/products.yml +14 -0
- data/config/products.yml.example +65 -0
- data/db/database.rb +89 -0
- data/lib/nailed.rb +194 -0
- data/log/nailed.log +18 -0
- data/nailed.gemspec +25 -0
- data/public/images/favicon.ico +0 -0
- data/public/vendor/css/foundation.css +6031 -0
- data/public/vendor/css/foundation.min.css +1 -0
- data/public/vendor/css/morris.css +2 -0
- data/public/vendor/css/normalize.css +425 -0
- data/public/vendor/js/external/fastclick.js +9 -0
- data/public/vendor/js/external/jquery.js +26 -0
- data/public/vendor/js/external/modernizr.js +8 -0
- data/public/vendor/js/external/placeholder.js +2 -0
- data/public/vendor/js/foundation.min.js +10 -0
- data/public/vendor/js/foundation/foundation.abide.js +294 -0
- data/public/vendor/js/foundation/foundation.accordion.js +65 -0
- data/public/vendor/js/foundation/foundation.alert.js +43 -0
- data/public/vendor/js/foundation/foundation.clearing.js +558 -0
- data/public/vendor/js/foundation/foundation.dropdown.js +313 -0
- data/public/vendor/js/foundation/foundation.equalizer.js +74 -0
- data/public/vendor/js/foundation/foundation.interchange.js +344 -0
- data/public/vendor/js/foundation/foundation.joyride.js +915 -0
- data/public/vendor/js/foundation/foundation.js +625 -0
- data/public/vendor/js/foundation/foundation.magellan.js +189 -0
- data/public/vendor/js/foundation/foundation.offcanvas.js +139 -0
- data/public/vendor/js/foundation/foundation.orbit.js +472 -0
- data/public/vendor/js/foundation/foundation.reveal.js +443 -0
- data/public/vendor/js/foundation/foundation.slider.js +231 -0
- data/public/vendor/js/foundation/foundation.tab.js +167 -0
- data/public/vendor/js/foundation/foundation.tooltip.js +298 -0
- data/public/vendor/js/foundation/foundation.topbar.js +436 -0
- data/public/vendor/js/morris.min.js +7 -0
- data/public/vendor/js/morris/morris.js +1892 -0
- data/public/vendor/js/morris/raphael-min.js +11 -0
- data/public/vendor/js/morris/raphael.js +8117 -0
- data/views/bugzilla.haml +110 -0
- data/views/github.haml +63 -0
- data/views/index.haml +51 -0
- data/views/layout.haml +49 -0
- metadata +231 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a4c55d859f8482367000e42658d95e29b719a74b
|
4
|
+
data.tar.gz: a5e2c71830070186fadaf821cdd6bdc927e1c37f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a7a277fd9c9f64f1d6657bcc4e855e5e0e67029f140141975c170cc254bc096eed2d5ac5ca784a0c44bbaa364a2d589c915888bf764c0212a118467e9e5c5efc
|
7
|
+
data.tar.gz: 5592d161d09ff7707d06032c30662c1683049e4f7bf84eaba4cd7c220829b314583fd582fcbf6c68a464e40c738a3592c07d27d7ea55f9868d05c41f988c2beb
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# back-end
|
4
|
+
gem "trollop", "2.0"
|
5
|
+
gem "bicho", "0.0.8"
|
6
|
+
gem "octokit", "3.7.0"
|
7
|
+
gem "data_mapper", "1.2.0"
|
8
|
+
gem "dm-sqlite-adapter", "1.2.0"
|
9
|
+
gem "netrc", "0.10.2"
|
10
|
+
# front-end
|
11
|
+
gem "sinatra-base", "1.4.0"
|
12
|
+
gem "sinatra-assetpack", "0.3.3"
|
13
|
+
gem "haml", "4.0.6"
|
14
|
+
gem "rerun", "0.10.0"
|
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
## What is nailed?
|
2
|
+
|
3
|
+
`nailed` consists of a back-end CLI for data collection and a sinatra based web front-end for visualization of relevant development data of Products that have their bugtracker on Bugzilla and (optionally) their codebase on GitHub.
|
4
|
+
|
5
|
+
`Be aware` that the bugzilla layout (metadata) is still SUSE specific, which may not be useful for everybody.
|
6
|
+
e.g. it relies on bugs being tagged as L3. The plan is to make it optional in the future.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
gem install 'nailed'
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
```
|
14
|
+
$ nailed -h
|
15
|
+
Options:
|
16
|
+
--migrate, -m: Set database to pristine state
|
17
|
+
--upgrade, -u: Upgrade database
|
18
|
+
--bugzilla, -b: Refresh bugzilla database records
|
19
|
+
--github, -g: Refresh github database records
|
20
|
+
--l3, -l: Refresh l3 trend database records
|
21
|
+
--server, -s: Start a dashboard webinterface
|
22
|
+
--help, -h: Show this message
|
23
|
+
```
|
24
|
+
|
25
|
+
## Initial setup
|
26
|
+
|
27
|
+
* for the bugzilla API make sure you have an `.oscrc` file with your credentials in ~
|
28
|
+
* for the github API make sure you have a `.netrc` with a valid GitHub OAuth-Token in ~
|
29
|
+
```
|
30
|
+
# example .netrc
|
31
|
+
|
32
|
+
machine api.github.com
|
33
|
+
login MaximilianMeister
|
34
|
+
password <your OAuth Token>
|
35
|
+
```
|
36
|
+
* to setup the database run
|
37
|
+
```
|
38
|
+
nailed --migrate
|
39
|
+
```
|
40
|
+
|
41
|
+
## Configuration
|
42
|
+
|
43
|
+
All configuration is read from `config/products.yml`
|
44
|
+
|
45
|
+
``` yaml
|
46
|
+
---
|
47
|
+
bugzilla:
|
48
|
+
url: # Url of your Bugzilla instance
|
49
|
+
products:
|
50
|
+
example_product: # Just a a short key/name for the product (can be arbitrary)
|
51
|
+
versions:
|
52
|
+
# Array of Bugzilla products (typically different versions of one product)
|
53
|
+
# Exact names have to be given, as they appear in Bugzilla (can not be arbitrary)
|
54
|
+
organization: # here goes the organization name (under which your repos are hosted) as it appears in GitHub
|
55
|
+
# just leave it blank if your repo isn't hosted under an organizational umbrella
|
56
|
+
repos:
|
57
|
+
# Array of GitHub repository names, as they appear in GitHub
|
58
|
+
# If there are no associated repos for the product, just leave it blank
|
59
|
+
# continue adding more products here
|
60
|
+
|
61
|
+
```
|
62
|
+
|
63
|
+
* in production, after adding products/changes, to upgrade the database with the new changes run
|
64
|
+
```
|
65
|
+
nailed --upgrade
|
66
|
+
```
|
67
|
+
|
68
|
+
## Run
|
69
|
+
|
70
|
+
* create a `cronjob` for automated data collection with `nailed`
|
71
|
+
* start the webserver with `nailed --server`
|
data/README.rdoc
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
= nailed
|
2
|
+
== What is nailed?
|
3
|
+
|
4
|
+
+nailed+ consists of a back-end CLI for data collection and a sinatra based web front-end for visualization of relevant development data of Products that have their bugtracker on Bugzilla and (optionally) their codebase on GitHub.
|
5
|
+
|
6
|
+
+Be+ +aware+ that the bugzilla layout (metadata) is still SUSE specific, which may not be useful for everybody.
|
7
|
+
e.g. it relies on bugs being tagged as L3. The plan is to make it optional in the future.
|
8
|
+
|
9
|
+
== Installation
|
10
|
+
gem install 'nailed'
|
11
|
+
|
12
|
+
== Usage
|
13
|
+
|
14
|
+
$ nailed -h
|
15
|
+
Options:
|
16
|
+
--migrate, -m: Set database to pristine state
|
17
|
+
--upgrade, -u: Upgrade database
|
18
|
+
--bugzilla, -b: Refresh bugzilla database records
|
19
|
+
--github, -g: Refresh github database records
|
20
|
+
--l3, -l: Refresh l3 trend database records
|
21
|
+
--server, -s: Start a dashboard webinterface
|
22
|
+
--help, -h: Show this message
|
23
|
+
|
24
|
+
== Initial setup
|
25
|
+
|
26
|
+
* for the bugzilla API make sure you have an +.oscrc+ file with your credentials in ~
|
27
|
+
* for the github API make sure you have a +.netrc+ with a valid GitHub OAuth-Token in ~
|
28
|
+
|
29
|
+
# example .netrc
|
30
|
+
|
31
|
+
machine api.github.com
|
32
|
+
login MaximilianMeister
|
33
|
+
password <your OAuth Token>
|
34
|
+
|
35
|
+
* to setup the database run
|
36
|
+
nailed --migrate
|
37
|
+
|
38
|
+
== Configuration
|
39
|
+
|
40
|
+
All configuration is read from +config/products.yml+
|
41
|
+
|
42
|
+
---
|
43
|
+
bugzilla:
|
44
|
+
url: # Url of your Bugzilla instance
|
45
|
+
products:
|
46
|
+
example_product: # Just a a short key/name for the product (can be arbitrary)
|
47
|
+
versions:
|
48
|
+
# Array of Bugzilla products (typically different versions of one product)
|
49
|
+
# Exact names have to be given, as they appear in Bugzilla (can not be arbitrary)
|
50
|
+
organization: # here goes the organization name (under which your repos are hosted) as it appears in GitHub
|
51
|
+
# just leave it blank if your repo isn't hosted under an organizational umbrella
|
52
|
+
repos:
|
53
|
+
# Array of GitHub repository names, as they appear in GitHub
|
54
|
+
# If there are no associated repos for the product, just leave it blank
|
55
|
+
# continue adding more products here
|
56
|
+
|
57
|
+
* in production, after adding products/changes, to upgrade the database with the new changes run
|
58
|
+
nailed --upgrade
|
59
|
+
|
60
|
+
== Run
|
61
|
+
|
62
|
+
* create a +cronjob+ for automated data collection with +nailed+
|
63
|
+
* start the webserver with
|
64
|
+
nailed --server
|
data/bin/app
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'sinatra/base'
|
4
|
+
require 'sinatra/assetpack'
|
5
|
+
require 'haml'
|
6
|
+
require 'json'
|
7
|
+
require 'time'
|
8
|
+
require File.join(File.expand_path("..", File.dirname(__FILE__)),"lib","nailed")
|
9
|
+
require File.join(File.expand_path("..", File.dirname(__FILE__)),"db","database")
|
10
|
+
|
11
|
+
class App < Sinatra::Base
|
12
|
+
ROOT_PATH = File.join(File.expand_path("..", File.dirname(__FILE__)))
|
13
|
+
self.set :root, File.join(ROOT_PATH, "lib")
|
14
|
+
set :public_folder, File.join(ROOT_PATH, "public")
|
15
|
+
set :views, File.join(ROOT_PATH, "views")
|
16
|
+
set :bind, '0.0.0.0'
|
17
|
+
|
18
|
+
register Sinatra::AssetPack
|
19
|
+
|
20
|
+
assets {
|
21
|
+
serve '/js', from: '../public/vendor/js'
|
22
|
+
serve '/css', from: '../public/vendor/css'
|
23
|
+
serve '/images', from: '../public/images'
|
24
|
+
|
25
|
+
js :foundation, '/js/foundation.min.js', [
|
26
|
+
'/js/external/*.js',
|
27
|
+
'/js/foundation/foundation.js',
|
28
|
+
'/js/foundation/*.js'
|
29
|
+
]
|
30
|
+
js :morris, '/js/morris.min.js', [
|
31
|
+
'/js/morris/morris.js',
|
32
|
+
'/js/morris/raphael.js'
|
33
|
+
]
|
34
|
+
|
35
|
+
css :foundation, '/css/foundation.min.css', [
|
36
|
+
'/css/foundation.css',
|
37
|
+
'/css/normalize.css'
|
38
|
+
]
|
39
|
+
css :morris, '/css/morris.min.js', [
|
40
|
+
'/css/morris.css'
|
41
|
+
]
|
42
|
+
|
43
|
+
js_compression :jsmin
|
44
|
+
css_compression :simple
|
45
|
+
}
|
46
|
+
|
47
|
+
before do
|
48
|
+
@products = Nailed::PRODUCTS["products"].map{|p,v| v["versions"]}.flatten
|
49
|
+
@product_query = @products.join('&product=')
|
50
|
+
@github_repos = Pullrequest.all(:order => [:created_at.desc]).map(&:repository_rname).uniq
|
51
|
+
end
|
52
|
+
|
53
|
+
helpers do
|
54
|
+
def get_trends(action, item)
|
55
|
+
case action
|
56
|
+
when :bug
|
57
|
+
trend = Bugtrend.all(:product_name => item)
|
58
|
+
when :pull
|
59
|
+
trend = Pulltrend.all(:repository_rname => item)
|
60
|
+
when :l3
|
61
|
+
trend = L3Trend.all
|
62
|
+
end
|
63
|
+
trend_clone = trend.clone
|
64
|
+
begin
|
65
|
+
interval = (trend.length/20.0).round
|
66
|
+
last_iter_open = trend.first.open
|
67
|
+
trend.each do |bt|
|
68
|
+
if trend.index(bt) % interval != 0
|
69
|
+
if bt != trend.last
|
70
|
+
if bt.open == last_iter_open
|
71
|
+
trend_clone.delete(bt)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
else
|
75
|
+
next
|
76
|
+
end
|
77
|
+
last_iter_open = bt.open
|
78
|
+
end
|
79
|
+
rescue ZeroDivisionError
|
80
|
+
end
|
81
|
+
trend_clone.to_json
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# define sinatra routes
|
86
|
+
get '/' do
|
87
|
+
@l3trend = get_trends(:l3, nil)
|
88
|
+
|
89
|
+
@bugtop = []
|
90
|
+
Nailed::PRODUCTS["products"].each do |product,values|
|
91
|
+
values["versions"].each do |version|
|
92
|
+
p = Product.get(version)
|
93
|
+
open = Bugreport.count(:product_name => p.name, :is_open => true)
|
94
|
+
@bugtop << {label: p.name, value: open} unless open == 0
|
95
|
+
end
|
96
|
+
end
|
97
|
+
@bugtop = @bugtop.to_json
|
98
|
+
|
99
|
+
haml :index
|
100
|
+
end
|
101
|
+
|
102
|
+
Nailed::PRODUCTS["products"].each do |product,values|
|
103
|
+
values["versions"].each do |version|
|
104
|
+
get "/#{version.gsub(/ /,'_')}/bugzilla" do
|
105
|
+
@product = version
|
106
|
+
|
107
|
+
@bugtrend = get_trends(:bug, version)
|
108
|
+
@allbugs = Bugreport.all(:product_name => version).to_json
|
109
|
+
@allopenbugs = (Bugreport.all(:product_name => version, :is_open => true) -
|
110
|
+
Bugreport.all(:product_name => version, :whiteboard.like => "%openL3%", :is_open => true)).sort! {|a,b| Time.parse(b.last_change_time.to_s).to_i <=> Time.parse(a.last_change_time.to_s).to_i}
|
111
|
+
@allopenl3bugs = (Bugreport.all(:product_name => version, :is_open => true, :whiteboard.like => "%openL3%")).sort! {|a,b| Time.parse(b.last_change_time.to_s).to_i <=> Time.parse(a.last_change_time.to_s).to_i}
|
112
|
+
@bugprio = []
|
113
|
+
{"P1 - Urgent" => "p1",
|
114
|
+
"P2 - High" => "p2",
|
115
|
+
"P3 - Medium" => "p3",
|
116
|
+
"P4 - Low" => "p4",
|
117
|
+
"P5 - None" => "p5"}.each_pair do |key,val|
|
118
|
+
@bugprio << {"bugprio" => key, val => Bugreport.count(:product_name => version, :priority => key, :is_open => true)}
|
119
|
+
end
|
120
|
+
@bugprio = @bugprio.to_json
|
121
|
+
|
122
|
+
haml :bugzilla
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
@github_repos = Pullrequest.all(:order => [:created_at.desc]).map(&:repository_rname).uniq
|
128
|
+
@github_repos.each do |repo|
|
129
|
+
get "/github/#{repo}" do
|
130
|
+
@repo = repo
|
131
|
+
@org = Repository.get(repo).organization_oname
|
132
|
+
@github_url_all_pulls = "https://github.com/#{@org}/#{@repo}/pulls"
|
133
|
+
|
134
|
+
@allpulls = Pullrequest.all(:repository_rname => repo).sort! {|a,b| b.pr_number <=> a.pr_number}
|
135
|
+
@pulltrend = get_trends(:pull, repo)
|
136
|
+
|
137
|
+
haml :github
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
run! if app_file == $0
|
142
|
+
end
|
data/bin/nailed
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "trollop"
|
4
|
+
require File.join(File.expand_path("..", File.dirname(__FILE__)),"lib","nailed")
|
5
|
+
require File.join(File.expand_path("..", File.dirname(__FILE__)),"db","database")
|
6
|
+
|
7
|
+
bugzilla_client = Nailed::Bugzilla.new
|
8
|
+
github_client = Nailed::Github.new
|
9
|
+
|
10
|
+
opts = Trollop::options do
|
11
|
+
opt :migrate, "Set database to pristine state", :short => 'm'
|
12
|
+
opt :upgrade, "Upgrade database", :short => 'u'
|
13
|
+
opt :bugzilla, "Refresh bugzilla database records", :short => 'b'
|
14
|
+
opt :github, "Refresh github database records", :short => 'g'
|
15
|
+
opt :l3, "Refresh l3 trend database records", :short => 'l'
|
16
|
+
opt :server, "Start a dashboard webinterface", :short => 's'
|
17
|
+
end
|
18
|
+
|
19
|
+
if opts.map{|k,v| v == false}
|
20
|
+
puts "try nailed -h"
|
21
|
+
end
|
22
|
+
|
23
|
+
if opts[:server_given]
|
24
|
+
if Nailed::PRODUCTS["products"].nil?
|
25
|
+
abort("Add some data, there is nothing to be shown")
|
26
|
+
else
|
27
|
+
begin
|
28
|
+
`#{File.join("rerun ",File.expand_path("..", File.dirname(__FILE__)),"bin","app")}`
|
29
|
+
rescue Interrupt
|
30
|
+
sleep 2
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.each_pair do |key,val|
|
37
|
+
case key
|
38
|
+
when :migrate
|
39
|
+
if val
|
40
|
+
print("Are you sure? This will delete all data from the database. (y/n) ")
|
41
|
+
if gets.strip == "y"
|
42
|
+
Product.auto_migrate!
|
43
|
+
Bugreport.auto_migrate!
|
44
|
+
Bugtrend.auto_migrate!
|
45
|
+
L3Trend.auto_migrate!
|
46
|
+
Organization.auto_migrate!
|
47
|
+
Repository.auto_migrate!
|
48
|
+
Pullrequest.auto_migrate!
|
49
|
+
Pulltrend.auto_migrate!
|
50
|
+
Nailed.fill_db_after_migration(github_client.client)
|
51
|
+
Nailed.log("info", "Database migrated")
|
52
|
+
abort "Database migrated"
|
53
|
+
else
|
54
|
+
abort "Aborting..."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
when :upgrade
|
58
|
+
if val
|
59
|
+
print "Are you sure? This will create new tables, new columns, but not change anything existing. (y/n) "
|
60
|
+
if gets.strip == "y"
|
61
|
+
Product.auto_upgrade!
|
62
|
+
Bugreport.auto_upgrade!
|
63
|
+
Bugtrend.auto_upgrade!
|
64
|
+
L3Trend.auto_upgrade!
|
65
|
+
Organization.auto_upgrade!
|
66
|
+
Repository.auto_upgrade!
|
67
|
+
Pullrequest.auto_upgrade!
|
68
|
+
Pulltrend.auto_upgrade!
|
69
|
+
Nailed.fill_db_after_migration(github_client.client)
|
70
|
+
Nailed.log("info", "Database upgraded")
|
71
|
+
abort "Database upgraded"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
when :bugzilla
|
75
|
+
if val
|
76
|
+
bugzilla_client.get_bugs
|
77
|
+
bugzilla_client.write_bug_trends
|
78
|
+
end
|
79
|
+
when :github
|
80
|
+
if val
|
81
|
+
github_client.update_pull_states
|
82
|
+
github_client.get_open_pulls
|
83
|
+
end
|
84
|
+
when :l3
|
85
|
+
if val
|
86
|
+
bugzilla_client.write_l3_trends
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
data/config/products.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
---
|
2
|
+
bugzilla:
|
3
|
+
url: # Url of your Bugzilla instance
|
4
|
+
products:
|
5
|
+
example_product: # Just a a short key/name for the product (can be arbitrary)
|
6
|
+
versions:
|
7
|
+
# Array of Bugzilla products (typically different versions of one product)
|
8
|
+
# Exact names have to be given, as they appear in Bugzilla (can not be arbitrary)
|
9
|
+
organization: # here goes the organization name (under which your repos are hosted) as it appears in GitHub
|
10
|
+
# just leave it blank if your repo isn't hosted under an organizational umbrella
|
11
|
+
repos:
|
12
|
+
# Array of GitHub repository names, as they appear in GitHub
|
13
|
+
# If there are no associated repos for the product, just leave it blank
|
14
|
+
# continue adding more products here
|
@@ -0,0 +1,65 @@
|
|
1
|
+
---
|
2
|
+
bugzilla:
|
3
|
+
url: https://bugzilla.novell.com
|
4
|
+
products:
|
5
|
+
cloud:
|
6
|
+
versions:
|
7
|
+
- SUSE Cloud 3
|
8
|
+
- SUSE Cloud 4
|
9
|
+
- SUSE Cloud 5
|
10
|
+
organization: crowbar
|
11
|
+
repos:
|
12
|
+
- crowbar
|
13
|
+
- barclamp-crowbar
|
14
|
+
- barclamp-deployer
|
15
|
+
- barclamp-dns
|
16
|
+
- barclamp-ganglia
|
17
|
+
- barclamp-ipmi
|
18
|
+
- barclamp-logging
|
19
|
+
- barclamp-nagios
|
20
|
+
- barclamp-network
|
21
|
+
- barclamp-ntp
|
22
|
+
- barclamp-provisioner
|
23
|
+
- barclamp-redhat-install
|
24
|
+
- barclamp-test
|
25
|
+
- barclamp-ubuntu-install
|
26
|
+
- barclamp-glance
|
27
|
+
- barclamp-nova
|
28
|
+
- barclamp-swift
|
29
|
+
- barclamp-keystone
|
30
|
+
- barclamp-mysql
|
31
|
+
- barclamp-kong
|
32
|
+
- barclamp-nova_dashboard
|
33
|
+
- barclamp-openstack
|
34
|
+
- barclamp-hadoop
|
35
|
+
- barclamp-hive
|
36
|
+
- barclamp-pig
|
37
|
+
- barclamp-zookeeper
|
38
|
+
- barclamp-sqoop
|
39
|
+
- barclamp-quantum
|
40
|
+
- barclamp-clouderamanager
|
41
|
+
- barclamp-ApacheHadoop
|
42
|
+
susemanager:
|
43
|
+
versions:
|
44
|
+
- SUSE Manager 2.1 Server
|
45
|
+
- SUSE Manager 2.1 Proxy
|
46
|
+
organization: SUSE
|
47
|
+
repos:
|
48
|
+
- spacewalk
|
49
|
+
scc:
|
50
|
+
versions:
|
51
|
+
- SUSE Customer Center
|
52
|
+
organization: SUSE
|
53
|
+
repos:
|
54
|
+
- happy-customer
|
55
|
+
sles:
|
56
|
+
versions:
|
57
|
+
- SUSE Linux Enterprise Server 12 (SLES 12)
|
58
|
+
organization: SUSE
|
59
|
+
repos:
|
60
|
+
- machinery
|
61
|
+
opensuse:
|
62
|
+
versions:
|
63
|
+
- openSUSE 13.1
|
64
|
+
organization:
|
65
|
+
repos:
|