knife-stash 0.1.0 → 0.2.0
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/CHANGELOG.md +4 -0
- data/README.md +7 -1
- data/lib/chef/knife/stash_base.rb +97 -0
- data/lib/chef/knife/stash_project_create.rb +48 -46
- data/lib/chef/knife/stash_project_delete.rb +45 -43
- data/lib/chef/knife/stash_project_repos.rb +29 -27
- data/lib/chef/knife/stash_projects.rb +23 -21
- data/lib/chef/knife/stash_repo_create.rb +45 -43
- data/lib/chef/knife/stash_repo_delete.rb +34 -32
- data/lib/chef/knife/stash_repos.rb +30 -28
- data/lib/knife-stash/version.rb +2 -1
- metadata +3 -3
- data/lib/chef/knife/BaseStashCommand.rb +0 -93
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,9 +2,15 @@
|
|
2
2
|
|
3
3
|
A knife plugin for Atlassian Stash.
|
4
4
|
|
5
|
+
[](http://badge.fury.io/rb/knife-stash)
|
6
|
+
|
7
|
+
[](https://codeclimate.com/github/bflad/knife-stash)
|
8
|
+
|
5
9
|
## Installation
|
6
10
|
|
7
|
-
*
|
11
|
+
* `gem install knife-rhn` (if using omnibus install, `/opt/chef/embedded/bin/gem install knife-rhn`)
|
12
|
+
* or... copy `lib/chef/knife/*` files to `~/.chef/plugins/knife`
|
13
|
+
* or... copy `lib/chef/knife/*` files to `path/to/cheforg/.chef/plugins/knife`
|
8
14
|
|
9
15
|
## Usage
|
10
16
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'chef/knife'
|
7
|
+
require 'highline/import'
|
8
|
+
require 'faraday'
|
9
|
+
|
10
|
+
class Chef
|
11
|
+
class Knife
|
12
|
+
module StashBase
|
13
|
+
|
14
|
+
def self.included(includer)
|
15
|
+
includer.class_eval do
|
16
|
+
|
17
|
+
deps do
|
18
|
+
require 'readline'
|
19
|
+
require 'chef/json_compat'
|
20
|
+
end
|
21
|
+
|
22
|
+
unless defined? $default
|
23
|
+
$default = Hash.new
|
24
|
+
end
|
25
|
+
|
26
|
+
option :noop,
|
27
|
+
:long => "--noop",
|
28
|
+
:description => "Perform no modifying operations",
|
29
|
+
:boolean => false
|
30
|
+
|
31
|
+
option :stash_username,
|
32
|
+
:short => "-u USERNAME",
|
33
|
+
:long => "--stash-username USERNAME",
|
34
|
+
:description => "The username for Stash"
|
35
|
+
$default[:stash_username] = ENV['USER']
|
36
|
+
|
37
|
+
option :stash_password,
|
38
|
+
:short => "-p PASSWORD",
|
39
|
+
:long => "--stash-password PASSWORD",
|
40
|
+
:description => "The password for Stash"
|
41
|
+
|
42
|
+
option :stash_hostname,
|
43
|
+
:long => "--stash-hostname HOSTNAME",
|
44
|
+
:description => "The hostname for Stash"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def display_stash_error(message,response)
|
49
|
+
ui.fatal message
|
50
|
+
JSON.parse(response.body)['errors'].each do |error|
|
51
|
+
ui.fatal "#{error['context'] ? error['context'] + ": " : "" }#{error['message']}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_all_values(stash,url,response)
|
56
|
+
r = JSON.parse(response.body)
|
57
|
+
yield r['values']
|
58
|
+
until r['isLastPage']
|
59
|
+
response = stash.get url, { :start => r['nextPageStart'] }
|
60
|
+
r = JSON.parse(response.body)
|
61
|
+
yield r['values']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_config(key)
|
66
|
+
key = key.to_sym
|
67
|
+
rval = config[key] || Chef::Config[:knife][key] || $default[key]
|
68
|
+
Chef::Log.debug("value for config item #{key}: #{rval}")
|
69
|
+
rval
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_stash_connection
|
73
|
+
config[:stash_hostname] = ask("Stash Hostname: ") { |q| q.echo = "*" } unless get_config(:stash_hostname)
|
74
|
+
config[:stash_username] = ask("Stash Username for #{get_config(:stash_hostname)}: ") { |q| q.echo = "*" } unless get_config(:stash_username)
|
75
|
+
config[:stash_password] = ask("Stash Password for #{get_config(:stash_username)}: ") { |q| q.echo = "*" } unless get_config(:stash_password)
|
76
|
+
|
77
|
+
connection = Faraday.new(:url => "https://#{get_config(:stash_hostname)}", :ssl => {:verify => false}) do |faraday|
|
78
|
+
faraday.request :url_encoded # form-encode POST params
|
79
|
+
#faraday.response :logger # log requests to STDOUT
|
80
|
+
faraday.adapter :net_http # make requests with Net::HTTP
|
81
|
+
end
|
82
|
+
connection.basic_auth(get_config(:stash_username),get_config(:stash_password))
|
83
|
+
connection.url_prefix = "https://#{get_config(:stash_hostname)}/rest/api/1.0"
|
84
|
+
connection
|
85
|
+
end
|
86
|
+
|
87
|
+
def get_repo_https_url(project_key,repo)
|
88
|
+
"https://#{get_config(:stash_username)}@#{get_config(:stash_hostname)}/scm/#{project_key}/#{repo}.git"
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_repo_ssh_url(project_key,repo)
|
92
|
+
"ssh://git@#{get_config(:stash_hostname)}:7999/#{project_key}/#{repo}.git"
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -3,66 +3,68 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashProjectCreate < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash project create KEY NAME (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
option :description,
|
18
|
+
:short => "-d DESCRIPTION",
|
19
|
+
:long => "--description DESCRIPTION",
|
20
|
+
:description => "The description for the project"
|
19
21
|
|
20
|
-
|
22
|
+
def run
|
23
|
+
$stdout.sync = true
|
24
|
+
|
25
|
+
key = name_args.first
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
ui.fatal "You need a project key!"
|
28
|
-
show_usage
|
29
|
-
exit 1
|
30
|
-
end
|
27
|
+
if key.nil?
|
28
|
+
ui.fatal "You need a project key!"
|
29
|
+
show_usage
|
30
|
+
exit 1
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
+
name = name_args[1]
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
if name.nil?
|
36
|
+
ui.fatal "You need a project name!"
|
37
|
+
show_usage
|
38
|
+
exit 1
|
39
|
+
end
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
args = name_args[2]
|
42
|
+
if args.nil?
|
43
|
+
args = ""
|
44
|
+
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
stash = get_stash_connection
|
47
|
+
project = { :name => name, :key => key }
|
48
|
+
project[:description] = get_config(:description) if get_config(:description)
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
else
|
52
|
-
response = stash.post do |post|
|
53
|
-
post.url "projects"
|
54
|
-
post.headers['Content-Type'] = "application/json"
|
55
|
-
post.body = JSON.generate(project)
|
56
|
-
end
|
57
|
-
if response.success?
|
58
|
-
ui.info "Created Stash Project: #{key} (#{name})"
|
50
|
+
if get_config(:noop)
|
51
|
+
ui.info "#{ui.color "Skipping project creation process because --noop specified.", :red}"
|
59
52
|
else
|
60
|
-
|
61
|
-
|
53
|
+
response = stash.post do |post|
|
54
|
+
post.url "projects"
|
55
|
+
post.headers['Content-Type'] = "application/json"
|
56
|
+
post.body = JSON.generate(project)
|
57
|
+
end
|
58
|
+
if response.success?
|
59
|
+
ui.info "Created Stash Project: #{key} (#{name})"
|
60
|
+
else
|
61
|
+
display_stash_error "Could not create Stash project!", response
|
62
|
+
exit 1
|
63
|
+
end
|
62
64
|
end
|
65
|
+
|
63
66
|
end
|
64
|
-
|
65
|
-
end
|
66
67
|
|
68
|
+
end
|
67
69
|
end
|
68
70
|
end
|
@@ -3,64 +3,66 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashProjectDelete < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash project delete KEY (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
option :delete_repos,
|
18
|
+
:short => "-d",
|
19
|
+
:long => "--delete-repos",
|
20
|
+
:description => "Delete all repositories in project.",
|
21
|
+
:boolean => false
|
20
22
|
|
21
|
-
|
23
|
+
def run
|
24
|
+
$stdout.sync = true
|
25
|
+
|
26
|
+
key = name_args.first
|
22
27
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
ui.fatal "You need a project key!"
|
29
|
-
show_usage
|
30
|
-
exit 1
|
31
|
-
end
|
28
|
+
if key.nil?
|
29
|
+
ui.fatal "You need a project key!"
|
30
|
+
show_usage
|
31
|
+
exit 1
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
+
stash = get_stash_connection
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
36
|
+
if get_config(:noop)
|
37
|
+
ui.info "#{ui.color "Skipping project deletion process because --noop specified.", :red}"
|
38
|
+
else
|
39
|
+
if get_config(:delete_repos)
|
40
|
+
url = "projects/#{key}/repos"
|
41
|
+
response = stash.get url
|
42
|
+
if response.success?
|
43
|
+
get_all_values stash,url,response do |values|
|
44
|
+
values.each do |repo|
|
45
|
+
repo_delete = StashRepoDelete.new
|
46
|
+
repo_delete.name_args = [ key, repo['name'] ]
|
47
|
+
repo_delete.run
|
48
|
+
end
|
47
49
|
end
|
50
|
+
else
|
51
|
+
display_stash_error "Could not delete Stash project repositories!", response
|
52
|
+
exit 1
|
48
53
|
end
|
54
|
+
end
|
55
|
+
response = stash.delete "projects/#{key}"
|
56
|
+
if response.success?
|
57
|
+
ui.info "Deleted Stash Project: #{key}"
|
49
58
|
else
|
50
|
-
display_stash_error "Could not delete Stash project
|
59
|
+
display_stash_error "Could not delete Stash project!", response
|
51
60
|
exit 1
|
52
61
|
end
|
53
62
|
end
|
54
|
-
|
55
|
-
if response.success?
|
56
|
-
ui.info "Deleted Stash Project: #{key}"
|
57
|
-
else
|
58
|
-
display_stash_error "Could not delete Stash project!", response
|
59
|
-
exit 1
|
60
|
-
end
|
63
|
+
|
61
64
|
end
|
62
|
-
|
63
|
-
end
|
64
65
|
|
66
|
+
end
|
65
67
|
end
|
66
68
|
end
|
@@ -3,43 +3,45 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashProjectRepos < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash project repos KEY (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
17
|
+
def run
|
18
|
+
$stdout.sync = true
|
19
|
+
|
20
|
+
key = name_args.first
|
16
21
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
ui.fatal "You need a project key!"
|
23
|
-
show_usage
|
24
|
-
exit 1
|
25
|
-
end
|
22
|
+
if key.nil?
|
23
|
+
ui.fatal "You need a project key!"
|
24
|
+
show_usage
|
25
|
+
exit 1
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
stash = get_stash_connection
|
29
|
+
url = "projects/#{key}/repos"
|
30
|
+
response = stash.get url
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
if response.success?
|
33
|
+
get_all_values stash,url,response do |values|
|
34
|
+
values.each do |repo|
|
35
|
+
ui.info "#{repo['slug']} (#{repo['name']})"
|
36
|
+
end
|
35
37
|
end
|
38
|
+
else
|
39
|
+
display_stash_error "Could not list Stash project repositories!", response
|
40
|
+
exit 1
|
36
41
|
end
|
37
|
-
|
38
|
-
display_stash_error "Could not list Stash project repositories!", response
|
39
|
-
exit 1
|
42
|
+
|
40
43
|
end
|
41
|
-
|
42
|
-
end
|
43
44
|
|
45
|
+
end
|
44
46
|
end
|
45
47
|
end
|
@@ -3,35 +3,37 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashProjects < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash projects (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
17
|
+
def run
|
18
|
+
$stdout.sync = true
|
19
|
+
|
20
|
+
stash = get_stash_connection
|
21
|
+
url = "projects"
|
22
|
+
response = stash.get url
|
16
23
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
if response.success?
|
24
|
-
get_all_values stash,url,response do |values|
|
25
|
-
values.each do |project|
|
26
|
-
ui.info "#{project['key']}: #{project['name']}"
|
24
|
+
if response.success?
|
25
|
+
get_all_values stash,url,response do |values|
|
26
|
+
values.each do |project|
|
27
|
+
ui.info "#{project['key']}: #{project['name']}"
|
28
|
+
end
|
27
29
|
end
|
30
|
+
else
|
31
|
+
display_stash_error "Could not list Stash projects!", response
|
32
|
+
exit 1
|
28
33
|
end
|
29
|
-
|
30
|
-
display_stash_error "Could not list Stash projects!", response
|
31
|
-
exit 1
|
34
|
+
|
32
35
|
end
|
33
|
-
|
34
|
-
end
|
35
36
|
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
@@ -3,62 +3,64 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashRepoCreate < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash repo create PROJECT_KEY NAME (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
17
|
+
def run
|
18
|
+
$stdout.sync = true
|
19
|
+
|
20
|
+
project_key = name_args.first
|
16
21
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
ui.fatal "You need a project key!"
|
23
|
-
show_usage
|
24
|
-
exit 1
|
25
|
-
end
|
22
|
+
if project_key.nil?
|
23
|
+
ui.fatal "You need a project key!"
|
24
|
+
show_usage
|
25
|
+
exit 1
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
+
name = name_args[1]
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
if name.nil?
|
31
|
+
ui.fatal "You need a repository name!"
|
32
|
+
show_usage
|
33
|
+
exit 1
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
args = name_args[2]
|
37
|
+
if args.nil?
|
38
|
+
args = ""
|
39
|
+
end
|
39
40
|
|
40
|
-
|
41
|
-
|
41
|
+
stash = get_stash_connection
|
42
|
+
repo = { :name => name, :scmId => "git" }
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
else
|
46
|
-
response = stash.post do |post|
|
47
|
-
post.url "projects/#{project_key}/repos"
|
48
|
-
post.headers['Content-Type'] = "application/json"
|
49
|
-
post.body = JSON.generate(repo)
|
50
|
-
end
|
51
|
-
if response.success?
|
52
|
-
ui.info "Created Stash Repository: #{project_key}/#{name}"
|
53
|
-
ui.info "Available via (HTTPS): #{get_repo_https_url(project_key,name)}"
|
54
|
-
ui.info "Available via (SSH): #{get_repo_ssh_url(project_key,name)}"
|
44
|
+
if get_config(:noop)
|
45
|
+
ui.info "#{ui.color "Skipping repo creation process because --noop specified.", :red}"
|
55
46
|
else
|
56
|
-
|
57
|
-
|
47
|
+
response = stash.post do |post|
|
48
|
+
post.url "projects/#{project_key}/repos"
|
49
|
+
post.headers['Content-Type'] = "application/json"
|
50
|
+
post.body = JSON.generate(repo)
|
51
|
+
end
|
52
|
+
if response.success?
|
53
|
+
ui.info "Created Stash Repository: #{project_key}/#{name}"
|
54
|
+
ui.info "Available via (HTTPS): #{get_repo_https_url(project_key,name)}"
|
55
|
+
ui.info "Available via (SSH): #{get_repo_ssh_url(project_key,name)}"
|
56
|
+
else
|
57
|
+
display_stash_error "Could not create Stash repository!", response
|
58
|
+
exit 1
|
59
|
+
end
|
58
60
|
end
|
61
|
+
|
59
62
|
end
|
60
|
-
|
61
|
-
end
|
62
63
|
|
64
|
+
end
|
63
65
|
end
|
64
66
|
end
|
@@ -3,50 +3,52 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashRepoDelete < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash repo delete KEY REPO (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
17
|
+
def run
|
18
|
+
$stdout.sync = true
|
19
|
+
|
20
|
+
key = name_args.first
|
16
21
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
ui.fatal "You need a project key!"
|
23
|
-
show_usage
|
24
|
-
exit 1
|
25
|
-
end
|
22
|
+
if key.nil?
|
23
|
+
ui.fatal "You need a project key!"
|
24
|
+
show_usage
|
25
|
+
exit 1
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
+
repo = name_args[1]
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
if repo.nil?
|
31
|
+
ui.fatal "You need a repository name!"
|
32
|
+
show_usage
|
33
|
+
exit 1
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
+
stash = get_stash_connection
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
else
|
40
|
-
response = stash.delete "projects/#{key}/repos/#{repo}"
|
41
|
-
if response.success?
|
42
|
-
ui.info "Deleted Stash Repository: #{key}/#{repo}"
|
38
|
+
if get_config(:noop)
|
39
|
+
ui.info "#{ui.color "Skipping project repository deletion process because --noop specified.", :red}"
|
43
40
|
else
|
44
|
-
|
45
|
-
|
41
|
+
response = stash.delete "projects/#{key}/repos/#{repo}"
|
42
|
+
if response.success?
|
43
|
+
ui.info "Deleted Stash Repository: #{key}/#{repo}"
|
44
|
+
else
|
45
|
+
display_stash_error "Could not delete Stash respository!", response
|
46
|
+
exit 1
|
47
|
+
end
|
46
48
|
end
|
49
|
+
|
47
50
|
end
|
48
|
-
|
49
|
-
end
|
50
51
|
|
52
|
+
end
|
51
53
|
end
|
52
54
|
end
|
@@ -3,47 +3,49 @@
|
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
|
6
|
-
|
6
|
+
require 'chef/knife/stash_base'
|
7
7
|
|
8
|
-
|
8
|
+
class Chef
|
9
|
+
class Knife
|
10
|
+
class StashRepos < Knife
|
9
11
|
|
10
|
-
|
12
|
+
include Knife::StashBase
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
banner "knife stash repos (options)"
|
15
|
+
category "stash"
|
14
16
|
|
15
|
-
|
17
|
+
def run
|
18
|
+
$stdout.sync = true
|
16
19
|
|
17
|
-
|
20
|
+
stash = get_stash_connection
|
21
|
+
url = "projects"
|
22
|
+
project_response = stash.get url
|
18
23
|
|
19
|
-
|
20
|
-
|
21
|
-
|
24
|
+
if project_response.success?
|
25
|
+
get_all_values stash,url,project_response do |project_values|
|
26
|
+
project_values.each do |project|
|
27
|
+
url = "projects/#{project['key']}/repos"
|
28
|
+
repo_response = stash.get url
|
22
29
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
if repo_response.success?
|
30
|
-
get_all_values stash,url,repo_response do |repo_values|
|
31
|
-
repo_values.each do |repo|
|
32
|
-
ui.info "#{project['key']}/#{repo['slug']}"
|
30
|
+
if repo_response.success?
|
31
|
+
get_all_values stash,url,repo_response do |repo_values|
|
32
|
+
repo_values.each do |repo|
|
33
|
+
ui.info "#{project['key']}/#{repo['slug']}"
|
34
|
+
end
|
33
35
|
end
|
36
|
+
else
|
37
|
+
display_stash_error "Could not list Stash project repositories!", repo_response
|
38
|
+
exit 1
|
34
39
|
end
|
35
|
-
else
|
36
|
-
display_stash_error "Could not list Stash project repositories!", repo_response
|
37
|
-
exit 1
|
38
40
|
end
|
39
41
|
end
|
42
|
+
else
|
43
|
+
display_stash_error "Could not list Stash projects!", project_response
|
44
|
+
exit 1
|
40
45
|
end
|
41
|
-
|
42
|
-
display_stash_error "Could not list Stash projects!", project_response
|
43
|
-
exit 1
|
46
|
+
|
44
47
|
end
|
45
|
-
|
46
|
-
end
|
47
48
|
|
49
|
+
end
|
48
50
|
end
|
49
51
|
end
|
data/lib/knife-stash/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-stash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
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-03-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -40,7 +40,7 @@ files:
|
|
40
40
|
- README.md
|
41
41
|
- Rakefile
|
42
42
|
- knife-stash.gemspec
|
43
|
-
- lib/chef/knife/
|
43
|
+
- lib/chef/knife/stash_base.rb
|
44
44
|
- lib/chef/knife/stash_project_create.rb
|
45
45
|
- lib/chef/knife/stash_project_delete.rb
|
46
46
|
- lib/chef/knife/stash_project_repos.rb
|
@@ -1,93 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
-
# License:: Apache License, Version 2.0
|
4
|
-
#
|
5
|
-
|
6
|
-
module StashKnifePlugin
|
7
|
-
|
8
|
-
require 'chef/knife'
|
9
|
-
require 'highline/import'
|
10
|
-
require 'faraday'
|
11
|
-
|
12
|
-
class BaseStashCommand < Chef::Knife
|
13
|
-
|
14
|
-
deps do
|
15
|
-
require 'highline/import'
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.get_common_options
|
19
|
-
unless defined? $default
|
20
|
-
$default = Hash.new
|
21
|
-
end
|
22
|
-
|
23
|
-
option :noop,
|
24
|
-
:long => "--noop",
|
25
|
-
:description => "Perform no modifying operations",
|
26
|
-
:boolean => false
|
27
|
-
|
28
|
-
option :stash_username,
|
29
|
-
:short => "-u USERNAME",
|
30
|
-
:long => "--stash-username USERNAME",
|
31
|
-
:description => "The username for Stash"
|
32
|
-
$default[:stash_username] = ENV['USER']
|
33
|
-
|
34
|
-
option :stash_password,
|
35
|
-
:short => "-p PASSWORD",
|
36
|
-
:long => "--stash-password PASSWORD",
|
37
|
-
:description => "The password for Stash"
|
38
|
-
|
39
|
-
option :stash_hostname,
|
40
|
-
:long => "--stash-hostname HOSTNAME",
|
41
|
-
:description => "The hostname for Stash"
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
def display_stash_error(message,response)
|
46
|
-
ui.fatal message
|
47
|
-
JSON.parse(response.body)['errors'].each do |error|
|
48
|
-
ui.fatal "#{error['context'] ? error['context'] + ": " : "" }#{error['message']}"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def get_all_values(stash,url,response)
|
53
|
-
r = JSON.parse(response.body)
|
54
|
-
yield r['values']
|
55
|
-
until r['isLastPage']
|
56
|
-
response = stash.get url, { :start => r['nextPageStart'] }
|
57
|
-
r = JSON.parse(response.body)
|
58
|
-
yield r['values']
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def get_config(key)
|
63
|
-
key = key.to_sym
|
64
|
-
rval = config[key] || Chef::Config[:knife][key] || $default[key]
|
65
|
-
Chef::Log.debug("value for config item #{key}: #{rval}")
|
66
|
-
rval
|
67
|
-
end
|
68
|
-
|
69
|
-
def get_stash_connection
|
70
|
-
config[:stash_hostname] = ask("Stash Hostname: ") { |q| q.echo = "*" } unless get_config(:stash_hostname)
|
71
|
-
config[:stash_username] = ask("Stash Username for #{get_config(:stash_hostname)}: ") { |q| q.echo = "*" } unless get_config(:stash_username)
|
72
|
-
config[:stash_password] = ask("Stash Password for #{get_config(:stash_username)}: ") { |q| q.echo = "*" } unless get_config(:stash_password)
|
73
|
-
|
74
|
-
connection = Faraday.new(:url => "https://#{get_config(:stash_hostname)}", :ssl => {:verify => false}) do |faraday|
|
75
|
-
faraday.request :url_encoded # form-encode POST params
|
76
|
-
#faraday.response :logger # log requests to STDOUT
|
77
|
-
faraday.adapter :net_http # make requests with Net::HTTP
|
78
|
-
end
|
79
|
-
connection.basic_auth(get_config(:stash_username),get_config(:stash_password))
|
80
|
-
connection.url_prefix = "https://#{get_config(:stash_hostname)}/rest/api/1.0"
|
81
|
-
connection
|
82
|
-
end
|
83
|
-
|
84
|
-
def get_repo_https_url(project_key,repo)
|
85
|
-
"https://#{get_config(:stash_username)}@#{get_config(:stash_hostname)}/scm/#{project_key}/#{repo}.git"
|
86
|
-
end
|
87
|
-
|
88
|
-
def get_repo_ssh_url(project_key,repo)
|
89
|
-
"ssh://git@#{get_config(:stash_hostname)}:7999/#{project_key}/#{repo}.git"
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|