-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathworker.rb
More file actions
83 lines (68 loc) · 2.44 KB
/
Copy pathworker.rb
File metadata and controls
83 lines (68 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# frozen_string_literal: true
require_relative 'activities'
require_relative 'greeting_workflow'
require 'optparse'
require 'temporalio/client'
require 'temporalio/worker'
# Define options parser to handle certificate paths and other parameters
options = {
target_host: 'localhost:7233',
namespace: 'default',
task_queue: 'mtls-task-queue',
server_root_ca_cert: nil,
client_cert: nil,
client_key: nil
}
OptionParser.new do |opts|
opts.banner = 'Usage: worker.rb [options]'
opts.on('--target-host HOST', 'Host:port for the server (default: localhost:7233)') do |v|
options[:target_host] = v
end
opts.on('--namespace NAMESPACE', 'Namespace to use (default: default)') do |v|
options[:namespace] = v
end
opts.on('--task-queue QUEUE', 'Task queue to use (default: mtls-task-queue)') do |v|
options[:task_queue] = v
end
opts.on('--server-root-ca-cert PATH', 'Path to the server root CA certificate') do |v|
options[:server_root_ca_cert] = v
end
opts.on('--client-cert PATH', 'Path to the client certificate (required for mTLS)') do |v|
options[:client_cert] = v
end
opts.on('--client-key PATH', 'Path to the client key (required for mTLS)') do |v|
options[:client_key] = v
end
end.parse!
# Check for required certificates for mTLS
if options[:client_cert].nil? || options[:client_key].nil?
puts 'Error: Client certificate and key are required for mTLS'
puts 'Usage: ruby worker.rb --client-cert PATH --client-key PATH'
exit 1
end
puts "Connecting to Temporal Server at #{options[:target_host]} with mTLS..."
puts "Using namespace: #{options[:namespace]}"
# Create client with mTLS configuration
tls_options = Temporalio::Client::Connection::TLSOptions.new(
client_cert: File.read(options[:client_cert]),
client_private_key: File.read(options[:client_key])
)
# Add server root CA cert if provided
if options[:server_root_ca_cert]
tls_options = tls_options.with(server_root_ca_cert: File.read(options[:server_root_ca_cert]))
end
# Connect to Temporal server
client = Temporalio::Client.connect(
options[:target_host],
options[:namespace],
tls: tls_options
)
# Start worker with activities and workflows registered
puts 'Starting worker connected with mTLS...'
puts "Task queue: #{options[:task_queue]}"
Temporalio::Worker.new(
client:,
task_queue: options[:task_queue],
workflows: [ClientMtls::GreetingWorkflow],
activities: [ClientMtls::Activities::ComposeGreeting]
).run(shutdown_signals: ['SIGINT'])