floe 0.10.0 → 0.11.0

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.
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Floe
4
- class Workflow
5
- class Runner
6
- class Podman < Floe::Workflow::Runner::Docker
7
- DOCKER_COMMAND = "podman"
8
-
9
- def initialize(options = {})
10
- require "awesome_spawn"
11
- require "securerandom"
12
-
13
- super
14
-
15
- @identity = options["identity"]
16
- @log_level = options["log-level"]
17
- @network = options["network"]
18
- @noout = options["noout"].to_s == "true" if options.key?("noout")
19
- @pull_policy = options["pull-policy"]
20
- @root = options["root"]
21
- @runroot = options["runroot"]
22
- @runtime = options["runtime"]
23
- @runtime_flag = options["runtime-flag"]
24
- @storage_driver = options["storage-driver"]
25
- @storage_opt = options["storage-opt"]
26
- @syslog = options["syslog"].to_s == "true" if options.key?("syslog")
27
- @tmpdir = options["tmpdir"]
28
- @transient_store = !!options["transient-store"] if options.key?("transient-store")
29
- @volumepath = options["volumepath"]
30
- end
31
-
32
- private
33
-
34
- def run_container_params(image, env, secret)
35
- params = ["run"]
36
- params << :detach
37
- params += env.map { |k, v| [:e, "#{k}=#{v}"] }
38
- params << [:e, "_CREDENTIALS=/run/secrets/#{secret}"] if secret
39
- params << [:pull, @pull_policy] if @pull_policy
40
- params << [:net, "host"] if @network == "host"
41
- params << [:secret, secret] if secret
42
- params << [:name, container_name(image)]
43
- params << image
44
- end
45
-
46
- def create_secret(secrets)
47
- secret_guid = SecureRandom.uuid
48
- podman!("secret", "create", secret_guid, "-", :in_data => secrets.to_json)
49
- secret_guid
50
- end
51
-
52
- def delete_secret(secret_guid)
53
- podman!("secret", "rm", secret_guid)
54
- rescue
55
- nil
56
- end
57
-
58
- def parse_notice(notice)
59
- id, status, exit_code = JSON.parse(notice).values_at("ID", "Status", "ContainerExitCode")
60
-
61
- event = podman_event_status_to_event(status)
62
- running = event != :delete
63
-
64
- runner_context = {"container_ref" => id, "container_state" => {"Running" => running, "ExitCode" => exit_code.to_i}}
65
-
66
- [event, runner_context]
67
- rescue JSON::ParserError
68
- []
69
- end
70
-
71
- def podman_event_status_to_event(status)
72
- case status
73
- when "create"
74
- :create
75
- when "init", "start"
76
- :update
77
- when "died", "cleanup", "remove"
78
- :delete
79
- else
80
- :unknown
81
- end
82
- end
83
-
84
- alias podman! docker!
85
-
86
- def global_docker_options
87
- options = []
88
- options << [:identity, @identity] if @identity
89
- options << [:"log-level", @log_level] if @log_level
90
- options << :noout if @noout
91
- options << [:root, @root] if @root
92
- options << [:runroot, @runroot] if @runroot
93
- options << [:runtime, @runtime] if @runtime
94
- options << [:"runtime-flag", @runtime_flag] if @runtime_flag
95
- options << [:"storage-driver", @storage_driver] if @storage_driver
96
- options << [:"storage-opt", @storage_opt] if @storage_opt
97
- options << :syslog if @syslog
98
- options << [:tmpdir, @tmpdir] if @tmpdir
99
- options << [:"transient-store", @transient_store] if @transient_store
100
- options << [:volumepath, @volumepath] if @volumepath
101
- options
102
- end
103
- end
104
- end
105
- end
106
- end
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Floe
4
- class Workflow
5
- class Runner
6
- include Logging
7
-
8
- OUTPUT_MARKER = "__FLOE_OUTPUT__\n"
9
-
10
- def initialize(_options = {})
11
- end
12
-
13
- @runners = {}
14
- class << self
15
- # deprecated -- use Floe.set_runner instead
16
- def docker_runner=(value)
17
- set_runner("docker", value)
18
- end
19
-
20
- # see Floe.set_runner
21
- def set_runner(scheme, name_or_instance, options = {})
22
- @runners[scheme] =
23
- case name_or_instance
24
- when "docker", nil
25
- Floe::Workflow::Runner::Docker.new(options)
26
- when "podman"
27
- Floe::Workflow::Runner::Podman.new(options)
28
- when "kubernetes"
29
- Floe::Workflow::Runner::Kubernetes.new(options)
30
- when Floe::Workflow::Runner
31
- name_or_instance
32
- else
33
- raise ArgumentError, "docker runner must be one of: docker, podman, kubernetes"
34
- end
35
- end
36
-
37
- def for_resource(resource)
38
- raise ArgumentError, "resource cannot be nil" if resource.nil?
39
-
40
- # if no runners are set, default docker:// to docker
41
- set_runner("docker", "docker") if @runners.empty?
42
- scheme = resource.split("://").first
43
- @runners[scheme] || raise(ArgumentError, "Invalid resource scheme [#{scheme}]")
44
- end
45
- end
46
-
47
- def run!(resource, env = {}, secrets = {})
48
- raise NotImplementedError, "Must be implemented in a subclass"
49
- end
50
-
51
- # @return [Hash] runner_context
52
- def run_async!(_image, _env = {}, _secrets = {})
53
- raise NotImplementedError, "Must be implemented in a subclass"
54
- end
55
-
56
- def running?(_runner_context)
57
- raise NotImplementedError, "Must be implemented in a subclass"
58
- end
59
-
60
- def success?(_runner_context)
61
- raise NotImplementedError, "Must be implemented in a subclass"
62
- end
63
-
64
- def output(_runner_context)
65
- raise NotImplementedError, "Must be implemented in a subclass"
66
- end
67
-
68
- def cleanup(_runner_context)
69
- raise NotImplementedError, "Must be implemented in a subclass"
70
- end
71
-
72
- def wait(timeout: nil, events: %i[create update delete])
73
- raise NotImplementedError, "Must be implemented in a subclass"
74
- end
75
- end
76
- end
77
- end