forj 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
data/bin/forj CHANGED
@@ -63,6 +63,7 @@ class Forj < Thor
63
63
  desc 'boot', 'boot a Maestro box and instruct it to provision the blueprint'
64
64
  method_option :build_conf_dir, :aliases => '-c', :desc => 'build config dir to use'
65
65
  method_option :branch, :aliases => '-b', :desc => 'branch to use'
66
+ method_option :test_box, :aliases => '-t', :desc => 'test box'
66
67
  def boot(blueprint, on, cloud_provider, as, name, test=false)
67
68
  build_conf_dir = options[:build_conf_dir]
68
69
  branch = options[:branch]
@@ -82,6 +83,11 @@ class Forj < Thor
82
83
  Down.down(name)
83
84
  end
84
85
 
86
+ desc 'ssh', ''
87
+ def ssh
88
+ puts 'ssh'
89
+ end
90
+
85
91
  desc 'setup', 'set the credentials for forj cli'
86
92
  def setup
87
93
  Setup.setup
data/lib/boot.rb CHANGED
@@ -30,55 +30,66 @@ include Repositories
30
30
 
31
31
  module Boot
32
32
  def boot(blueprint, cloud_provider, name, build_config_dir, branch, test=false)
33
- puts 'booting %s on %s' % [blueprint, cloud_provider]
34
- # boot maestro
35
-
36
- # get definitions from yaml
37
- forj_dir = File.expand_path(File.dirname(__FILE__))
38
- Dir.chdir(forj_dir)
39
- definitions = YamlParse.get_values('../lib/catalog.yaml')
40
-
41
- # clone the maestro repo
42
- Repositories.clone_repo
43
-
44
- # upload the keypair
45
- SecurityGroup.upload_keypair(definitions[blueprint]['keypair'])
46
-
47
- # create the network where maestro will land
48
- network = Network.create_network(name)
49
- subnet = Network.create_subnet(network.id, name)
50
- router = Network.get_router(definitions[blueprint]['router'])
51
- Network.create_router_interface(subnet.id, router)
52
-
53
- # create the security groups for the blueprint
54
- security_group = SecurityGroup.create_security_group(blueprint)
55
-
56
- for port in definitions[blueprint]['ports'] do
57
- Network.create_security_group_rule(security_group.id, 'tcp', port, port)
33
+ begin
34
+
35
+ puts 'booting %s on %s' % [blueprint, cloud_provider]
36
+
37
+ # get definitions from yaml
38
+ forj_dir = File.expand_path(File.dirname(__FILE__))
39
+ Dir.chdir(forj_dir)
40
+ definitions = YamlParse.get_values('../lib/catalog.yaml')
41
+
42
+ # clone the maestro repo
43
+ Repositories.clone_repo
44
+
45
+ # create the network where maestro will land
46
+ network = Network.create_network(name)
47
+ subnet = Network.create_subnet(network.id, name)
48
+ router = Network.get_router(definitions[blueprint]['router'])
49
+ Network.create_router_interface(subnet.id, router)
50
+
51
+ # create the security groups for the blueprint
52
+ security_group = SecurityGroup.create_security_group(blueprint)
53
+
54
+ ports = definitions['redstone']['ports']
55
+
56
+ ports.each do|port|
57
+ Network.create_security_group_rule(security_group.id, 'tcp', port, port)
58
+ end
59
+
60
+ ENV['FORJ_HPC_NETID'] = network.id
61
+ ENV['FORJ_SECURITY_GROUP'] = security_group.name
62
+ ENV['FORJ_KEYPAIR'] = definitions[blueprint]['keypair']
63
+ ENV['FORJ_HPC_NOVA_KEYPUB'] = definitions[blueprint]['keypair']
64
+
65
+ # run build.sh to boot maestro
66
+ current_dir = Dir.pwd
67
+ home = File.expand_path('~')
68
+ build_path = home + '/.hpcloud/maestro/build'
69
+ Dir.chdir(build_path)
70
+
71
+ if build_config_dir != nil
72
+ command = 'bin/build.sh --build_ID maestro.%s --box-name maestro --build-conf-dir %s --build-config box-13.5 --gitBranch %s' % [name, build_config_dir, branch]
73
+ else
74
+ command = 'bin/build.sh --build_ID %s --box-name maestro --build-conf-dir ~/.hpcloud/maestro/build/conf --build-config box' % [name]
75
+ end
76
+
77
+ Kernel.system(command)
78
+ Dir.chdir(current_dir)
79
+
80
+ if test
81
+ puts 'test flag is on, deleting objects'
82
+ Network.delete_router_interface(subnet.id, router)
83
+ Network.delete_subnet(subnet.id)
84
+ Network.delete_network(network.name)
85
+ end
86
+
87
+ rescue SystemExit, Interrupt
88
+ puts 'process interrupted by user'
89
+ rescue Exception => e
90
+ puts e
58
91
  end
59
92
 
60
- # run build.sh to boot maestro
61
- current_dir = Dir.pwd
62
- home = File.expand_path('~')
63
- build_path = home + '/.hpcloud/maestro/build'
64
- Dir.chdir(build_path)
65
-
66
- if build_config_dir != nil
67
- command = './bin/build.sh --build_ID maestro.10 --box-name maestro --build-conf-dir %s --build-config box --setBranch %s' % [build_config_dir, branch]
68
- else
69
- command = './bin/build.sh --build_ID maestro.10 --box-name maestro --build-config box'
70
- end
71
-
72
-
73
- Kernel.system(command)
74
- Dir.chdir(current_dir)
75
-
76
- if test
77
- puts 'test flag is on, deleting objects'
78
- Network.delete_router_interface(subnet.id, router)
79
- Network.delete_subnet(subnet.id)
80
- Network.delete_network(network.name)
81
- #Network.delete_security_group(security_group.id)
82
- end
83
93
  end
94
+
84
95
  end
data/lib/catalog.yaml CHANGED
@@ -15,7 +15,7 @@
15
15
  redstone:
16
16
  image: proto2b
17
17
  flavor: standard.xsmall
18
- ports: [22, 80, 8080, 8000]
18
+ ports: [22, 80, 443, 3131, 3000, 3132, 3133, 3134, 3135, 4505, 4506, 5000, 5666, 8000, 8080, 8081, 8083, 8125, 8139, 8140, 8773, 8774, 8776, 9292, 29418, 35357]
19
19
  keypair: nova
20
20
  router: private-ext
21
21
 
data/lib/connection.rb CHANGED
@@ -24,7 +24,7 @@ module Connection
24
24
 
25
25
  def compute
26
26
  credentials = get_credentials
27
- compute = Fog::Compute.new ({
27
+ Fog::Compute.new({
28
28
  :provider => 'HP',
29
29
  :hp_access_key => credentials['access_key'],
30
30
  :hp_secret_key => credentials['secret_key'],
@@ -37,7 +37,7 @@ module Connection
37
37
 
38
38
  def network
39
39
  credentials = get_credentials
40
- network = Fog::HP::Network.new ({
40
+ Fog::HP::Network.new({
41
41
  :hp_access_key => credentials['access_key'],
42
42
  :hp_secret_key => credentials['secret_key'],
43
43
  :hp_auth_uri => credentials['auth_uri'],
@@ -50,18 +50,18 @@ end
50
50
 
51
51
  def get_credentials
52
52
  home = File.expand_path('~')
53
- file = home + '/.hpcloud/.hpcloud'
54
- template = YAML.load_file(file)
53
+ creds = '%s/.hpcloud/accounts/hp' % [home]
54
+ template = YAML.load_file(creds)
55
55
  credentials = Hash.new
56
56
 
57
57
  begin
58
- credentials['access_key'] = template['default']['access_key']
59
- credentials['secret_key'] = template['default']['secret_key']
60
- credentials['auth_uri'] = template['default']['auth_uri']
61
- credentials['tenant_id'] = template['default']['tenant_id']
62
- credentials['availability_zone'] = template['default']['availability_zone']
58
+ credentials['access_key'] = template[:credentials][:account_id]
59
+ credentials['secret_key'] = template[:credentials][:secret_key]
60
+ credentials['auth_uri'] = template[:credentials][:auth_uri]
61
+ credentials['tenant_id'] = template[:credentials][:tenant_id]
62
+ credentials['availability_zone'] = template[:regions][:monitoring]
63
63
  rescue
64
- puts 'your credentials are not configured, delete the file %s and run forj setup again' % [file]
64
+ puts 'your credentials are not configured, delete the file %s and run forj setup again' % [creds]
65
65
  end
66
66
 
67
67
  credentials
data/lib/network.rb CHANGED
@@ -22,7 +22,7 @@ include Connection
22
22
  module Network
23
23
 
24
24
  def create_network(name)
25
- network = Connection.network.networks.create(:name => name)
25
+ Connection.network.networks.create(:name => name)
26
26
  end
27
27
 
28
28
  def delete_network(network_name)
@@ -31,7 +31,7 @@ module Network
31
31
  end
32
32
 
33
33
  def create_subnet(network_id, name)
34
- subnet = Connection.network.subnets.create(
34
+ Connection.network.subnets.create(
35
35
  :network_id => network_id,
36
36
  :name => name,
37
37
  :cidr => get_next_subnet,
@@ -44,20 +44,22 @@ module Network
44
44
  end
45
45
 
46
46
  def get_subnet(name)
47
- subnet = Connection.network.subnets.all(:name => name)[0]
47
+ Connection.network.subnets.all(:name => name)[0]
48
48
  end
49
49
 
50
50
  def get_router(name)
51
51
  routers = Connection.network.routers.all({:name => name})
52
52
  router = nil
53
- for r in routers do
53
+
54
+ routers.each do|r|
54
55
  router = r
55
56
  end
57
+
56
58
  router
57
59
  end
58
60
 
59
61
  def create_router_interface(subnet_id, router)
60
- interface = router.add_interface(subnet_id, nil)
62
+ router.add_interface(subnet_id, nil)
61
63
  end
62
64
 
63
65
  def delete_router_interface(subnet_id, router)
@@ -65,7 +67,7 @@ module Network
65
67
  end
66
68
 
67
69
  def create_router(name)
68
- router = Connection.network.routers.create(
70
+ Connection.network.routers.create(
69
71
  :name => name,
70
72
  :admin_state_up => true
71
73
  )
data/lib/security.rb CHANGED
@@ -24,19 +24,11 @@ include Connection
24
24
  module SecurityGroup
25
25
 
26
26
  def create_security_group(name)
27
- security_groups = Connection.network.security_groups.all({:name => name})
28
- security_group = nil
29
-
30
- if security_groups.length >= 1
31
- security_group = security_groups[0]
32
- else
33
- description = 'Security group for blueprint %s' % [name]
34
- security_group = Connection.network.security_groups.create(
35
- :name => name,
36
- :description => description
37
- )
38
- end
39
- security_group
27
+ description = 'Security group for blueprint %s' % [name]
28
+ Connection.network.security_groups.create(
29
+ :name => name,
30
+ :description => description
31
+ )
40
32
  end
41
33
 
42
34
  def delete_security_group(security_group_id)
@@ -45,7 +37,7 @@ module SecurityGroup
45
37
 
46
38
  def create_security_group_rule(security_group_id, protocol, port_min, port_max)
47
39
  begin
48
- rule = Connection.network.security_group_rules.create(
40
+ Connection.network.security_group_rules.create(
49
41
  :security_group_id => security_group_id,
50
42
  :direction => 'ingress',
51
43
  :protocol => protocol,
@@ -53,7 +45,7 @@ module SecurityGroup
53
45
  :port_range_max => port_max,
54
46
  :remote_ip_prefix => '0.0.0.0/0'
55
47
  )
56
- rescue StandardError => e
48
+ rescue StandardError
57
49
  puts 'error creating the rule for port %s' % [port_min]
58
50
  end
59
51
 
@@ -70,7 +62,7 @@ module SecurityGroup
70
62
  # this will create a new keypair
71
63
  key_pair = Connection.compute.key_pairs.create(:name => name)
72
64
  key_pair.write(path)
73
- rescue StandardError => e
65
+ rescue StandardError
74
66
  puts 'error uploading the keypair'
75
67
  end
76
68
  end
data/lib/setup.rb CHANGED
@@ -16,91 +16,7 @@
16
16
 
17
17
  module Setup
18
18
  def setup
19
- create_dir
20
- create_credentials_file
21
-
22
- file = get_credentials_file
23
- template = YAML.load_file(file)
24
-
25
- # access key
26
- begin
27
- access_key = template['default']['access_key']
28
- rescue
29
- puts 'which access key to use'
30
- access_key = $stdin.gets.chomp
31
- save_to_credentials_file('access_key', access_key)
32
- end
33
-
34
- # secret key
35
- begin
36
- secret_key = template['default']['secret_key']
37
- rescue
38
- puts 'which secret_key key to use'
39
- secret_key = $stdin.gets.chomp
40
- save_to_credentials_file('secret_key', secret_key)
41
- end
42
-
43
- # auth uri
44
- begin
45
- auth_uri = template['default']['auth_uri']
46
- rescue
47
- puts 'which auth url to use'
48
- auth_uri = $stdin.gets.chomp
49
- save_to_credentials_file('auth_uri', auth_uri)
50
- end
51
-
52
- # tenant id
53
- begin
54
- tenant_id = template['default']['tenant_id']
55
- rescue
56
- puts 'which tenant id to use'
57
- tenant_id = $stdin.gets.chomp
58
- save_to_credentials_file('tenant_id', tenant_id)
59
- end
60
-
61
- # availability zone
62
- begin
63
- availability_zone = template['default']['availability_zone']
64
- rescue
65
- puts 'which availability zone to use'
66
- availability_zone = $stdin.gets.chomp
67
- save_to_credentials_file('availability_zone', availability_zone)
68
- end
69
-
70
- end
71
- end
72
-
73
- def create_credentials_file
74
- home = File.expand_path('~')
75
- file = home + '/.hpcloud/.hpcloud'
76
-
77
- unless File.file?(file)
78
- File.open(file, 'w') do |f|
79
- f.write('default:' + "\n")
80
- end
81
- end
82
- end
83
-
84
-
85
- def create_dir
86
- home = File.expand_path('~')
87
- path = home + '/.hpcloud'
88
- unless File.directory?(path) do
89
- Dir.mkdir(path)
90
- end
19
+ Kernel.system('hpcloud account:setup')
20
+ Kernel.system('hpcloud keypairs:add nova')
91
21
  end
92
22
  end
93
-
94
- def get_credentials_file
95
- home = File.expand_path('~')
96
- file = home + '/.hpcloud/.hpcloud'
97
- end
98
-
99
- def save_to_credentials_file(key, value)
100
- home = File.expand_path('~')
101
- file = home + '/.hpcloud/.hpcloud'
102
-
103
- File.open(file, 'a') do |f|
104
- f.write(' ' + key + ': ' + value + "\n")
105
- end
106
- end
data/lib/ssh.rb ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
data/lib/yaml_parse.rb CHANGED
@@ -18,6 +18,6 @@ require 'yaml'
18
18
 
19
19
  module YamlParse
20
20
  def get_values(path_to_yaml)
21
- template = YAML.load_file(path_to_yaml)
21
+ YAML.load_file(path_to_yaml)
22
22
  end
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2014-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &8047180 !ruby/object:Gem::Requirement
16
+ requirement: &18152220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.16.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *8047180
24
+ version_requirements: *18152220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fog
27
- requirement: &8046480 !ruby/object:Gem::Requirement
27
+ requirement: &18149360 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.22.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *8046480
35
+ version_requirements: *18149360
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hpcloud
38
- requirement: &8045600 !ruby/object:Gem::Requirement
38
+ requirement: &18147220 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.0.6
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *8045600
46
+ version_requirements: *18147220
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: git
49
- requirement: &8045080 !ruby/object:Gem::Requirement
49
+ requirement: &18145480 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.2.7
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *8045080
57
+ version_requirements: *18145480
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rbx-require-relative
60
- requirement: &8044540 !ruby/object:Gem::Requirement
60
+ requirement: &18144380 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 0.0.9
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *8044540
68
+ version_requirements: *18144380
69
69
  description: forj command line
70
70
  email:
71
71
  - forj@forj.io
@@ -85,6 +85,7 @@ files:
85
85
  - lib/boot.rb
86
86
  - lib/setup.rb
87
87
  - lib/repositories.rb
88
+ - lib/ssh.rb
88
89
  homepage: https://forj.io
89
90
  licenses:
90
91
  - Apache License, Version 2.0.