forj 0.0.28 → 0.0.29
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/README.md +0 -3
- data/bin/forj +40 -26
- data/lib/catalog.yaml +1 -0
- data/lib/ssh.rb +15 -2
- data/lib/ssh.sh +183 -0
- metadata +14 -13
data/README.md
CHANGED
data/bin/forj
CHANGED
@@ -32,30 +32,44 @@ include Ssh
|
|
32
32
|
class Forj < Thor
|
33
33
|
desc 'help', 'Display forj cli help'
|
34
34
|
def help
|
35
|
-
puts '
|
36
|
-
puts ' -action:'
|
37
|
-
puts ' boot: boot a Maestro box and instruct it to provision the blueprint'
|
38
|
-
puts ' -blueprint: which blueprint to use'
|
39
|
-
puts ' -on: just because :)'
|
40
|
-
puts ' -cloud_provider: cloud provider type to be used to provision the forge.'
|
41
|
-
puts ' - hpcloud: uses HP public cloud http://hpcloud.com/'
|
42
|
-
puts ' - openstack: OpenStack based private or public cloud'
|
43
|
-
puts ' - more to come'
|
44
|
-
puts ' -as: just because :)'
|
45
|
-
puts ' -name: name for the maestro box'
|
46
|
-
puts ' -test: this will delete everything after it finish to install the forge'
|
47
|
-
puts ' example: forj boot redstone on hpcloud as redstone01'
|
48
|
-
puts ' down: delete the Maestro box and all systems installed by the blueprint'
|
49
|
-
puts ' -name: name for the maestro box'
|
50
|
-
puts ' setup: set the credentials for forj cli'
|
51
|
-
puts ' -credentials:'
|
52
|
-
puts ' hpcloud:'
|
53
|
-
puts ' access_key: access key from hpcloud'
|
54
|
-
puts ' secret_key: secret key from hpcloud'
|
55
|
-
puts ' auth_uri: identity endpoint'
|
56
|
-
puts ' tenant_id: id for the tenant you want to use'
|
57
|
-
puts ' availability_zone: which availability zone will be deployed'
|
35
|
+
puts 'Forj cli help'
|
58
36
|
puts ''
|
37
|
+
puts ' forj setup # Set the credentials for forj.'
|
38
|
+
puts ' required credentials:'
|
39
|
+
puts ' access_key: access key from hpcloud'
|
40
|
+
puts ' secret_key: secret key from hpcloud'
|
41
|
+
puts ' auth_uri: identity endpoint'
|
42
|
+
puts ' tenant_id: id for the tenant you want to use'
|
43
|
+
puts ' availability_zone: which availability zone will be deployed'
|
44
|
+
puts ''
|
45
|
+
puts ' forj boot # Boot a new forge with the following options'
|
46
|
+
puts ' required:'
|
47
|
+
puts ' blueprint: name of the blueprint (currently cli only supports redstone)'
|
48
|
+
puts ' on: just to have a natural description'
|
49
|
+
puts ' cloud_provider: in which cloud provider to deploy the forge'
|
50
|
+
puts ' as: just to have a natural description'
|
51
|
+
puts ' name: name of the forge'
|
52
|
+
puts ' example:'
|
53
|
+
puts ' forj boot redstone on hpcloud as maestro_test'
|
54
|
+
puts ' optional:'
|
55
|
+
puts ' -b build: replace the default build.sh'
|
56
|
+
puts ' -bcd build_config_dir: defines the build configuration directory to load the build configuration file'
|
57
|
+
puts ' -bc build_config: the build config file to load <confdir>/<BoxName>.<Config>.env.'
|
58
|
+
puts ' -gb branch: the build will extract from git branch name'
|
59
|
+
puts ' -tb test_box (not yet implemented): create test-box meta from the repository path provided.'
|
60
|
+
puts ' -gr git_repo: the box built will use a different git repository sent out to <user_data>'
|
61
|
+
puts ' -bh boothook: by default, boothook file used is build/bin/build-tools/boothook.sh. Use this option to set another one.'
|
62
|
+
puts ' -bn box_name: defines the name of the box or box image to build.'
|
63
|
+
puts ''
|
64
|
+
puts ' forj ssh # Connect through ssh to an existing instance'
|
65
|
+
puts ' required:'
|
66
|
+
puts ' name: name of the forge (maestro_test)'
|
67
|
+
puts ' node: name of the node (maestro, ci, etc...)'
|
68
|
+
puts ''
|
69
|
+
puts ' forj down # Delete a forge and create a backup of your data'
|
70
|
+
puts ' not yet implemented'
|
71
|
+
puts ''
|
72
|
+
puts ' forj help # Display this help'
|
59
73
|
end
|
60
74
|
|
61
75
|
desc 'boot', 'boot a Maestro box and instruct it to provision the blueprint'
|
@@ -66,7 +80,7 @@ class Forj < Thor
|
|
66
80
|
method_option :branch, :aliases => '-gb', :desc => 'The build will extract from git branch name. It sets the configuration build <config> to the branch name <branch>.'
|
67
81
|
method_option :test_box, :aliases => '-tb', :desc => 'Create test-box meta from the repository path provided.'
|
68
82
|
method_option :git_repo, :aliases => '-gr', :desc => 'The box built will use a different git repository sent out to <user_data>. This repository needs to be read only. No keys are sent.'
|
69
|
-
method_option :boothook, :aliases => '-
|
83
|
+
method_option :boothook, :aliases => '-bh', :desc => 'By default, boothook file used is build/bin/build-tools/boothook.sh. Use this option to set another one.'
|
70
84
|
method_option :box_name, :aliases => '-bn', :desc => 'Defines the name of the box or box image to build.'
|
71
85
|
|
72
86
|
def boot(blueprint, on, cloud_provider, as, name, test = false)
|
@@ -83,8 +97,8 @@ class Forj < Thor
|
|
83
97
|
end
|
84
98
|
|
85
99
|
desc 'ssh', 'connect to your forge thru ssh'
|
86
|
-
def ssh
|
87
|
-
Ssh.connect
|
100
|
+
def ssh(name, server)
|
101
|
+
Ssh.connect(name, server)
|
88
102
|
end
|
89
103
|
|
90
104
|
desc 'setup', 'set the credentials for forj cli'
|
data/lib/catalog.yaml
CHANGED
@@ -18,6 +18,7 @@ redstone:
|
|
18
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
|
+
nodes: [maestro, ci, util, review]
|
21
22
|
|
22
23
|
modus:
|
23
24
|
ports: []
|
data/lib/ssh.rb
CHANGED
@@ -15,11 +15,24 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
+
require 'rubygems'
|
19
|
+
require 'require_relative'
|
20
|
+
|
18
21
|
#
|
19
22
|
# ssh module
|
20
23
|
#
|
21
24
|
module Ssh
|
22
|
-
def connect
|
23
|
-
|
25
|
+
def connect(name, server)
|
26
|
+
current_dir = Dir.pwd
|
27
|
+
Dir.chdir(current_dir + '/lib')
|
28
|
+
|
29
|
+
update = './ssh.sh -u'
|
30
|
+
connection = './ssh.sh %s %s' % [name, server]
|
31
|
+
|
32
|
+
# update the list of servers
|
33
|
+
Kernel.system(update)
|
34
|
+
|
35
|
+
# connect to the server
|
36
|
+
Kernel.system(connection)
|
24
37
|
end
|
25
38
|
end
|
data/lib/ssh.sh
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#vim: setlocal ft=sh:
|
3
|
+
RST="\e[0m"
|
4
|
+
RED="\e[31m"
|
5
|
+
BLU="\e[34m"
|
6
|
+
GRE="\e[92m"
|
7
|
+
|
8
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
9
|
+
#
|
10
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
|
+
# you may not use this file except in compliance with the License.
|
12
|
+
# You may obtain a copy of the License at
|
13
|
+
#
|
14
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
15
|
+
#
|
16
|
+
# Unless required by applicable law or agreed to in writing, software
|
17
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
18
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
19
|
+
# See the License for the specific language governing permissions and
|
20
|
+
# limitations under the License.
|
21
|
+
|
22
|
+
OW=`date +%Y-%m-%d.%H%M%S`
|
23
|
+
logpath=~/.ssh/
|
24
|
+
DB=~/hosts
|
25
|
+
key_path=~/.ssh/
|
26
|
+
init_config=~/ssh_init
|
27
|
+
key="nova"
|
28
|
+
|
29
|
+
if [ ! -f $DB ]; then
|
30
|
+
cat > $DB <<'EOF'
|
31
|
+
|
32
|
+
#Custom Servers - (Won't be deleted when updating list)
|
33
|
+
#<name.id> <public ip> <date> <key>
|
34
|
+
|
35
|
+
#### Below list are updated
|
36
|
+
|
37
|
+
EOF
|
38
|
+
fi
|
39
|
+
|
40
|
+
##No parameters sent
|
41
|
+
if (( $# < 1 )); then
|
42
|
+
echo -e "${RED}Error, no parameter was sent.$RST"
|
43
|
+
echo "Use this script as:"
|
44
|
+
echo " -rm <id> : Removes all nodes that match the id."
|
45
|
+
echo " -f <text>: Finds the text in the log files."
|
46
|
+
echo " -u : Updates the hosts list querying nova server."
|
47
|
+
echo " -l : Lists the current hosts."
|
48
|
+
echo " <IP> : Connects directly to the IP using default key"
|
49
|
+
echo "<id> <name>: Queries the hosts list looking for the id and name."
|
50
|
+
echo -e "\n ${GRE}OPTIONS${RST}"
|
51
|
+
echo " -i {par} : Applies initialization script to the server."
|
52
|
+
exit 1
|
53
|
+
fi
|
54
|
+
|
55
|
+
if [ $1 == '-i' ]; then
|
56
|
+
if [ ! -f $init_config ]; then
|
57
|
+
echo "${RED}Error, config file: $init_config does not exists."
|
58
|
+
exit 1
|
59
|
+
fi
|
60
|
+
shift
|
61
|
+
is_init='true'
|
62
|
+
fi
|
63
|
+
|
64
|
+
#Finds text in logs
|
65
|
+
if [ $1 == '-f' ]; then
|
66
|
+
grep --include=*.log -rnw $logpath -e "$2" --color=always
|
67
|
+
exit 0
|
68
|
+
fi
|
69
|
+
|
70
|
+
if [ $1 == '-rm' ] && [ "$2" != '' ]; then
|
71
|
+
echo "Removing $2..."
|
72
|
+
cat $DB | grep -iE "[a-z]+\.$2" --color=always
|
73
|
+
sed -i -E "/[a-z]+\.$2/d" $DB
|
74
|
+
exit 0
|
75
|
+
fi
|
76
|
+
|
77
|
+
##Just Lists the hosts db
|
78
|
+
if [ $1 == '-l' ]; then
|
79
|
+
echo "List of hosts:"
|
80
|
+
if [ "$2" != "" ]; then #kit
|
81
|
+
result=$(cat $DB | grep -iE "\.$2" --color=always)
|
82
|
+
else #All Maestros
|
83
|
+
result=$(cat $DB | grep -E "maestro\.")
|
84
|
+
fi
|
85
|
+
echo "$result"
|
86
|
+
exit 0
|
87
|
+
fi
|
88
|
+
|
89
|
+
##Just list the hosts db
|
90
|
+
if [ $1 == '-u' ]; then
|
91
|
+
linenum=$(cat $DB | grep -E -n "#### Below list are updated" | awk -F: '{print $1}')
|
92
|
+
old_serversnum=$(tail -n +$linenum $DB | grep -E " .*\..* " | wc -l)
|
93
|
+
|
94
|
+
sed -i -n '/\#\#\#\# Below list are updated/q;p' $DB
|
95
|
+
sed -i '/^$/d' $DB
|
96
|
+
echo -e "\n#### Below list are updated" >> $DB
|
97
|
+
|
98
|
+
hpcloud servers | awk -F"\|" '{print $3","$6","$9","$7}' | awk -F, '{print $1$3$4$5}' >> $DB
|
99
|
+
echo -e "\033[1;32m$DB Updated\033[00m"
|
100
|
+
linenum=$(cat $DB | grep -E -n "#### Below list are updated" | awk -F: '{print $1}')
|
101
|
+
new_serversnum=$(tail -n +$linenum $DB | grep -E " .*\..* " | wc -l)
|
102
|
+
diff=$(echo "$new_serversnum - $old_serversnum" | bc)
|
103
|
+
echo "Old Servers: $old_serversnum, New Servers: $new_serversnum, Diff: $diff"
|
104
|
+
exit 0
|
105
|
+
fi
|
106
|
+
|
107
|
+
#parameter is IP
|
108
|
+
if [[ $1 =~ ([0-9]{1,3}\.){3}[0-9]{1,3} ]]; then
|
109
|
+
ip=$1
|
110
|
+
#Check if has URL and clean it if so
|
111
|
+
if [[ $ip =~ 'http' ]]; then
|
112
|
+
ip=$(echo "$ip" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}')
|
113
|
+
fi
|
114
|
+
#Check if IP exists in db and show info
|
115
|
+
host_name=$(cat $DB | grep $ip | awk '{print $1}')
|
116
|
+
if [[ "$host_name" != "" ]]; then
|
117
|
+
echo -e "Host: \033[33m$host_name${RST}"
|
118
|
+
fi
|
119
|
+
message="$ip"
|
120
|
+
#parameter is ID NODE
|
121
|
+
else
|
122
|
+
id=$1
|
123
|
+
node=$2
|
124
|
+
|
125
|
+
if [ "$node" == "" ]; then
|
126
|
+
echo -e "${RED}Error, no server name sent.$RST"
|
127
|
+
exit 1
|
128
|
+
fi
|
129
|
+
|
130
|
+
#Alias handling
|
131
|
+
alias=$(cat ~/hosts | grep -iE '^alias:' | grep -iE ' '$node | awk '{print $2}')
|
132
|
+
if [ "$alias" != "" ] && [ "$alias" != "$node" ]; then
|
133
|
+
echo "Using alias $node, converting to $alias"
|
134
|
+
node=$alias
|
135
|
+
fi
|
136
|
+
|
137
|
+
ip=$(cat $DB | grep -iE "[a-ZA-Z]+\.$id" | grep -i $node | awk '{print $2}' | tr -d ' ')
|
138
|
+
if [ "$ip" == "" ]; then
|
139
|
+
echo -e "${RED}Error, the kit ${GRE}$node${RED} with id ${GRE}$id${RED} was not found.${RST}"
|
140
|
+
exit 1
|
141
|
+
fi
|
142
|
+
key=$(cat $DB | grep -iE "$ip" | awk '{print $4}' | tr -d ' ')
|
143
|
+
message="$node.$id"
|
144
|
+
extended="($ip)"
|
145
|
+
|
146
|
+
if [ "$ip" == "" ] || [ "$key" == "" ]; then
|
147
|
+
echo -e "${RED}Error, combination was not found, maybe you should update the db.$RST"
|
148
|
+
exit 1
|
149
|
+
fi
|
150
|
+
fi
|
151
|
+
|
152
|
+
if [ "$node" != "" ]; then
|
153
|
+
logname="$node.$id"
|
154
|
+
else
|
155
|
+
logname="$ip"
|
156
|
+
fi
|
157
|
+
key="$key_path$key.pem"
|
158
|
+
|
159
|
+
echo -e "Connecting to $GRE$message$RST using $BLU$key$RST $extended"
|
160
|
+
|
161
|
+
if [[ ! -f $key ]]; then
|
162
|
+
echo -e "${RED}Key doesn't exists$RST"
|
163
|
+
exit 1
|
164
|
+
fi
|
165
|
+
|
166
|
+
logfile="${logpath}sshlog.$logname.$NOW.log"
|
167
|
+
|
168
|
+
echo -e "$RED══════════════════════════════════════════════════════════════════════════$RST"
|
169
|
+
#echo "ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=180 -i $key ubuntu@$ip"
|
170
|
+
if [ "$is_init" == 'true' ]; then
|
171
|
+
username=$(id -u -n)
|
172
|
+
username=${username^^} #convert to upper
|
173
|
+
grep -q "$username" $init_config
|
174
|
+
if [ $? != 0 ]; then
|
175
|
+
echo "Writing username to $init_config file."
|
176
|
+
sed -i "s/^owner='.*'$/owner='$username'/g" $DB
|
177
|
+
fi
|
178
|
+
ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=180 -i $key ubuntu@$ip < $init_config
|
179
|
+
echo -e "Reconnecting..."
|
180
|
+
fi
|
181
|
+
ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=180 -i $key ubuntu@$ip | tee -a $logfile
|
182
|
+
echo -e "$RED══════════════════════════════════════════════════════════════════════════$RST"
|
183
|
+
echo -e "${GRE}Log file: ${RST}$logfile"
|
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.
|
4
|
+
version: 0.0.29
|
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: &
|
16
|
+
requirement: &12934080 !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: *
|
24
|
+
version_requirements: *12934080
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nokogiri
|
27
|
-
requirement: &
|
27
|
+
requirement: &12933440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.5.11
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *12933440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: fog
|
38
|
-
requirement: &
|
38
|
+
requirement: &12932840 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.19.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *12932840
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: hpcloud
|
49
|
-
requirement: &
|
49
|
+
requirement: &12932140 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.0.8
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *12932140
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: git
|
60
|
-
requirement: &
|
60
|
+
requirement: &12931320 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.2.7
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *12931320
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rbx-require-relative
|
71
|
-
requirement: &
|
71
|
+
requirement: &12930460 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: 0.0.7
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *12930460
|
80
80
|
description: forj command line
|
81
81
|
email:
|
82
82
|
- forj@forj.io
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/setup.rb
|
97
97
|
- lib/repositories.rb
|
98
98
|
- lib/ssh.rb
|
99
|
+
- lib/ssh.sh
|
99
100
|
- lib/log.rb
|
100
101
|
- lib/helpers.rb
|
101
102
|
- spec/boot_spec.rb
|