1
1
var async = require ( 'async' ) ;
2
-
3
2
var exec = require ( 'child_process' ) . exec ;
4
3
5
4
var Shell = require ( '../shell' ) ;
6
5
7
6
var shell = new Shell ( ) ;
8
7
9
- module . exports = function ( options ) {
8
+ module . exports = {
9
+ provision : provision
10
+ } ;
11
+
12
+ function section ( name ) {
13
+ console . log ( '\n===== ' + name + ' =====' ) ;
14
+ }
10
15
16
+ function provision ( options , callback ) {
17
+ // Weird quirk of Joyent servers
11
18
console . log ( "Be sure to ssh to root@" + options . host + " at least once to enable remote access." ) ;
12
19
20
+ // Go with Joyent's grain
13
21
options . constants . name = 'node' ;
14
- //console.log("OPTIONS:", options);
15
- return {
22
+
23
+ console . log ( "OPTIONS:" , options ) ;
24
+
25
+ var actions = {
26
+
27
+ // Stack: nodejs
16
28
17
29
keys : function ( callback ) {
30
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
18
31
console . log ( "Use the Joyent Web Admin tool to add user keys!" ) ;
19
32
return callback ( ) ;
20
33
} ,
21
34
22
35
user : function ( callback ) {
36
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
23
37
console . log ( "The Joyent default node.js user is 'node'" ) ;
24
38
return callback ( ) ;
25
39
} ,
26
40
27
- install : function ( callback ) {
28
- var map = {
29
- 'system' : {
30
- user : 'root' ,
31
- script : '/system.sh'
32
- } ,
33
- 'nodejs' : {
34
- user : 'root' ,
35
- script : '/nodejs.sh'
36
- }
37
- } ;
38
- var to_install = [ 'system' ] . concat ( options . stack . install ) ;
39
- console . log ( "Installing stack software:" , to_install ) ;
40
- console . log ( "(This could take several minutes)" ) ;
41
- function installItem ( item , callback ) {
42
- console . log ( "Installing " + item + "..." ) ;
43
- var installer = map [ item ] ;
44
- if ( installer ) {
45
- return shell . remote ( installer . user , options . host , __dirname , installer . script , options , callback ) ;
46
- }
47
- return callback ( ) ;
48
- }
49
- return async . forEachSeries ( to_install , installItem , callback ) ;
41
+ nodejs : function ( callback ) {
42
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
43
+ console . log ( "Installing node.js v" + options . config . deployment . nodejs . version ) ;
44
+ return shell . remote ( 'root' , options . host , __dirname , '/nodejs.sh' , options , callback ) ;
50
45
} ,
51
46
52
47
environment : function ( callback ) {
53
- shell . local ( __dirname , '/environment.sh' , options , callback ) ;
48
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
49
+ return shell . local ( __dirname , '/environment.sh' , options , callback ) ;
54
50
} ,
55
51
56
52
service : function ( callback ) {
53
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
57
54
console . log ( "The Joyent node.js stack already configures a node.js service!" ) ;
58
55
return callback ( ) ;
59
56
} ,
60
57
61
58
remote : function ( callback ) {
62
- shell . local ( __dirname , '/remote.sh' , options , callback ) ;
59
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
60
+ if ( ! options . remote ) {
61
+ console . warn ( "no remote specified" ) ;
62
+ return callback ( ) ;
63
+ }
64
+ return shell . local ( __dirname , '/remote.sh' , options , callback ) ;
63
65
} ,
64
66
65
67
cycle : function ( callback ) {
66
- shell . remote ( 'node' , options . host , __dirname , '/cycle.sh' , options , callback ) ;
67
- }
68
+ if ( ! options . config . deployment . nodejs ) return callback ( "not a node stack" ) ;
69
+ return shell . remote ( 'root' , options . host , __dirname , '/cycle.sh' , options , callback ) ;
70
+ } ,
71
+
72
+ // Stack: mongodb
73
+
74
+ mongodb : function ( callback ) {
75
+ if ( ! options . config . deployment . mongodb ) return callback ( "not a mongo stack" ) ;
76
+ return shell . remote ( 'root' , options . host , __dirname , '/mongodb.sh' , options , callback ) ;
77
+ } ,
78
+
79
+ // Stack: riak
68
80
81
+ riak : function ( callback ) {
82
+ var riak = options . config . deployment . riak ;
83
+ if ( ! riak ) return callback ( "not a riak stack" ) ;
84
+ return shell . remote ( 'root' , options . host , __dirname , '/riak.sh' , options , callback ) ;
85
+ }
69
86
} ;
70
- } ;
87
+
88
+ // Execute all these actions
89
+ console . log ( "actions:" , actions ) ;
90
+ async . forEachSeries ( Object . keys ( actions ) , action , callback ) ;
91
+
92
+ function action ( item , callback ) {
93
+ section ( item ) ;
94
+ actions [ item ] ( function ( err , result ) {
95
+ if ( err ) console . log ( err ) ;
96
+ return callback ( ) ;
97
+ } ) ;
98
+ }
99
+ }
0 commit comments