foreman_docker 1.4.1 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0281f21fc99f53f8f25eb6ff797e5679ba9486b
4
- data.tar.gz: 5444b8d765abd9a9293fbf22cf7e08c7da951643
3
+ metadata.gz: 3b3ac12c5dafea1291f34a213907a4ccf7393f88
4
+ data.tar.gz: b90f1bece1343dab61b41b40d2f96e48aea61ccc
5
5
  SHA512:
6
- metadata.gz: 56e3a1b4b644a6aa7a8c14df0ded0f23ca9ab74f1d4bc0c6fa209f632c68a358d0ce73d06df0a6f9bf971deedac8c9b315aa3cd7f1f0a403aeab88fef86a255b
7
- data.tar.gz: 00cd84d57c7c4180cbca74fa729f2136e48e24e72aa97711b6d94b1bc4804096f89f81e3bf0cc3ad1c3dac76310a05688a9b09e80f02f27dcea01c1b6ce4c490
6
+ metadata.gz: 77e84e4899f3fff9d53e71d0c11b20fde50b824abfdd7691a5ffc44dd6c85f7798c808cf2675bfe434de5adc6a13438c4679e334a4742deb26bb9a4a402f3b38
7
+ data.tar.gz: 98f5a41476938823d8a3fd24f8aea148dfb96de47b471d27cbca2dfd7c36c9f5b696c88bb0a67ef23fdb5ec1030d7454a5ebe0a9aec7be3a044009d0c15d807a
@@ -0,0 +1,39 @@
1
+ AllCops:
2
+ RunRailsCops: true # always run the rails cops
3
+
4
+ # Don't enforce documentation
5
+ Style/Documentation:
6
+ Enabled: false
7
+
8
+ # Need to support ruby 1.8
9
+ Style/HashSyntax:
10
+ EnforcedStyle: hash_rockets
11
+
12
+ # Force before_filter until upgrade to Rails 4
13
+ Rails/ActionFilter:
14
+ EnforcedStyle: filter
15
+
16
+ Metrics/LineLength:
17
+ Max: 100
18
+
19
+ Metrics/MethodLength:
20
+ Max: 20
21
+
22
+ StringLiterals:
23
+ Enabled: false
24
+
25
+ Metrics/ClassLength:
26
+ Max: 200
27
+
28
+ Metrics/AbcSize:
29
+ Enabled: false # should we turn this on?
30
+
31
+ Style/MethodCalledOnDoEndBlock:
32
+ Enabled: true
33
+
34
+ Style/DotPosition:
35
+ EnforcedStyle: 'leading'
36
+
37
+ Rails/Date:
38
+ Exclude:
39
+ - foreman_docker.gemspec
data/README.md CHANGED
@@ -34,8 +34,6 @@
34
34
  * Events stream ([#8037](http://projects.theforeman.org/issues/8037))
35
35
  * Tight integration between Docker hosts [Atomic](http://www.projectatomic.io/) and [CoreOS](http://coreos.com/) and containers ([#7653](http://projects.theforeman.org/issues/7653), [#7652](http://projects.theforeman.org/issues/7652))
36
36
  * Quickstart images - pre-supplied images and configuration ([#7869](http://projects.theforeman.org/issues/7869))
37
- * Environment variables support ([#8226](http://projects.theforeman.org/issues/8226))
38
- * Support to expose ports during creation or at runtime ([#7864](http://projects.theforeman.org/issues/7864))
39
37
  * Links to other containers ([#7866](http://projects.theforeman.org/issues/7866))
40
38
  * API ([#7874](http://projects.theforeman.org/issues/7874))
41
39
  * [Hammer CLI](http://github.com/theforeman/hammer-cli-foreman) support ([#8227](http://projects.theforeman.org/issues/8227))
@@ -20,7 +20,7 @@ module Api
20
20
  if params[:compute_resource_id].present?
21
21
  scoped = Container.where(:compute_resource_id => params[:compute_resource_id])
22
22
  else
23
- scoped = Container.scoped
23
+ scoped = Container.where(nil)
24
24
  end
25
25
  @containers = scoped.search_for(params[:search], :order => params[:order])
26
26
  .paginate(:page => params[:page])
@@ -108,7 +108,7 @@ module Api
108
108
  render :json => { :logs => Docker::Container.get(@container.uuid)
109
109
  .logs(:stdout => (params[:stdout] || true),
110
110
  :stderr => (params[:stderr] || false),
111
- :tail => (params[:tail] || 100)) }
111
+ :tail => (params[:tail] || 100)) }
112
112
  end
113
113
 
114
114
  api :PUT, '/containers/:id/power', N_('Run power operation on a container')
@@ -41,8 +41,8 @@ module Containers
41
41
 
42
42
  def set_form
43
43
  instance_variable_set(
44
- "@docker_container_wizard_states_#{step}",
45
- @state.send(:"#{step}") || @state.send(:"build_#{step}"))
44
+ "@docker_container_wizard_states_#{step}",
45
+ @state.send(:"#{step}") || @state.send(:"build_#{step}"))
46
46
  end
47
47
 
48
48
  def create_container(start = true)
@@ -58,9 +58,9 @@ module Containers
58
58
  else
59
59
  @docker_container_wizard_states_environment = @state.environment
60
60
  process_error(
61
- :error_msg => service.errors.full_messages.join(','),
62
- :object => @state.environment,
63
- :render => 'environment')
61
+ :error_msg => service.errors.full_messages.join(','),
62
+ :object => @state.environment,
63
+ :render => 'environment')
64
64
  end
65
65
  end
66
66
  end
@@ -96,7 +96,7 @@ class ContainersController < ::ApplicationController
96
96
  def container_deletion
97
97
  # Unmanaged container - only present in Compute Resource
98
98
  if params[:compute_resource_id].present?
99
- @deleted_identifier = params[:id]
99
+ @deleted_identifier = params[:id]
100
100
  destroy_compute_resource_vm(params[:compute_resource_id], params[:id])
101
101
  else # Managed container
102
102
  find_container
@@ -1,18 +1,30 @@
1
1
  class ImageSearchController < ::ApplicationController
2
2
  before_filter :find_resource
3
3
 
4
+ # this is incredibly odd. for some reason, rails sees the
5
+ # requests ImageSearchControllerTest makes as requests from another host
6
+ # thus, violating CSRF.
7
+ protect_from_forgery :only => :nothing if Rails.env.test?
8
+
4
9
  def auto_complete_repository_name
5
10
  catch_network_errors do
6
- render :text => (use_hub? ? hub_image_exists?(params[:search]) :
7
- registry_image_exists?(params[:search])).to_s
11
+ text = if use_hub?
12
+ hub_image_exists?(params[:search])
13
+ else
14
+ registry_image_exists?(params[:search])
15
+ end
16
+ render :text => text.to_s
8
17
  end
9
18
  end
10
19
 
11
20
  def auto_complete_image_tag
12
21
  catch_network_errors do
13
22
  # This is the format jQuery UI autocomplete expects
14
- tags = use_hub? ? hub_auto_complete_image_tags(params[:search]) :
15
- registry_auto_complete_image_tags(params[:search])
23
+ tags = if use_hub?
24
+ hub_auto_complete_image_tags(params[:search])
25
+ else
26
+ registry_auto_complete_image_tags(params[:search])
27
+ end
16
28
  respond_to do |format|
17
29
  format.js do
18
30
  tags.map! { |tag| { :label => CGI.escapeHTML(tag), :value => CGI.escapeHTML(tag) } }
@@ -24,8 +36,12 @@ class ImageSearchController < ::ApplicationController
24
36
 
25
37
  def search_repository
26
38
  catch_network_errors do
27
- repositories = use_hub? ? hub_search_image(params[:search]) :
28
- registry_search_image(params[:search])
39
+ repositories = if use_hub?
40
+ hub_search_image(params[:search])
41
+ else
42
+ registry_search_image(params[:search])
43
+ end
44
+
29
45
  respond_to do |format|
30
46
  format.js do
31
47
  render :partial => 'repository_search_results',
@@ -75,8 +91,12 @@ class ImageSearchController < ::ApplicationController
75
91
  result = ::Service::RegistryApi.new(:url => @registry.url,
76
92
  :user => @registry.username,
77
93
  :password => @registry.password).search(term)
78
- registry_name = term.split('/').size > 1 ? term :
79
- 'library/' + term
94
+ registry_name = if term.split('/').size > 1
95
+ term
96
+ else
97
+ "library/#{term}"
98
+ end
99
+
80
100
  result['results'].any? { |r| r['name'] == registry_name }
81
101
  end
82
102
 
@@ -30,18 +30,18 @@ module ContainersHelper
30
30
  def container_title_actions(container)
31
31
  @compute_resource = container.compute_resource
32
32
  title_actions(
33
- button_group(
34
- link_to(_('Commit'), '#commit-modal', :'data-toggle' => 'modal')
35
- ),
36
- button_group(container_power_action(container.in_fog)),
37
- button_group(
38
- display_delete_if_authorized(
39
- hash_for_container_path(:id => container.id)
40
- .merge(:auth_object => container,
41
- :auth_action => 'destroy',
42
- :authorizer => authorizer),
43
- :confirm => _("Delete %s?") % container.name)
44
- )
33
+ button_group(
34
+ link_to(_('Commit'), '#commit-modal', :'data-toggle' => 'modal')
35
+ ),
36
+ button_group(container_power_action(container.in_fog)),
37
+ button_group(
38
+ display_delete_if_authorized(
39
+ hash_for_container_path(:id => container.id)
40
+ .merge(:auth_object => container,
41
+ :auth_action => 'destroy',
42
+ :authorizer => authorizer),
43
+ :confirm => _("Delete %s?") % container.name)
44
+ )
45
45
  )
46
46
  end
47
47
 
@@ -69,7 +69,7 @@ module ContainersHelper
69
69
 
70
70
  def power_on_off_message(vm)
71
71
  _("Are you sure you want to power %{act} %{vm}?") % { :act => action_string(vm).downcase.strip,
72
- :vm => vm }
72
+ :vm => vm }
73
73
  end
74
74
 
75
75
  def auto_complete_docker_search(name, val, options = {})
@@ -77,13 +77,6 @@ module ContainersHelper
77
77
  text_field_tag(name, val, options)
78
78
  end
79
79
 
80
- # Compatibility fixes - to be removed once 1.7 compatibility is no longer required
81
- if SETTINGS[:version].to_s.to_f <= 1.7
82
- def trunc_with_tooltip(text, length = 32)
83
- trunc(text, length)
84
- end
85
- end
86
-
87
80
  def processes(container)
88
81
  ForemanDocker::Docker.get_container(container).top
89
82
  end
@@ -2,6 +2,9 @@ module DockerContainerWizardStates
2
2
  class Environment < ActiveRecord::Base
3
3
  self.table_name_prefix = 'docker_container_wizard_states_'
4
4
  belongs_to :wizard_state, :class_name => DockerContainerWizardState
5
+
6
+ attr_accessible :tty, :docker_container_wizard_state_id,
7
+ :attach_stdin, :attach_stdout, :attach_stderr
5
8
  # Fix me:
6
9
  # Validations are off on this association as there's a bug in ::Parameter
7
10
  # that forces validation of reference_id. This will fail on new records as
@@ -2,6 +2,8 @@ module DockerContainerWizardStates
2
2
  class Preliminary < ActiveRecord::Base
3
3
  include Taxonomix
4
4
 
5
+ attr_accessible :wizard_state, :compute_resource_id
6
+
5
7
  self.table_name_prefix = 'docker_container_wizard_states_'
6
8
  belongs_to :wizard_state, :class_name => DockerContainerWizardState,
7
9
  :foreign_key => :docker_container_wizard_state_id
@@ -10,14 +12,14 @@ module DockerContainerWizardStates
10
12
 
11
13
  def used_location_ids
12
14
  Location.joins(:taxable_taxonomies).where(
13
- 'taxable_taxonomies.taxable_type' => 'DockerContainerWizardStates::Preliminary',
14
- 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
15
+ 'taxable_taxonomies.taxable_type' => 'DockerContainerWizardStates::Preliminary',
16
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
15
17
  end
16
18
 
17
19
  def used_organization_ids
18
20
  Organization.joins(:taxable_taxonomies).where(
19
- 'taxable_taxonomies.taxable_type' => 'DockerContainerWizardStates::Preliminary',
20
- 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
21
+ 'taxable_taxonomies.taxable_type' => 'DockerContainerWizardStates::Preliminary',
22
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
21
23
  end
22
24
  end
23
25
  end
@@ -3,9 +3,13 @@ class DockerRegistry < ActiveRecord::Base
3
3
  include Taxonomix
4
4
  include Encryptable
5
5
 
6
+ attr_accessible :name, :url, :username, :password, :locations, :organizations
7
+
6
8
  has_many :containers, :foreign_key => "registry_id", :dependent => :destroy
7
9
  encrypts :password
8
10
 
11
+ attr_accessible :name, :url, :username, :password, :locations, :organizations
12
+
9
13
  validates_lengths_from_database
10
14
  validates :name, :presence => true, :uniqueness => true
11
15
  validates :url, :presence => true, :uniqueness => true
@@ -15,14 +19,14 @@ class DockerRegistry < ActiveRecord::Base
15
19
 
16
20
  def used_location_ids
17
21
  Location.joins(:taxable_taxonomies).where(
18
- 'taxable_taxonomies.taxable_type' => 'DockerRegistry',
19
- 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
22
+ 'taxable_taxonomies.taxable_type' => 'DockerRegistry',
23
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
20
24
  end
21
25
 
22
26
  def used_organization_ids
23
27
  Organization.joins(:taxable_taxonomies).where(
24
- 'taxable_taxonomies.taxable_type' => 'DockerRegistry',
25
- 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
28
+ 'taxable_taxonomies.taxable_type' => 'DockerRegistry',
29
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
26
30
  end
27
31
 
28
32
  def prefixed_url(image_name)
@@ -1,4 +1,5 @@
1
1
  class ExposedPort < Parameter
2
+ attr_accessible :priority
2
3
  # The Parameter class from which ExposedPort class inherits,validates for the
3
4
  # presence of an associated domain, operating system, host or host group. We
4
5
  # will have to reset those validations for the ExposedPort class as they do
@@ -2,6 +2,8 @@ require 'resolv'
2
2
 
3
3
  module ForemanDocker
4
4
  class Dns < Parameter
5
+ attr_accessible :priority
6
+
5
7
  # The Parameter class from which this Dns class inherits,validates for the
6
8
  # presence of an associated domain, operating system, host or host group.
7
9
  # We will have to reset those validations for the Dns class as they do not
@@ -2,6 +2,8 @@ require 'uri'
2
2
 
3
3
  module ForemanDocker
4
4
  class Docker < ::ComputeResource
5
+ attr_accessible :email
6
+
5
7
  validates :url, :format => { :with => URI.regexp }
6
8
 
7
9
  def self.model_name
@@ -27,7 +27,7 @@ module Service
27
27
  container = Container.new(wizard_state.container_attributes) do |r|
28
28
  # eagerly load environment variables and exposed ports configuration
29
29
  state = DockerContainerWizardState.includes(
30
- :environment => [:environment_variables, :exposed_ports]).find(wizard_state.id)
30
+ :environment => [:environment_variables, :exposed_ports]).find(wizard_state.id)
31
31
 
32
32
  load_environment_variables(state, r)
33
33
  load_exposed_ports(state, r)
@@ -66,7 +66,7 @@ module Service
66
66
 
67
67
  def destroy_wizard_state(wizard_state)
68
68
  wizard_state.destroy
69
- DockerContainerWizardState.destroy_all(["updated_at < ?", (Time.now - 24.hours)])
69
+ DockerContainerWizardState.destroy_all(["updated_at < ?", (Time.now.utc - 24.hours)])
70
70
  end
71
71
 
72
72
  def load_environment_variables(state, r)
@@ -2,5 +2,5 @@ object @registry
2
2
 
3
3
  extends 'api/v2/registries/base'
4
4
 
5
- attributes :url, :description, :created_at, :updated_at
5
+ attributes :url, :description, :created_at, :updated_at, :username
6
6
 
@@ -15,7 +15,7 @@
15
15
  <tbody>
16
16
  <% containers.each do |container| %>
17
17
  <tr>
18
- <td class="ellipsis text-center"><%= link_to_container(container, resource) %></td>
18
+ <td class="ellipsis text-center" id="<%= container.name[1..-1] %>"><%= link_to_container(container, resource) %></td>
19
19
  <td class="hidden-tablet hidden-xs text-center">
20
20
  <span <%= vm_power_class(container.ready?) %>><%= vm_state(container) %></span></td>
21
21
  <td class="hidden-tablet hidden-xs text-center"><%= trunc_with_tooltip(container.image_friendly_name) %></td>
@@ -7,7 +7,7 @@ class CreateDockerImages < ActiveRecord::Migration
7
7
  end
8
8
 
9
9
  create_table :docker_tags do |t|
10
- t.string :tag
10
+ t.string :tag
11
11
  t.references :docker_image, :null => false
12
12
  t.timestamps
13
13
  end
@@ -3,13 +3,11 @@ class CreateDockerRegistries < ActiveRecord::Migration
3
3
  create_table :docker_registries do |t|
4
4
  t.string :url
5
5
  t.string :name
6
- t.integer :id
7
6
  t.string :description
8
7
  t.timestamps
9
8
  end
10
9
 
11
10
  create_table :docker_image_docker_registries do |t|
12
- t.integer :id
13
11
  t.integer :docker_registry_id
14
12
  t.integer :docker_image_id
15
13
  end
@@ -44,7 +44,7 @@ class RemoveDockerTables < ActiveRecord::Migration
44
44
  t.timestamps
45
45
  end
46
46
  create_table :docker_tags do |t|
47
- t.string :tag
47
+ t.string :tag
48
48
  t.references :docker_image, :null => false
49
49
  t.timestamps
50
50
  end
@@ -1,9 +1,7 @@
1
1
  class CreateWizardStates < ActiveRecord::Migration
2
2
  # rubocop:disable Metrics/MethodLength
3
3
  def change
4
- create_table :docker_container_wizard_states do |t|
5
- t.timestamps
6
- end
4
+ create_table :docker_container_wizard_states, &:timestamps
7
5
 
8
6
  create_table :docker_container_wizard_states_preliminaries do |t|
9
7
  t.integer :compute_resource_id, :null => false
@@ -11,7 +9,7 @@ class CreateWizardStates < ActiveRecord::Migration
11
9
  t.timestamps
12
10
  end
13
11
 
14
- create_table :docker_container_wizard_states_images do |t|
12
+ create_table :docker_container_wizard_states_images do |t|
15
13
  t.integer :registry_id
16
14
  t.string :repository_name, :null => false
17
15
  t.string :tag, :null => false
@@ -19,7 +17,7 @@ class CreateWizardStates < ActiveRecord::Migration
19
17
  t.timestamps
20
18
  end
21
19
 
22
- create_table :docker_container_wizard_states_configurations do |t|
20
+ create_table :docker_container_wizard_states_configurations do |t|
23
21
  t.string :name
24
22
  t.string :command
25
23
  t.string :entrypoint
@@ -14,7 +14,9 @@ module ForemanDocker
14
14
  config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
15
15
 
16
16
  initializer 'foreman_docker.load_app_instance_data' do |app|
17
- app.config.paths['db/migrate'] += ForemanDocker::Engine.paths['db/migrate'].existent
17
+ ForemanDocker::Engine.paths['db/migrate'].existent.each do |path|
18
+ app.config.paths['db/migrate'] << path
19
+ end
18
20
  end
19
21
 
20
22
  initializer "foreman_docker.assets.precompile" do |app|
@@ -39,7 +41,7 @@ module ForemanDocker
39
41
 
40
42
  initializer 'foreman_docker.register_plugin', :after => :finisher_hook do
41
43
  Foreman::Plugin.register :foreman_docker do
42
- requires_foreman '> 1.4'
44
+ requires_foreman '>= 1.11'
43
45
  compute_resource ForemanDocker::Docker
44
46
 
45
47
  sub_menu :top_menu, :containers_menu, :caption => N_('Containers'),
@@ -1,3 +1,3 @@
1
1
  module ForemanDocker
2
- VERSION = '1.4.1'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -34,7 +34,7 @@ module Api
34
34
  assert_equal ActiveSupport::JSON.decode(response.body)['logs'], fake_container.logs
35
35
  end
36
36
 
37
- test 'show returns information about container' do
37
+ test 'show returns information about container' do
38
38
  get :show, :id => @container.id
39
39
  assert_response :success
40
40
  assert_equal ActiveSupport::JSON.decode(response.body)['name'], 'foo'
@@ -1,12 +1,12 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class ContainerStepsTest < ActionDispatch::IntegrationTest
4
- test 'shows a link to a new compute resource if none is available' do
4
+ test 'shows a link to a new compute resource if none is available' do
5
5
  visit new_container_path
6
6
  assert has_selector?("div.alert", :text => 'Please add a new one')
7
7
  end
8
8
 
9
- test 'shows taxonomies tabs' do
9
+ test 'shows taxonomies tabs' do
10
10
  visit new_container_path
11
11
  assert has_selector?("a", :text => 'Locations') if SETTINGS[:locations_enabled]
12
12
  assert has_selector?("a", :text => 'Organizations') if SETTINGS[:organizations_enabled]
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class ContainerIntegrationTest < ActionDispatch::IntegrationTest
4
- test 'redirects to a new compute resource if none is available' do
4
+ test 'redirects to a new compute resource if none is available' do
5
5
  visit containers_path
6
6
  assert_equal current_path, new_compute_resource_path
7
7
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_plugin_helper'
2
2
 
3
- class ContainersServiceTest < ActiveSupport::TestCase
3
+ class ContainersServiceTest < ActiveSupport::TestCase
4
4
  setup do
5
5
  @state = DockerContainerWizardState.create! do |s|
6
6
  s.build_preliminary(:compute_resource_id => FactoryGirl.create(:docker_cr).id,
@@ -1,6 +1,6 @@
1
1
  require 'test_plugin_helper'
2
2
 
3
- class RegistryApiTest < ActiveSupport::TestCase
3
+ class RegistryApiTest < ActiveSupport::TestCase
4
4
  test "initialize handles username password info correctly" do
5
5
  uname = "tardis"
6
6
  password = "boo"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato, Amos Benari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-18 00:00:00.000000000 Z
11
+ date: 2015-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -45,6 +45,7 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - ".rubocop.yml"
48
49
  - LICENSE
49
50
  - README.md
50
51
  - Rakefile
@@ -187,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
188
  version: '0'
188
189
  requirements: []
189
190
  rubyforge_project:
190
- rubygems_version: 2.4.5
191
+ rubygems_version: 2.2.2
191
192
  signing_key:
192
193
  specification_version: 4
193
194
  summary: Provision and manage Docker containers and images from Foreman
@@ -208,3 +209,4 @@ test_files:
208
209
  - test/test_plugin_helper.rb
209
210
  - test/integration/container_steps_test.rb
210
211
  - test/integration/container_test.rb
212
+ - ".rubocop.yml"