rs-api-tools 0.0.5 → 0.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a6a5dfe281f32afa20501f99d0047fcce12cf6d
4
- data.tar.gz: aa48cd124c4b8962347d8879280ce51d69f1fc62
3
+ metadata.gz: da3f05678b70779ba27dddd503255e99ca6d05fc
4
+ data.tar.gz: f09666c9e205da278d2578f595a556274e92aac0
5
5
  SHA512:
6
- metadata.gz: 523702bffa6d20055dc2b5cdaec5cf93adce261738afb95b47fa3b9e70e471cff35daa65aa183febf810bebe9cc21e83f523d5e7752fd6ae17305f0b6c75d30f
7
- data.tar.gz: e3506e740e229c9cb8e5bef780285ac89b359ce59a2ece0403846a96af4d687b209bbf5b7b6dad3cbf6d788124d41550f3a8fa31ccc4dde7aeadee34856a1b43
6
+ metadata.gz: 671283c2e86e1dde795b24c7b5b7f4841f6415e8ca7594e465ab4eb71aab6db90f6d4ee7fefc7471ac683c572a95cd2a44de7d81403446528e24935938d9e6ba
7
+ data.tar.gz: 35a8d8d2d165fb4642bea42be44010dfd5dd79e480385778790300d82afc4fce33585ebdab4c08993485aa826d5c6fd64752d229b6031d855dc1782dc7d55780
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-create-repositories [--cheffile <Cheffile>] [[--no-import]] [[--help]]
4
+
5
+ require 'rubygems'
6
+ require 'getoptlong'
7
+
8
+ def usage
9
+ puts "usage: rs-create-repositories [--cheffile <Cheffile>] [[--no-import]] [[--help]]"
10
+ puts ''
11
+ puts "See rs-create-repositories --help for more information on usage."
12
+ end
13
+
14
+ def usage_exit
15
+ usage; exit
16
+ end
17
+
18
+ def help_info
19
+ puts("#{$0}")
20
+ puts ''
21
+ puts "Creates RightScale Repositories from a Cheffile (and imports the cookbooks from each repository)."
22
+ puts ''
23
+ puts "examples: rs-create-repositories --cheffile https://raw.github.com/chef-blueprints/linux_box/master/Cheffile"
24
+ puts " rs-create-repositories --cheffile /home/billgates/Cheffile --no-import"
25
+ puts ''
26
+ end
27
+
28
+ cheffile = false
29
+ dry = false
30
+ interactive = true
31
+ import = true
32
+ verbose = false
33
+ help = false
34
+ create_repo = true
35
+ delete_repo = false
36
+
37
+ opts = GetoptLong.new(
38
+ [ '--cheffile', '-c', GetoptLong::REQUIRED_ARGUMENT ],
39
+ [ '--dry', '-d', GetoptLong::OPTIONAL_ARGUMENT ],
40
+ [ '--no-import', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
41
+ [ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ],
42
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ]
43
+ )
44
+
45
+ opts.each do |opt, arg|
46
+ case opt
47
+ when '--cheffile'
48
+ cheffile = arg
49
+ when '--dry'
50
+ dry = true
51
+ when '--noninteractive'
52
+ interactive = false
53
+ puts 'Warning: non-interactive mode.'
54
+ when '--no-import'
55
+ import = false
56
+ when '--help'
57
+ help = true
58
+ when '--verbose'
59
+ verbose = true
60
+ end
61
+ end
62
+
63
+ if help
64
+ help_info
65
+ exit
66
+ end
67
+
68
+ usage_exit if !(cheffile)
69
+
70
+ def yesno
71
+ begin
72
+ system("stty raw -echo")
73
+ str = STDIN.getc
74
+ ensure
75
+ system("stty -raw echo")
76
+ end
77
+ if str.downcase == "y"
78
+ return true
79
+ elsif str.downcase == "n"
80
+ return false
81
+ else
82
+ raise "Invalid response. Please enter y/n."
83
+ end
84
+ end
85
+
86
+ require 'yaml'
87
+ require 'right_api_client'
88
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'librarian_chef_dsl_parser'))
89
+
90
+ library = LibrarianChefDSLParser.new(cheffile)
91
+ rightscale = RightApi::Client.new(YAML.load_file(File.join(ENV['HOME'], '.rightscale', 'right_api_client.yml')))
92
+
93
+ # api 1.5 does not yet support server side filter of repositories
94
+ repositories = rightscale.repositories.index
95
+
96
+ library.cookbooks.each { |cookbook|
97
+ # create profile of the repository to add
98
+ # http://reference.rightscale.com/api1.5/resources/ResourceRepositories.html#create
99
+ repository = Hash.new
100
+ repository['name'] = "#{cookbook['name']} #{cookbook['options'][:ref]}"
101
+ repository['description'] = "" # TODO: if gihtub, fetch the repos description via GitHub API
102
+ repository['source_type'] = 'git' # only git supported so far
103
+ repository['auto_import'] = import
104
+ repository['source'] = cookbook['options'][:git]
105
+ repository['commit_reference'] = cookbook['options'][:ref]
106
+ repository['credentials'] = Hash.new
107
+ repository['credentials']['ssh_key'] = 'text:'
108
+ puts repository if verbose
109
+
110
+ puts 'Checking if an existing repository exists...' if verbose
111
+ existing_repos = repositories.select{ |r|
112
+ r.name == repository['name'] && r.source == repository['source'] && r.commit_reference == repository['commit_reference']
113
+ }
114
+
115
+ if existing_repos.count > 0
116
+ puts "Found #{existing_repos.count} repositories." if verbose
117
+ existing_repos.each { |repo|
118
+ puts repo.raw if verbose
119
+ puts "==> Delete repository [#{repo.id}] ? (y/n)"
120
+ delete_repo = yesno
121
+ if delete_repo
122
+ puts "Deleting repository, #{repo.id}." if verbose
123
+ repo.destroy
124
+ end
125
+ }
126
+ else
127
+ puts 'None found.' if verbose
128
+ end
129
+
130
+ if !dry
131
+ if interactive
132
+ puts "==> Create repository, #{repository['name']} ? (y/n)"
133
+ create_repo = yesno
134
+ end
135
+ if create_repo
136
+ puts "Creating RightScale repository, '#{repository['name']}'."
137
+ rightscale.repositories.create({ :repository => repository })
138
+ end
139
+ else
140
+ puts 'Dry run only, skipping.'
141
+ end
142
+ puts
143
+ }
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/ruby
2
+
3
+ def usage
4
+ puts "usage: rs-create-servertemplate [--name <server_template_name>] --name <server_template_description>] [[--help]]"
5
+ puts ''
6
+ puts "See rs-create-servertemplate --help for more information on usage."
7
+ end
8
+
9
+ def usage_exit
10
+ usage; exit
11
+ end
12
+
13
+ def help_info
14
+ puts("#{$0}")
15
+ puts ''
16
+ puts "Creates a RightScale ServerTemplate."
17
+ puts ''
18
+ puts "examples: rs-create-servertemplate --name 'Skynet Terminator Terminator' --description 'Ends all Skynet terminators.'"
19
+ puts ''
20
+ end
21
+
22
+ require 'rubygems'
23
+ require 'getoptlong'
24
+
25
+ server_template = Hash.new
26
+ server_template['name'] = false
27
+ server_template['description'] = ''
28
+
29
+ verbose = false
30
+ help = false
31
+
32
+ opts = GetoptLong.new(
33
+ [ '--name', '-N', GetoptLong::REQUIRED_ARGUMENT ],
34
+ [ '--description', '-D', GetoptLong::OPTIONAL_ARGUMENT ],
35
+ [ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ],
36
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ]
37
+ )
38
+
39
+ opts.each do |opt, arg|
40
+ case opt
41
+ when '--name'
42
+ server_template['name'] = arg
43
+ when '--description'
44
+ server_template['description'] = arg
45
+ when '--help'
46
+ help = true
47
+ when '--verbose'
48
+ verbose = true
49
+ end
50
+ end
51
+
52
+ if help
53
+ help_info
54
+ exit
55
+ end
56
+
57
+ usage_exit if !(server_template['name'])
58
+
59
+ require 'yaml'
60
+ require 'right_api_client'
61
+ rightscale = RightApi::Client.new(YAML.load_file(File.join(ENV['HOME'], '.rightscale', 'right_api_client.yml')))
62
+
63
+ puts "Creating ServerTemplate, '#{server_template['name']}'."
64
+ rightscale.server_templates.create({ :server_template => server_template })
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rs-api-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Fordham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-21 00:00:00.000000000 Z
11
+ date: 2013-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -69,7 +69,6 @@ dependencies:
69
69
  description: RightScale API Command Line Tools.
70
70
  email: chris@fordham-nagy.id.au
71
71
  executables:
72
- - rs-describe-server-templates
73
72
  - rs-describe-rightscripts
74
73
  - rs-clone-server
75
74
  - rs-describe-instance
@@ -99,6 +98,7 @@ executables:
99
98
  - rs-describe-ec2-ebs-volumes
100
99
  - rs-terminate-server
101
100
  - rs-run-recipe
101
+ - rs-describe-servertemplates
102
102
  - rs-search-tags
103
103
  - rs-describe-keys
104
104
  - rs-describe-ec2-security-groups
@@ -121,6 +121,7 @@ executables:
121
121
  - rs-stop-server
122
122
  - rs-reboot-deployment
123
123
  - rs-describe-multi-cloud-images
124
+ - rs-create-repositories
124
125
  - rs-launch-server
125
126
  - rs-get-server-monitoring
126
127
  - rs-run-rightscript
@@ -129,12 +130,12 @@ executables:
129
130
  - rs-get-server-sketchy-data
130
131
  - rs-import-publication
131
132
  - rs-describe-deployment
133
+ - rs-create-servertemplate
132
134
  - rs-describe-alerts
133
135
  - rs-stop-deployment
134
136
  extensions: []
135
137
  extra_rdoc_files: []
136
138
  files:
137
- - bin/rs-describe-server-templates
138
139
  - bin/rs-describe-rightscripts
139
140
  - bin/rs-clone-server
140
141
  - bin/rs-describe-instance
@@ -164,6 +165,7 @@ files:
164
165
  - bin/rs-describe-ec2-ebs-volumes
165
166
  - bin/rs-terminate-server
166
167
  - bin/rs-run-recipe
168
+ - bin/rs-describe-servertemplates
167
169
  - bin/rs-search-tags
168
170
  - bin/rs-describe-keys
169
171
  - bin/rs-describe-ec2-security-groups
@@ -186,6 +188,7 @@ files:
186
188
  - bin/rs-stop-server
187
189
  - bin/rs-reboot-deployment
188
190
  - bin/rs-describe-multi-cloud-images
191
+ - bin/rs-create-repositories
189
192
  - bin/rs-launch-server
190
193
  - bin/rs-get-server-monitoring
191
194
  - bin/rs-run-rightscript
@@ -194,6 +197,7 @@ files:
194
197
  - bin/rs-get-server-sketchy-data
195
198
  - bin/rs-import-publication
196
199
  - bin/rs-describe-deployment
200
+ - bin/rs-create-servertemplate
197
201
  - bin/rs-describe-alerts
198
202
  - bin/rs-stop-deployment
199
203
  homepage: https://github.com/flaccid/rs-api-tools