Class: ForemanDocker::Docker
- Inherits:
-
ComputeResource
- Object
- ComputeResource
- ForemanDocker::Docker
- Defined in:
- app/models/foreman_docker/docker.rb
Class Method Summary collapse
Instance Method Summary collapse
- #api_version ⇒ Object
- #authenticate! ⇒ Object
- #available_images ⇒ Object
- #capabilities ⇒ Object
- #console(uuid) ⇒ Object
- #create_container(args = {}) ⇒ Object
- #create_image(args = {}) ⇒ Object
- #docker_connection ⇒ Object
- #exist?(name) ⇒ Boolean
- #image(id) ⇒ Object
- #local_images(filter = '') ⇒ Object
- #max_cpu_count ⇒ Object
- #max_memory ⇒ Object
- #provided_attributes ⇒ Object
- #provider_friendly_name ⇒ Object
- #search(term = '') ⇒ Object
- #supports_update? ⇒ Boolean
- #tags(image_name) ⇒ Object
- #tags_for_local_image(image) ⇒ Object
- #test_connection(options = {}) ⇒ Object
- #vm_instance_defaults ⇒ Object
Class Method Details
.get_container(container) ⇒ Object
12 13 14 15 |
# File 'app/models/foreman_docker/docker.rb', line 12 def self.get_container(container) conn = container.compute_resource.docker_connection ::Docker::Container.get(container.uuid, {}, conn) end |
.model_name ⇒ Object
8 9 10 |
# File 'app/models/foreman_docker/docker.rb', line 8 def self.model_name ComputeResource.model_name end |
Instance Method Details
#api_version ⇒ Object
110 111 112 |
# File 'app/models/foreman_docker/docker.rb', line 110 def api_version ::Docker.version(docker_connection) end |
#authenticate! ⇒ Object
114 115 116 |
# File 'app/models/foreman_docker/docker.rb', line 114 def authenticate! ::Docker.authenticate!(credentials, docker_connection) end |
#available_images ⇒ Object
37 38 39 |
# File 'app/models/foreman_docker/docker.rb', line 37 def available_images ::Docker::Image.all({}, docker_connection) end |
#capabilities ⇒ Object
17 18 19 |
# File 'app/models/foreman_docker/docker.rb', line 17 def capabilities [] end |
#console(uuid) ⇒ Object
100 101 102 103 104 105 106 107 108 |
# File 'app/models/foreman_docker/docker.rb', line 100 def console(uuid) test_connection container = ::Docker::Container.get(uuid, {}, docker_connection) { :name => container.info['Name'], 'timestamp' => Time.now.utc, 'output' => container.logs(:stdout => true, :tail => 100) } end |
#create_container(args = {}) ⇒ Object
80 81 82 83 84 85 86 |
# File 'app/models/foreman_docker/docker.rb', line 80 def create_container(args = {}) = vm_instance_defaults.merge(args) logger.debug("Creating container with the following options: #{.inspect}") docker_command do ::Docker::Container.create(, docker_connection) end end |
#create_image(args = {}) ⇒ Object
88 89 90 91 92 93 |
# File 'app/models/foreman_docker/docker.rb', line 88 def create_image(args = {}) logger.debug("Creating docker image with the following options: #{args.inspect}") docker_command do ::Docker::Image.create(args, credentials, docker_connection) end end |
#docker_connection ⇒ Object
128 129 130 |
# File 'app/models/foreman_docker/docker.rb', line 128 def docker_connection @docker_connection ||= ::Docker::Connection.new(url, credentials) end |
#exist?(name) ⇒ Boolean
52 53 54 |
# File 'app/models/foreman_docker/docker.rb', line 52 def exist?(name) ::Docker::Image.exist?(name, {}, docker_connection) end |
#image(id) ⇒ Object
56 57 58 |
# File 'app/models/foreman_docker/docker.rb', line 56 def image(id) ::Docker::Image.get(id, {}, docker_connection) end |
#local_images(filter = '') ⇒ Object
41 42 43 |
# File 'app/models/foreman_docker/docker.rb', line 41 def local_images(filter = '') ::Docker::Image.all({ 'filter' => filter }, docker_connection) end |
#max_cpu_count ⇒ Object
33 34 35 |
# File 'app/models/foreman_docker/docker.rb', line 33 def max_cpu_count ::Docker.info['NCPU'] || 1 end |
#max_memory ⇒ Object
29 30 31 |
# File 'app/models/foreman_docker/docker.rb', line 29 def max_memory 16 * 1024 * 1024 * 1024 end |
#provided_attributes ⇒ Object
25 26 27 |
# File 'app/models/foreman_docker/docker.rb', line 25 def provided_attributes super.merge(:mac => :mac) end |
#provider_friendly_name ⇒ Object
76 77 78 |
# File 'app/models/foreman_docker/docker.rb', line 76 def provider_friendly_name 'Docker' end |
#search(term = '') ⇒ Object
72 73 74 |
# File 'app/models/foreman_docker/docker.rb', line 72 def search(term = '') client.images.image_search(:term => term) end |
#supports_update? ⇒ Boolean
21 22 23 |
# File 'app/models/foreman_docker/docker.rb', line 21 def supports_update? false end |
#tags(image_name) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/models/foreman_docker/docker.rb', line 60 def (image_name) if exist?(image_name) (image(image_name)) else # If image is not found in the compute resource, get the tags from the Hub hub_api_url = "https://index.docker.io/v1/repositories/#{image_name}/tags" JSON.parse(URI.parse(hub_api_url).read).map do |tag| tag['name'] end end end |
#tags_for_local_image(image) ⇒ Object
45 46 47 48 49 50 |
# File 'app/models/foreman_docker/docker.rb', line 45 def (image) image.info['RepoTags'].map do |image_tag| _, tag = image_tag.split(':') tag end end |
#test_connection(options = {}) ⇒ Object
118 119 120 121 122 123 124 125 126 |
# File 'app/models/foreman_docker/docker.rb', line 118 def test_connection( = {}) super api_version credentials.empty? ? true : authenticate! # This should only rescue Fog::Errors, but Fog returns all kinds of errors... rescue => e errors[:base] << e. false end |
#vm_instance_defaults ⇒ Object
95 96 97 98 |
# File 'app/models/foreman_docker/docker.rb', line 95 def vm_instance_defaults ActiveSupport::HashWithIndifferentAccess.new('name' => "foreman_#{Time.now.to_i}", 'Cmd' => ['/bin/bash']) end |