sct 0.1.28 → 0.1.34

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,218 +0,0 @@
1
- require "sct_core"
2
- require "shell/ClassLevelInheritableAttributes"
3
-
4
- module Shell
5
- class Docker
6
- include ClassLevelInheritableAttributes
7
- inheritable_attributes :image, :is_private_registry, :entrypoint, :volumes, :ports, :extra_arguments, :env_variables
8
-
9
- @image = nil
10
- @is_private_registry = false
11
- @entrypoint = nil
12
-
13
- @volumes = {}
14
- @ports = {}
15
- @user_group = []
16
- @extra_arguments = {}
17
- @env_variables = {}
18
-
19
- ###
20
- # The Docker command configuration. This has to be able to execute the command properly
21
- ###
22
- def self.config
23
- # Run some initialization commands
24
- end
25
-
26
- ###
27
- # Execute the configured command
28
- ###
29
- def self.exec(cli_arguments)
30
-
31
- self.add_extra_argument(cli_arguments)
32
-
33
- self.config
34
-
35
- # Check if the basic variables are set
36
- if !@image || @image.empty?
37
- raise LoadError, "The required image is not defined for this command"
38
- end
39
-
40
- if !self.check_for_image && @is_private_registry
41
- unless self.login_to_private_registry
42
- raise RuntimeError, "Could not authenticate to GCR (" + $?.exitstatus + ")"
43
- end
44
- end
45
-
46
- self.run_command
47
- end
48
-
49
- ###
50
- # The image for this Docker command
51
- ###
52
- def self.set_image(image, is_private_registry=false)
53
- @image = image
54
- @is_private_registry = is_private_registry
55
- end
56
-
57
- ###
58
- # Set the current PWD as a volume on the specified path in the container
59
- ###
60
- def self.set_pwd_as_volume(volume_path)
61
- pwd = `pwd -P`
62
-
63
- if SctCore::Helper.operatingSystem == SctCore::Helper::WINDOWS
64
- pwd=SctCore::Helper.convertWSLToWindowsPath(pwd)
65
- end
66
-
67
- add_volume(pwd, volume_path)
68
- end
69
-
70
- ###
71
- # Add an extra volume in the container
72
- ###
73
- def self.add_volume(local_path, volume_path)
74
- @volumes[local_path] = volume_path
75
- end
76
-
77
- ###
78
- # Add a port mapping for the container
79
- ###
80
- def self.map_port(external_port, container_port = nil)
81
-
82
- external_port=String(external_port)
83
- container_port=String(container_port)
84
-
85
- if container_port.empty?
86
- container_port = external_port
87
- end
88
-
89
- @ports[external_port] = container_port
90
- end
91
-
92
- ###
93
- # Set the current user and group in the container
94
- ###
95
- def self.set_current_user_and_group
96
- @user_group = []
97
- @user_group << `id -u`
98
- @user_group << `id -g`
99
- end
100
-
101
- ###
102
- # Set the entrypoint for the command in the container
103
- ###
104
- def self.set_entrypoint(entrypoint)
105
- @entrypoint=entrypoint
106
- end
107
-
108
- ###
109
- # Add extra arguments to be configured for the container
110
- ###
111
- def self.add_extra_argument(argument, value=nil)
112
- argument = String(argument)
113
-
114
- if value
115
- value = String(value)
116
- end
117
-
118
- self.extra_arguments[argument] = value
119
- end
120
-
121
- ###
122
- # Set environment variables for the container
123
- ###
124
- def self.set_environment_variables(env_variables)
125
- @env_variables = env_variables
126
- end
127
-
128
- ###
129
- # Check if the image is already present in the system
130
- ###
131
- def self.check_for_image
132
- image_list=`docker images -q #{@image} 2> /dev/null`
133
-
134
- return image_list && !image_list.empty?
135
- end
136
-
137
- ###
138
- # Login to the private container registry with the cloud credentials
139
- ###
140
- def self.login_to_private_registry
141
- `docker login -u oauth2accesstoken -p "$(gcloud auth application-default print-access-token)" https://eu.gcr.io &> /dev/null`
142
- return $?.success?
143
- end
144
-
145
- ###
146
- # Run the command
147
- ###
148
- def self.run_command
149
- command = self.compile_command
150
-
151
- SctCore::CommandExecutor.execute(command: command, print_all: true, suppress_output: false)
152
- end
153
-
154
- ###
155
- # Compile the command with all options
156
- ###
157
- def self.compile_command
158
- # Basic docker run command
159
- command = self.add_to_command_string("" , "docker run --rm -it")
160
-
161
- # Attach environment variables
162
- if @env_variables
163
- @env_variables.each do |key, value|
164
- if value && !value.empty?
165
- command = self.add_to_command_string(command, "-e " + key+"="+value)
166
- else
167
- command = self.add_to_command_string("-e " + key, value)
168
- end
169
- end
170
- end
171
-
172
- # Attach configured volumes
173
- if @volumes
174
- @volumes.each do |local_path, container_path|
175
- command = self.add_to_command_string(command, "--volume " + local_path +":"+ container_path)
176
- end
177
- end
178
-
179
- # Map configured ports
180
- if @ports
181
- @ports.each do |external_port, container_port|
182
- command = self.add_to_command_string(command, "-p " + external_port +":"+ container_port)
183
- end
184
- end
185
-
186
- if @user_group
187
- command = self.add_to_command_string(command, "--user "+ String(@user_group.shift) +":"+ String(@user_group.shift))
188
- end
189
-
190
- # Add image to command
191
- command = self.add_to_command_string(command, @image)
192
-
193
- if @entrypoint
194
- command = self.add_to_command_string(command, String(@entrypoint))
195
- end
196
-
197
- # Append arguments and options to command
198
- if @extra_arguments
199
- @extra_arguments.each do |argument, value|
200
- if value && !value.empty?
201
- command = self.add_to_command_string(command, argument+"="+value)
202
- else
203
- command = self.add_to_command_string(command, argument)
204
- end
205
- end
206
- end
207
-
208
- return command
209
- end
210
-
211
- ###
212
- # Append a part to the command string and remove any unwanted characters
213
- ###
214
- def self.add_to_command_string(command_string, append)
215
- return command_string + append.gsub(/\r?\n/, "") + " "
216
- end
217
- end
218
- end
@@ -1,60 +0,0 @@
1
- require "sct_core"
2
-
3
- require_relative "docker"
4
-
5
- module Shell
6
- class Php < Docker
7
-
8
- attr_accessor :make
9
-
10
- # Configure the Yarn command
11
- def self.config
12
- self.set_image("eu.gcr.io/dev-pasc-vcdm/proactive-base:latest", true)
13
- self.set_pwd_as_volume("/var/www")
14
- self.set_current_user_and_group
15
- self.set_entrypoint("php")
16
- self.set_environment_variables(self.get_environment_variables)
17
- end
18
-
19
- def self.get_environment_variables
20
- environment_variables = {}
21
- environment_variables.store("ENVIRONMENT", "local")
22
-
23
- environment_variables = self.add_service_ip_and_port(environment_variables)
24
-
25
- return environment_variables
26
- end
27
-
28
- def self.add_service_ip_and_port(environment_variables)
29
- service_names = %w[mysql-service redis-service]
30
-
31
- minikube_status
32
-
33
- service_names.each { |service_name|
34
- url = `#{SctCore::Helper.minikube} service #{service_name} --url`
35
-
36
- ip_and_port = url.match /(?<ip>[0-9]+(?:\.[0-9]+){3}):(?<port>[0-9]+)/
37
-
38
- case service_name
39
- when "mysql-service"
40
- environment_variables.store("DB_HOST", ip_and_port[:ip])
41
- environment_variables.store("DB_PORT", ip_and_port[:port])
42
- when "redis-service"
43
- environment_variables.store("REDIS_HOST", ip_and_port[:ip])
44
- environment_variables.store("REDIS_PORT", ip_and_port[:port])
45
- end
46
- }
47
-
48
- return environment_variables
49
- end
50
-
51
- def self.minikube_status
52
- output = `#{SctCore::Helper.minikube} status`
53
-
54
- if output.scan(/Running/).length != 3 && output.scan(/Configured/).length != 1
55
- UI.important("Please check your minikube status. If all services are stopped you should start the minikube first.")
56
- exit
57
- end
58
- end
59
- end
60
- end
@@ -1,17 +0,0 @@
1
- require "sct_core"
2
- require_relative "docker"
3
-
4
- module Shell
5
- class Yarn < Docker
6
-
7
- # Configure the Yarn command
8
- def self.config
9
- self.set_image("eu.gcr.io/dev-pasc-vcdm/helpers-yarn:latest", true)
10
- self.set_pwd_as_volume("/app")
11
- self.add_volume(SctCore::Helper.convertWSLToWindowsPath("#{SctCore::Helper.windowsHomePath || SctCore::Helper.homePath}/.cache") , "/.cache")
12
- self.map_port(8081, 8080)
13
- self.map_port(9001)
14
- self.set_current_user_and_group()
15
- end
16
- end
17
- end
@@ -1,7 +0,0 @@
1
- module Shell
2
- TOOLS = [
3
- :yarn,
4
- :composer,
5
- :php
6
- ]
7
- end