factor 0.5.16 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/commands/workflows.rb +85 -23
- data/lib/factor.rb +7 -0
- data/lib/factor/version.rb +1 -1
- data/spec/base_spec.rb +0 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b3d20f8470d86ea79e6ad2646d2b7dac6695a9b
|
4
|
+
data.tar.gz: d8ef8ec97799a1f481581706c78e1631a0a4600c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e540f40fd32b06cee12fcee1ae7e2a9a80d01cf878837b052eddb10e3af906b24460b697fb842a95e8244287ebe2a8bc6684ad0a0accbe992bbc504540de6956
|
7
|
+
data.tar.gz: 8234653325650c2a16ad5a2f92c7d99f8cc6230eb8e12efe2496e070bbbbb0af7246670805751ffd75d9597d1b04b4b7af7d236c4c94ee9a56e908c9641d2420
|
data/lib/commands/workflows.rb
CHANGED
@@ -23,7 +23,72 @@ module Factor
|
|
23
23
|
load_config(config_settings)
|
24
24
|
load_all_workflows(workflow_filename)
|
25
25
|
block_until_interupt
|
26
|
-
|
26
|
+
info 'Good bye!'
|
27
|
+
end
|
28
|
+
|
29
|
+
def cloud(args, options)
|
30
|
+
account_id = args[0]
|
31
|
+
workflow_id = args[1]
|
32
|
+
api_key = args[2]
|
33
|
+
|
34
|
+
if !api_key || !workflow_id || !account_id
|
35
|
+
error "API Key, Worklfow ID and Acount ID are all required"
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
|
39
|
+
info "Getting workflow (#{workflow_id}) from Factor.io Cloud"
|
40
|
+
begin
|
41
|
+
workflow_url = "https://factor.io/#{account_id}/workflows/#{workflow_id}.json?auth_token=#{api_key}"
|
42
|
+
raw_content = RestClient.get(workflow_url)
|
43
|
+
workflow_info = JSON.parse(raw_content)
|
44
|
+
rescue => ex
|
45
|
+
error "Couldn't retreive workflow: #{ex.message}"
|
46
|
+
exit
|
47
|
+
end
|
48
|
+
|
49
|
+
workflow_definition = workflow_info["workflow_definition"]
|
50
|
+
|
51
|
+
info "Getting credentials from Factor.io Cloud"
|
52
|
+
begin
|
53
|
+
credential_url = "https://factor.io/#{account_id}/credentials.json?auth_token=#{api_key}"
|
54
|
+
raw_content = RestClient.get(credential_url)
|
55
|
+
credential_info = JSON.parse(raw_content)
|
56
|
+
rescue => ex
|
57
|
+
error "Couldn't retreive workflow: #{ex.message}"
|
58
|
+
exit
|
59
|
+
end
|
60
|
+
|
61
|
+
credentials = {}
|
62
|
+
credential_info.each do |credential|
|
63
|
+
credentials[credential['service']] ||= {}
|
64
|
+
credentials[credential['service']][credential['name']] = credential['value']
|
65
|
+
end
|
66
|
+
|
67
|
+
configatron[:credentials].configure_from_hash(credentials)
|
68
|
+
|
69
|
+
info "Getting connector settings from Factor.io Index Server"
|
70
|
+
begin
|
71
|
+
connectors_url = options.index
|
72
|
+
connectors_url ||= 'https://raw.githubusercontent.com/factor-io/index/master/connectors.yml'
|
73
|
+
raw_content = RestClient.get(connectors_url)
|
74
|
+
connectors_info = YAML.parse(raw_content).to_ruby
|
75
|
+
rescue
|
76
|
+
error "Couldn't retreive connectors info"
|
77
|
+
exit
|
78
|
+
end
|
79
|
+
|
80
|
+
connectors = {}
|
81
|
+
connectors_info.each do |connector_id, connector_info|
|
82
|
+
connectors[connector_id] = connector_info['connectors']
|
83
|
+
end
|
84
|
+
|
85
|
+
configatron[:connectors].configure_from_hash(connectors)
|
86
|
+
|
87
|
+
@workflows[workflow_id] = load_workflow_from_definition(workflow_definition)
|
88
|
+
|
89
|
+
block_until_interupt
|
90
|
+
|
91
|
+
info 'Good bye!'
|
27
92
|
end
|
28
93
|
|
29
94
|
private
|
@@ -37,28 +102,26 @@ module Factor
|
|
37
102
|
elsif file_list.count == 0
|
38
103
|
error 'No workflows in this directory to run'
|
39
104
|
else
|
40
|
-
file_list.each { |filename| load_workflow(filename) }
|
105
|
+
file_list.each { |filename| load_workflow(File.expand_path(filename)) }
|
41
106
|
end
|
42
107
|
end
|
43
108
|
|
44
109
|
def block_until_interupt
|
45
|
-
|
110
|
+
info 'Ctrl-c to exit'
|
46
111
|
begin
|
47
112
|
loop do
|
48
113
|
sleep 1
|
49
114
|
end
|
50
115
|
rescue Interrupt
|
51
|
-
|
116
|
+
info 'Exiting app...'
|
52
117
|
ensure
|
53
|
-
@workflows.keys.each { |
|
118
|
+
@workflows.keys.each { |workflow_id| unload_workflow(workflow_id) }
|
54
119
|
end
|
55
120
|
end
|
56
121
|
|
57
122
|
def load_workflow(filename)
|
58
|
-
workflow_filename = File.expand_path(filename)
|
59
|
-
|
60
|
-
'status' => 'info',
|
61
|
-
'message' => "Loading workflow from #{workflow_filename}")
|
123
|
+
# workflow_filename = File.expand_path(filename)
|
124
|
+
info "Loading workflow from #{workflow_filename}"
|
62
125
|
begin
|
63
126
|
workflow_definition = File.read(workflow_filename)
|
64
127
|
rescue => ex
|
@@ -66,9 +129,11 @@ module Factor
|
|
66
129
|
return
|
67
130
|
end
|
68
131
|
|
69
|
-
|
70
|
-
|
71
|
-
|
132
|
+
@workflows[workflow_filename] = load_workflow_from_definition(workflow_definition)
|
133
|
+
end
|
134
|
+
|
135
|
+
def load_workflow_from_definition(workflow_definition)
|
136
|
+
info "Setting up workflow processor"
|
72
137
|
begin
|
73
138
|
connector_settings = configatron.connectors.to_hash
|
74
139
|
credential_settings = configatron.credentials.to_hash
|
@@ -79,24 +144,21 @@ module Factor
|
|
79
144
|
exception message, ex
|
80
145
|
end
|
81
146
|
|
82
|
-
|
147
|
+
workflow_thread = fork do
|
83
148
|
begin
|
84
|
-
|
85
|
-
'status' => 'info',
|
86
|
-
'message' => "Starting #{workflow_filename}")
|
149
|
+
info "Starting workflow"
|
87
150
|
runtime.load(workflow_definition)
|
88
151
|
rescue => ex
|
89
|
-
exception "Couldn't
|
152
|
+
exception "Couldn't workflow", ex
|
90
153
|
end
|
91
154
|
end
|
155
|
+
|
156
|
+
workflow_thread
|
92
157
|
end
|
93
158
|
|
94
|
-
def unload_workflow(
|
95
|
-
|
96
|
-
|
97
|
-
'status' => 'info',
|
98
|
-
'message' => "Stopping #{workflow_filename}")
|
99
|
-
Process.kill('SIGINT', @workflows[workflow_filename])
|
159
|
+
def unload_workflow(workflow_id)
|
160
|
+
info "Stopping #{workflow_id}"
|
161
|
+
Process.kill('SIGINT', @workflows[workflow_id])
|
100
162
|
end
|
101
163
|
|
102
164
|
def log_message(message_info)
|
data/lib/factor.rb
CHANGED
@@ -20,6 +20,13 @@ command 'server' do |c|
|
|
20
20
|
c.when_called Factor::Commands::Workflow, :server
|
21
21
|
end
|
22
22
|
|
23
|
+
command 'cloud' do |c|
|
24
|
+
c.syntax = 'factor host <account id> <workflow id> <api key>'
|
25
|
+
c.description = 'Start the Factor.io Server using your workflows and credentials from Factor.io Cloud'
|
26
|
+
c.option '--index URL', String, 'Use non-default Index server to get list of available credentials'
|
27
|
+
c.when_called Factor::Commands::Workflow, :cloud
|
28
|
+
end
|
29
|
+
|
23
30
|
command 'registry workflows' do |c|
|
24
31
|
c.syntax = 'factor registry workflows'
|
25
32
|
c.description = 'Get list of available workflow jumpstarts'
|
data/lib/factor/version.rb
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -87,9 +87,6 @@ describe Factor::Commands::Command do
|
|
87
87
|
@command.load_config config_settings
|
88
88
|
end
|
89
89
|
|
90
|
-
expect(output).to include('Loading credentials')
|
91
|
-
expect(output).to include('Loading connectors')
|
92
|
-
|
93
90
|
expect(configatron.credentials.github.api_key).to eq('fake_github_key')
|
94
91
|
expect(configatron.credentials.heroku.api_key).to eq('fake_heroku_key')
|
95
92
|
connectors_content.keys.each do |expected_connector_key|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Skierkowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|