foreman_docker 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -2
- data/Rakefile +13 -2
- data/app/assets/stylesheets/foreman_docker/terminal.css.scss +85 -0
- data/app/controllers/containers/steps_controller.rb +55 -0
- data/app/controllers/containers_controller.rb +62 -0
- data/app/helpers/container_steps_helper.rb +11 -0
- data/app/helpers/containers_helper.rb +54 -0
- data/app/models/concerns/fog_extensions/fogdocker/image.rb +1 -2
- data/app/models/concerns/fog_extensions/fogdocker/server.rb +18 -8
- data/app/models/container.rb +29 -0
- data/app/models/docker_image.rb +7 -0
- data/app/models/docker_tag.rb +7 -0
- data/app/models/foreman_docker/docker.rb +22 -16
- data/app/views/api/v1/compute_resources/docker.json +1 -0
- data/app/views/api/v2/compute_resources/docker.json +1 -0
- data/app/views/compute_resources/form/_docker.html.erb +8 -1
- data/app/views/compute_resources_vms/show/_docker.html.erb +4 -0
- data/app/views/containers/_list.html.erb +35 -0
- data/app/views/containers/index.html.erb +31 -0
- data/app/views/containers/show.html.erb +104 -0
- data/app/views/containers/steps/_form_buttons.html.erb +20 -0
- data/app/views/containers/steps/_title.html.erb +3 -0
- data/app/views/containers/steps/configuration.html.erb +14 -0
- data/app/views/containers/steps/environment.html.erb +9 -0
- data/app/views/containers/steps/image.html.erb +33 -0
- data/app/views/containers/steps/preliminary.html.erb +18 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20140930175337_add_email_to_compute_resource.rb +5 -0
- data/db/migrate/20141005233312_create_containers.rb +11 -0
- data/db/migrate/20141007225130_add_compute_resource_id_to_container.rb +5 -0
- data/db/migrate/20141009001613_add_tag_to_container.rb +5 -0
- data/db/migrate/20141009011026_add_attributes_to_container.rb +12 -0
- data/db/migrate/20141010173220_create_docker_images.rb +36 -0
- data/db/migrate/20141018110810_add_uuid_to_containers.rb +6 -0
- data/lib/foreman_docker/engine.rb +38 -6
- data/lib/foreman_docker/tasks/test.rake +44 -0
- data/lib/foreman_docker/version.rb +1 -1
- data/test/factories/compute_resources.rb +15 -0
- data/test/factories/containers.rb +6 -0
- data/test/factories/docker_image.rb +5 -0
- data/test/factories/docker_tag.rb +6 -0
- data/test/functionals/container_controller_test.rb +27 -0
- data/test/functionals/containers_steps_controller_test.rb +39 -0
- data/test/models/container_test.rb +36 -0
- data/test/models/docker_image_test.rb +12 -0
- data/test/models/docker_tag_test.rb +17 -0
- data/test/test_plugin_helper.rb +14 -0
- metadata +95 -85
- data/lib/tasks/foreman_docker_tasks.rake +0 -4
- data/test/dummy/README.rdoc +0 -28
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/javascripts/application.js +0 -13
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -5
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -23
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -29
- data/test/dummy/config/environments/production.rb +0 -80
- data/test/dummy/config/environments/test.rb +0 -36
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -12
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -56
- data/test/dummy/public/404.html +0 -58
- data/test/dummy/public/422.html +0 -58
- data/test/dummy/public/500.html +0 -57
- data/test/dummy/public/favicon.ico +0 -0
- data/test/foreman_docker_test.rb +0 -7
- data/test/test_helper.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11781ae40d79526d1ce98c52dddbb9341c9aa211
|
4
|
+
data.tar.gz: 87df5bd21364b87d937dda8d3de05cf9bae0b303
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c70da7838dc58dc17fb4e9bbd716fe0d3d34d3bba529923ad5d62968db33f58331760fd662806cb123df7922409e19009a5f8ddaeed51a12d9991db10d8eeeb
|
7
|
+
data.tar.gz: 5cde392c952ca19d530f17a8cac8e92ecb89f612143cce0d445ebe2e87e06b88895a25e28fd69025723e80a4f4c56bdd0af63822bb8c3bf0c999832aaa5abd09
|
data/README.md
CHANGED
@@ -10,17 +10,23 @@ Please see the Foreman manual for appropriate instructions:
|
|
10
10
|
|
11
11
|
The gem name is "foreman_docker".
|
12
12
|
|
13
|
+
RPM users can install the "ruby193-rubygem-foreman_docker" or "rubygem-foreman_docker" packages.
|
14
|
+
|
13
15
|
## Compatibility
|
14
16
|
|
15
17
|
| Foreman Version | Plugin Version |
|
16
18
|
| ---------------:| --------------:|
|
17
|
-
|
|
19
|
+
| >= 1.5 | 0.0.1 |
|
20
|
+
|
21
|
+
## Testing
|
22
|
+
|
23
|
+
Run `rake test:docker:test` from your Foreman directory to run the test suite.
|
18
24
|
|
19
25
|
## Latest code
|
20
26
|
|
21
27
|
You can get the develop branch of the plugin by specifying your Gemfile in this way:
|
22
28
|
|
23
|
-
gem 'foreman_docker', :git => "https://github.com/
|
29
|
+
gem 'foreman_docker', :git => "https://github.com/theforeman/foreman-docker.git"
|
24
30
|
|
25
31
|
# Copyright
|
26
32
|
|
data/Rakefile
CHANGED
@@ -1,7 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'bundler/setup'
|
5
5
|
rescue LoadError
|
6
|
-
|
6
|
+
Rails.logger.error 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
8
|
+
|
9
|
+
begin
|
10
|
+
require 'rubocop/rake_task'
|
11
|
+
RuboCop::RakeTask.new
|
12
|
+
rescue => _
|
13
|
+
puts "Rubocop not loaded."
|
14
|
+
end
|
15
|
+
|
16
|
+
task :default do
|
17
|
+
Rake::Task['rubocop'].execute
|
7
18
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
.terminal {
|
2
|
+
.terminal-output .format {
|
3
|
+
display: inline-block;
|
4
|
+
}
|
5
|
+
.terminal-output div div {
|
6
|
+
display: inline-block;
|
7
|
+
}
|
8
|
+
.clipboard {
|
9
|
+
position: absolute;
|
10
|
+
bottom: 0;
|
11
|
+
left: 0;
|
12
|
+
opacity: 0.01;
|
13
|
+
filter: alpha(opacity = 0.01);
|
14
|
+
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.01);
|
15
|
+
width: 2px;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
.terminal {
|
20
|
+
padding: 10px;
|
21
|
+
position: relative;
|
22
|
+
overflow-y: scroll ;
|
23
|
+
}
|
24
|
+
|
25
|
+
.terminal {
|
26
|
+
.terminal-output div div {
|
27
|
+
display: block;
|
28
|
+
line-height: 14px;
|
29
|
+
height: auto;
|
30
|
+
}
|
31
|
+
.prompt {
|
32
|
+
display: block;
|
33
|
+
line-height: 14px;
|
34
|
+
height: auto;
|
35
|
+
float: left;
|
36
|
+
}
|
37
|
+
font-family: FreeMono,monospace;
|
38
|
+
color: rgba(255, 255, 255, 1);
|
39
|
+
background-color: rgba(47, 47, 47, 1);
|
40
|
+
font-size: 12px;
|
41
|
+
line-height: 14px;
|
42
|
+
}
|
43
|
+
|
44
|
+
.terminal-output > div {
|
45
|
+
min-height: 14px;
|
46
|
+
}
|
47
|
+
|
48
|
+
.terminal {
|
49
|
+
.terminal-output div span {
|
50
|
+
display: inline-block;
|
51
|
+
}
|
52
|
+
.terminal-output div {
|
53
|
+
div::-moz-selection, span::-moz-selection {
|
54
|
+
color: rgba(255, 255, 255, 1);
|
55
|
+
background-color: rgba(47, 47, 47, 1);
|
56
|
+
}
|
57
|
+
div {
|
58
|
+
a::-moz-selection, &::selection, a::selection {
|
59
|
+
color: rgba(255, 255, 255, 1);
|
60
|
+
background-color: rgba(47, 47, 47, 1);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
span::selection {
|
64
|
+
color: rgba(255, 255, 255, 1);
|
65
|
+
background-color: rgba(47, 47, 47, 1);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
.terminal-output div.error {
|
69
|
+
color: red;
|
70
|
+
div {
|
71
|
+
color: red;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
.clear {
|
77
|
+
clear: both;
|
78
|
+
}
|
79
|
+
|
80
|
+
.terminal a {
|
81
|
+
color: #0F60FF;
|
82
|
+
&:hover {
|
83
|
+
color: red;
|
84
|
+
}
|
85
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Containers
|
2
|
+
class StepsController < ::ApplicationController
|
3
|
+
include Wicked::Wizard
|
4
|
+
|
5
|
+
steps :preliminary, :image, :configuration, :environment
|
6
|
+
before_filter :find_container
|
7
|
+
|
8
|
+
def show
|
9
|
+
case step
|
10
|
+
when :preliminary
|
11
|
+
@container_resources = ComputeResource.select { |cr| cr.provider == 'Docker' }
|
12
|
+
when :image
|
13
|
+
when :configuration
|
14
|
+
when :environment
|
15
|
+
end
|
16
|
+
render_wizard
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
case step
|
21
|
+
when :preliminary
|
22
|
+
@container.update_attribute(:compute_resource_id, params[:container][:compute_resource_id])
|
23
|
+
when :image
|
24
|
+
@container.image = params[:image]
|
25
|
+
@container.update_attributes(params[:container])
|
26
|
+
when :configuration
|
27
|
+
@container.update_attributes(params[:container])
|
28
|
+
when :environment
|
29
|
+
@container.update_attributes(params[:container])
|
30
|
+
@container.uuid = start_container.id
|
31
|
+
end
|
32
|
+
render_wizard @container
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def finish_wizard_path
|
38
|
+
container_path(:id => params[:container_id])
|
39
|
+
end
|
40
|
+
|
41
|
+
def allowed_resources
|
42
|
+
ComputeResource.authorized(:view_compute_resources)
|
43
|
+
end
|
44
|
+
|
45
|
+
def find_container
|
46
|
+
@container = Container.find(params[:container_id])
|
47
|
+
rescue ActiveRecord::RecordNotFound
|
48
|
+
not_found
|
49
|
+
end
|
50
|
+
|
51
|
+
def start_container
|
52
|
+
@container.compute_resource.create_vm(@container.parametrize)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class ContainersController < ::ApplicationController
|
2
|
+
before_filter :find_resource, :only => [:show]
|
3
|
+
|
4
|
+
def index
|
5
|
+
@container_resources = allowed_resources.select { |cr| cr.provider == 'Docker' }
|
6
|
+
if @container_resources.empty?
|
7
|
+
warning('You need a Compute Resource of type Docker to start managing containers')
|
8
|
+
redirect_to new_compute_resource_path
|
9
|
+
end
|
10
|
+
# This should only rescue Fog::Errors, but Fog returns all kinds of errors...
|
11
|
+
rescue
|
12
|
+
process_error
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
@container = Container.create
|
17
|
+
redirect_to container_step_path(:container_id => @container.id, :id => :preliminary)
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
if resource_deletion
|
22
|
+
process_success(:success_redirect => containers_path,
|
23
|
+
:success_msg => _("Container #{@deleted_identifier} is being deleted."))
|
24
|
+
else
|
25
|
+
process_error(:redirect => containers_path)
|
26
|
+
end
|
27
|
+
rescue ActiveRecord::RecordNotFound
|
28
|
+
not_found
|
29
|
+
end
|
30
|
+
|
31
|
+
def show
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def resource_deletion
|
37
|
+
# Unmanaged container - only present in Compute Resource
|
38
|
+
if params[:compute_resource_id].present?
|
39
|
+
@deleted_identifier = params[:id]
|
40
|
+
destroy_compute_resource_vm(params[:compute_resource_id], params[:id])
|
41
|
+
else # Managed container
|
42
|
+
find_resource
|
43
|
+
@deleted_identifier = @container.name
|
44
|
+
|
45
|
+
destroy_compute_resource_vm(@container.compute_resource, @container.uuid) &&
|
46
|
+
@container.destroy
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def destroy_compute_resource_vm(resource_id, uuid)
|
51
|
+
@container_resource = ComputeResource.authorized(:destroy_compute_resources_vms)
|
52
|
+
.find(resource_id)
|
53
|
+
@container_resource.destroy_vm(uuid)
|
54
|
+
rescue => error
|
55
|
+
logger.error "#{error.message} (#{error.class})\n#{error.backtrace.join("\n")}"
|
56
|
+
false
|
57
|
+
end
|
58
|
+
|
59
|
+
def allowed_resources
|
60
|
+
ComputeResource.authorized(:view_compute_resources)
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module ContainersHelper
|
2
|
+
def managed_icon(container, resource)
|
3
|
+
if managed?(container, resource)
|
4
|
+
'<span class="glyphicon glyphicon-check"></span>'.html_safe
|
5
|
+
else
|
6
|
+
'<span class="glyphicon glyphicon-unchecked"></span>'.html_safe
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def managed?(container, resource)
|
11
|
+
uuids_in_resource(resource).include? container.identity
|
12
|
+
end
|
13
|
+
|
14
|
+
def uuids_in_resource(resource)
|
15
|
+
Container.where(:compute_resource_id => resource.id).pluck(:uuid)
|
16
|
+
end
|
17
|
+
|
18
|
+
def link_to_container(container, resource)
|
19
|
+
link_to_if_authorized container.name[1..-1].titleize,
|
20
|
+
container_link_hash(container, resource)
|
21
|
+
end
|
22
|
+
|
23
|
+
def container_link_hash(container, resource)
|
24
|
+
if managed?(container, resource)
|
25
|
+
hash_for_container_path(:id => Container.find_by_uuid(container.identity).id)
|
26
|
+
else
|
27
|
+
hash_for_compute_resource_vm_path(:compute_resource_id => resource,
|
28
|
+
:id => container.identity)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def container_title_actions(container)
|
33
|
+
@compute_resource = container.compute_resource
|
34
|
+
title_actions(
|
35
|
+
button_group(
|
36
|
+
link_to_if_authorized(_("Commit"), hash_for_container_path(:id => container)
|
37
|
+
.merge(:auth_object => container,
|
38
|
+
:permission => 'commit_containers'),
|
39
|
+
:title => _('Saves differences between image' \
|
40
|
+
'and current state of container' \
|
41
|
+
'as a new image'))
|
42
|
+
),
|
43
|
+
button_group(vm_power_action(container.in_fog)),
|
44
|
+
button_group(
|
45
|
+
display_delete_if_authorized(
|
46
|
+
hash_for_container_path(:id => container.id)
|
47
|
+
.merge(:auth_object => container,
|
48
|
+
:auth_action => 'destroy',
|
49
|
+
:authorizer => authorizer),
|
50
|
+
:confirm => _("Delete %s?") % container.name)
|
51
|
+
)
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
@@ -6,18 +6,28 @@ module FogExtensions
|
|
6
6
|
include ActionView::Helpers::NumberHelper
|
7
7
|
|
8
8
|
def state
|
9
|
-
state_running ?
|
9
|
+
state_running ? 'Running' : 'Stopped'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Last time a container was started
|
13
|
+
# WARNING: this doesn't mean the container has been running since then.
|
14
|
+
def started_at
|
15
|
+
attributes['state_started_at']
|
16
|
+
end
|
17
|
+
|
18
|
+
def image_friendly_name
|
19
|
+
attributes['config_image']
|
10
20
|
end
|
11
21
|
|
12
22
|
def command
|
13
|
-
c=[]
|
14
|
-
c += entrypoint if entrypoint.
|
15
|
-
c += cmd if cmd.
|
23
|
+
c = []
|
24
|
+
c += entrypoint if entrypoint.present?
|
25
|
+
c += cmd if cmd.present?
|
16
26
|
c.join(' ')
|
17
27
|
end
|
18
28
|
|
19
29
|
def poweroff
|
20
|
-
service.vm_action(:id =>id, :action => :kill)
|
30
|
+
service.vm_action(:id => id, :action => :kill)
|
21
31
|
end
|
22
32
|
|
23
33
|
def reset
|
@@ -26,9 +36,9 @@ module FogExtensions
|
|
26
36
|
end
|
27
37
|
|
28
38
|
def vm_description
|
29
|
-
_(
|
39
|
+
_('%{cores} Cores and %{memory} memory') %
|
40
|
+
{ :cores => cpus, :memory => number_to_human_size(memory.to_i) }
|
30
41
|
end
|
31
|
-
|
32
42
|
end
|
33
43
|
end
|
34
|
-
end
|
44
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Container < ActiveRecord::Base
|
2
|
+
belongs_to :compute_resource
|
3
|
+
belongs_to :image, :class_name => 'DockerImage', :foreign_key => 'docker_image_id'
|
4
|
+
belongs_to :tag, :class_name => 'DockerTag', :foreign_key => 'docker_tag_id'
|
5
|
+
|
6
|
+
attr_accessible :command, :image, :name, :compute_resource_id, :entrypoint,
|
7
|
+
:cpu_set, :cpu_shares, :memory, :tty, :attach_stdin,
|
8
|
+
:attach_stdout, :attach_stderr, :tag, :uuid
|
9
|
+
|
10
|
+
def parametrize
|
11
|
+
{ :name => name, :image => tag.tag.blank? ? image.image_id : "#{image.image_id}:#{tag.tag}",
|
12
|
+
:tty => tty, :memory => memory, :cmd => command.nil? ? '' : command.split(','),
|
13
|
+
:attach_stdout => attach_stdout, :attach_stdout => attach_stdout,
|
14
|
+
:attach_stderr => attach_stderr, :cpushares => cpu_shares, :cpuset => cpu_set }
|
15
|
+
end
|
16
|
+
|
17
|
+
def image=(image_id)
|
18
|
+
self[:docker_image_id] = DockerImage.find_or_create_by_image_id!(image_id).id
|
19
|
+
end
|
20
|
+
|
21
|
+
def tag=(tag_name)
|
22
|
+
self[:docker_tag_id] = DockerTag
|
23
|
+
.find_or_create_by_tag_and_docker_image_id!(tag_name, image.id).id
|
24
|
+
end
|
25
|
+
|
26
|
+
def in_fog
|
27
|
+
@fog_container ||= compute_resource.vms.get(uuid)
|
28
|
+
end
|
29
|
+
end
|
@@ -2,7 +2,6 @@ require 'uri'
|
|
2
2
|
|
3
3
|
module ForemanDocker
|
4
4
|
class Docker < ::ComputeResource
|
5
|
-
|
6
5
|
validates :url, :format => { :with => URI.regexp }
|
7
6
|
|
8
7
|
def self.model_name
|
@@ -18,16 +17,16 @@ module ForemanDocker
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def provided_attributes
|
21
|
-
super.merge(
|
20
|
+
super.merge(:mac => :mac)
|
22
21
|
end
|
23
22
|
|
24
|
-
#FIXME
|
23
|
+
# FIXME
|
25
24
|
def max_cpu_count
|
26
25
|
8
|
27
26
|
end
|
28
27
|
|
29
28
|
def max_memory
|
30
|
-
16*1024*1024*1024
|
29
|
+
16 * 1024 * 1024 * 1024
|
31
30
|
end
|
32
31
|
|
33
32
|
def available_images
|
@@ -35,26 +34,34 @@ module ForemanDocker
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def image(id)
|
38
|
-
client.image.get(id) ||
|
37
|
+
client.image.get(id) || fail(ActiveRecord::RecordNotFound)
|
39
38
|
end
|
40
39
|
|
41
40
|
def provider_friendly_name
|
42
|
-
|
41
|
+
'Docker'
|
43
42
|
end
|
44
43
|
|
45
|
-
def create_vm
|
46
|
-
args['cmd'] = Array.wrap( args.delete('cmd') )
|
44
|
+
def create_vm(args = {})
|
47
45
|
options = vm_instance_defaults.merge(args)
|
48
46
|
logger.debug("creating Docker with the following options: #{options.inspect}")
|
49
47
|
client.servers.create options
|
50
|
-
rescue Fog::Errors::Error => e
|
48
|
+
rescue Excon::Errors::SocketError, Fog::Errors::Error => e
|
51
49
|
logger.debug "Fog error: #{e.message}\n " + e.backtrace.join("\n ")
|
52
50
|
errors.add(:base, e.message.to_s)
|
53
51
|
false
|
54
52
|
end
|
55
53
|
|
56
54
|
def vm_instance_defaults
|
57
|
-
ActiveSupport::HashWithIndifferentAccess.new('name' => "foreman_#{Time.now.to_i}",
|
55
|
+
ActiveSupport::HashWithIndifferentAccess.new('name' => "foreman_#{Time.now.to_i}",
|
56
|
+
'cmd' => ['/bin/bash'])
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_connection(options = {})
|
60
|
+
super
|
61
|
+
client
|
62
|
+
# This should only rescue Fog::Errors, but Fog returns all kinds of errors...
|
63
|
+
rescue => e
|
64
|
+
errors[:base] << e.message
|
58
65
|
end
|
59
66
|
|
60
67
|
protected
|
@@ -66,19 +73,18 @@ module ForemanDocker
|
|
66
73
|
false
|
67
74
|
end
|
68
75
|
|
69
|
-
|
70
76
|
def client
|
71
77
|
@client ||= ::Fog::Compute.new(
|
72
|
-
:provider =>
|
73
|
-
:docker_username
|
74
|
-
:docker_password
|
75
|
-
:
|
78
|
+
:provider => 'fogdocker',
|
79
|
+
:docker_username => user,
|
80
|
+
:docker_password => password,
|
81
|
+
:docker_email => email,
|
82
|
+
:docker_url => url
|
76
83
|
)
|
77
84
|
end
|
78
85
|
|
79
86
|
def api_version
|
80
87
|
@api_version ||= client.send(:client).api_version
|
81
88
|
end
|
82
|
-
|
83
89
|
end
|
84
90
|
end
|