foreman_docker 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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"