foreman_acd 0.10.0 → 0.12.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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -19
  3. data/app/controllers/foreman_acd/ansible_playbooks_controller.rb +3 -2
  4. data/app/controllers/foreman_acd/api/v2/ansible_playbooks_controller.rb +2 -1
  5. data/app/controllers/foreman_acd/api/v2/app_definitions_controller.rb +2 -1
  6. data/app/controllers/foreman_acd/api/v2/app_instances_controller.rb +2 -1
  7. data/app/controllers/foreman_acd/app_definitions_controller.rb +4 -6
  8. data/app/controllers/foreman_acd/app_instances_controller.rb +9 -8
  9. data/app/controllers/foreman_acd/concerns/app_instance_mixins.rb +7 -7
  10. data/app/controllers/ui_acd_controller.rb +4 -5
  11. data/app/lib/actions/foreman_acd/deploy_all_hosts.rb +2 -1
  12. data/app/lib/actions/foreman_acd/run_configurator.rb +2 -1
  13. data/app/models/concerns/foreman_acd/host_managed_extensions.rb +6 -6
  14. data/app/models/foreman_acd/acd_provider.rb +6 -3
  15. data/app/models/foreman_acd/ansible_playbook.rb +1 -1
  16. data/app/models/foreman_acd/app_instance.rb +7 -8
  17. data/app/services/foreman_acd/app_configurator.rb +3 -1
  18. data/app/services/foreman_acd/app_deployer.rb +1 -1
  19. data/app/services/foreman_acd/inventory_creator.rb +1 -1
  20. data/config/routes.rb +5 -5
  21. data/db/migrate/20210503122809_add_git_url_to_ansible_playbooks.rb +1 -1
  22. data/lib/foreman_acd/engine.rb +5 -11
  23. data/lib/foreman_acd/plugin.rb +67 -67
  24. data/lib/foreman_acd/version.rb +1 -1
  25. data/lib/foreman_acd.rb +2 -2
  26. data/lib/tasks/foreman_acd_tasks.rake +6 -13
  27. data/test/controllers/ansible_playbooks_controller_test.rb +2 -2
  28. data/test/controllers/app_definitions_controller_test.rb +2 -2
  29. data/test/controllers/app_instances_controller_test.rb +2 -2
  30. data/test/controllers/ui_acd_controller_test.rb +1 -1
  31. data/test/models/acd_provider_test.rb +2 -2
  32. data/test/models/concerns/host_extensions_test.rb +4 -4
  33. metadata +17 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e8c8e8614fcbdfae411b4bfacf225b67fca2d92563615d099e725bc1b4e5173
4
- data.tar.gz: 174c0194da550ec6a17fddaa8aa010303f43c75e7358dce359195a5bb9d6077d
3
+ metadata.gz: 60909ff875d630caeef92444ab88930dddc19cd77dd4efa9fd7ea5a4ec83051c
4
+ data.tar.gz: 3df06d54fe0037ea0fdfbb7009194c1ebe537191d8bc2617e716bdd924a81425
5
5
  SHA512:
6
- metadata.gz: 242a5342f85b5d96d358a19be186f91abaa39cf18aacc3f599ee7e891e101266e7681fb7ac4bb6264800a1fdcbb7b9db87bbb13741875cdb8ebbe8c1592d474c
7
- data.tar.gz: aeea5eae1cd62e0668fdc166066840f4280ff3ee0db3e9affb9b505863dd61aeecd4d3328dd4212d2d731ae046f01185387c3b0b333a7f13f2a08630a84d9ed4
6
+ metadata.gz: 7c0a1d085fd5d14737a1c37c12743dae3f4e704f01d7b4c2834879635979e4c2d11784b056f854b018405debe488b056a6659205bd647e6e4590df7f3539e334
7
+ data.tar.gz: dbb30190d5976d84ef76571596397a1811169cd987c10737bd2dbe02b696c6218adb7c2ba537d9ecbaab32cbecf23c28265556f51d14631917addf84411952ea
data/README.md CHANGED
@@ -59,26 +59,12 @@ See [Deploying Hosts using Application Centric Deployment](https://docs.theforem
59
59
 
60
60
  ## Installation
61
61
 
62
- See the [installation](https://theforeman.org/plugins/#2.Installation) chapter of the Foreman plugins documentation on how to install Foreman plugins.
63
-
64
- ### TL;DR:
65
-
66
- yum install tfm-rubygem-foreman_acd
67
- foreman-maintain service restart
68
-
69
- In some cases, you need to manually run
70
-
71
- foreman-rake db:migrate
72
- foreman-rake db:seed
62
+ Check out the [Foreman documentation](https://docs.theforeman.org/nightly/Deploying_Hosts_AppCentric/index-katello.html#Installing_ACD_on_Server_application_centric_deployment) on how to install the foreman_acd plugin.
73
63
 
74
64
  ### Smart Proxy Installation
75
65
 
76
- You will need to install [Smart Proxy ACD](https://github.com/ATIX-AG/smart_proxy_acd), too.
77
-
78
- yum install tfm-rubygem-smart_proxy_acd tfm-rubygem-smart_proxy_acd_core
79
- foreman-maintain service restart
80
-
81
- You need to refresh the smart proxy features in *Infrastructure > Smart Proxies > Your Smart-Proxy > Actions > Refresh* after the installation of the Smart Proxy ACD components.
66
+ You need to install [Smart Proxy ACD](https://github.com/ATIX-AG/smart_proxy_acd), too.
67
+ Check out the [Foreman documentation](https://docs.theforeman.org/nightly/Deploying_Hosts_AppCentric/index-katello.html#Installing_ACD_on_Smart_Proxy_application_centric_deployment) on how to install the smart_proxy_acd plugin.
82
68
 
83
69
  ### Tips
84
70
 
@@ -98,7 +84,7 @@ Store it in `/var/lib/foreman/foreman_acd/ansible-playbooks/` so that SELinux is
98
84
  ### Application Definition (for Admins)
99
85
 
100
86
  * Create an Application Definition via *Applications > Application Definitions*.
101
- * Select the Ansible Playbook you want to use.
87
+ * Select the Ansible Playbook you want to use.
102
88
  * Add new services and specify the host group you want to use.
103
89
  * Specify any values a user will be allowed to overwrite.
104
90
  You may also set a default value.
@@ -128,7 +114,7 @@ Fork and send a Pull Request. Thank you.
128
114
 
129
115
  ## Copyright
130
116
 
131
- Copyright (c) 2021 ATIX AG
117
+ Copyright (c) 2024 ATIX AG
132
118
 
133
119
  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
134
120
 
@@ -32,7 +32,8 @@ module ForemanAcd
32
32
  end
33
33
  end
34
34
 
35
- def edit; end
35
+ def edit
36
+ end
36
37
 
37
38
  def update
38
39
  # Move synced repo to new path if ansible_playbook name is changed
@@ -80,7 +81,7 @@ module ForemanAcd
80
81
  if sync_params[:git_commit].empty?
81
82
  if ForemanAcd.proxy_setting.present?
82
83
  err_msg = _('Please set the Git Branch/Tag/Commit. This setting is necessary if a HTTP proxy is used!')
83
- raise StandardError.new err_msg
84
+ raise StandardError, err_msg
84
85
  else
85
86
  commit = Git.ls_remote(sync_params[:git_url])['head'][:sha]
86
87
  end
@@ -14,7 +14,8 @@ module ForemanAcd
14
14
 
15
15
  api :GET, '/ansible_playbooks/:id', N_('Show ansible playbook')
16
16
  param :id, :identifier, :required => true
17
- def show; end
17
+ def show
18
+ end
18
19
 
19
20
  api :GET, '/ansible_playbooks', N_('List ansible playbooks')
20
21
  param_group :search_and_pagination, ::Api::V2::BaseController
@@ -11,7 +11,8 @@ module ForemanAcd
11
11
 
12
12
  api :GET, '/app_definitions/:id', N_('Show application definition')
13
13
  param :id, :identifier, :required => true
14
- def show; end
14
+ def show
15
+ end
15
16
 
16
17
  api :GET, '/app_definitions', N_('List application definitions')
17
18
  param_group :search_and_pagination, ::Api::V2::BaseController
@@ -13,7 +13,8 @@ module ForemanAcd
13
13
  param :id, :identifier, :required => true
14
14
  param :organization_id, :identifier, :required => true
15
15
  param :location_id, :identifier, :required => true
16
- def show; end
16
+ def show
17
+ end
17
18
 
18
19
  api :GET, '/app_instances', N_('List application instances')
19
20
  param :organization_id, :identifier, :required => true
@@ -37,14 +37,13 @@ module ForemanAcd
37
37
  process_error
38
38
  end
39
39
  rescue StandardError, ValidationError => e
40
- if params[:foreman_acd_app_definition_import].present?
41
- AnsiblePlaybook.find(params[:foreman_acd_app_definition][:acd_ansible_playbook_id]).delete if params[:foreman_acd_app_definition][:acd_ansible_playbook_id].present?
42
- end
40
+ AnsiblePlaybook.find(params[:foreman_acd_app_definition][:acd_ansible_playbook_id]).delete if params[:foreman_acd_app_definition_import].present? && params[:foreman_acd_app_definition][:acd_ansible_playbook_id].present?
43
41
  redirect_to new_app_definition_path, :flash => { :error => _(e.message) }
44
42
  end
45
43
  end
46
44
 
47
- def edit; end
45
+ def edit
46
+ end
48
47
 
49
48
  def update
50
49
  if @app_definition.update(app_definition_params)
@@ -132,8 +131,7 @@ module ForemanAcd
132
131
  FileUtils.cp_r "#{dir}/#{ansible_playbook['path']}/.", dir_path
133
132
  ansible_playbook['path'] = dir_path
134
133
  ansible_playbook['name'] = File.basename(dir_path)
135
- new_playbook = AnsiblePlaybook.create(ansible_playbook)
136
- new_playbook
134
+ AnsiblePlaybook.create(ansible_playbook)
137
135
  rescue StandardError => e
138
136
  logger.info("Error while creating AnsiblePlaybook: #{e}")
139
137
  end
@@ -38,7 +38,8 @@ module ForemanAcd
38
38
  end
39
39
  end
40
40
 
41
- def edit; end
41
+ def edit
42
+ end
42
43
 
43
44
  def update
44
45
  if @app_instance.update(app_instance_params)
@@ -110,7 +111,7 @@ module ForemanAcd
110
111
 
111
112
  @app_instance.foreman_hosts.where(:hostname => h['hostname']).
112
113
  update(:service => h['service'], :description => h['description'],
113
- :foremanParameters => JSON.dump(h['foremanParameters']), :ansibleParameters => JSON.dump(h['ansibleParameters']))
114
+ :foremanParameters => JSON.dump(h['foremanParameters']), :ansibleParameters => JSON.dump(h['ansibleParameters']))
114
115
 
115
116
  updated_host = @app_instance.foreman_hosts.find_by(:hostname => h['hostname'])
116
117
 
@@ -118,11 +119,11 @@ module ForemanAcd
118
119
  session[:remember_hosts] << updated_host.id if updated_host.updated_at != old_host.updated_at
119
120
  else
120
121
  @app_instance.foreman_hosts.create(:hostname => h['hostname'],
121
- :service => h['service'],
122
- :description => h['description'],
123
- :is_existing_host => h['isExistingHost'],
124
- :foremanParameters => JSON.dump(h['foremanParameters']),
125
- :ansibleParameters => JSON.dump(h['ansibleParameters']))
122
+ :service => h['service'],
123
+ :description => h['description'],
124
+ :is_existing_host => h['isExistingHost'],
125
+ :foremanParameters => JSON.dump(h['foremanParameters']),
126
+ :ansibleParameters => JSON.dump(h['ansibleParameters']))
126
127
  # Store new hosts for safe deploy
127
128
  session[:remember_hosts] << @app_instance.foreman_hosts.find_by(:hostname => h['hostname']).id
128
129
  end
@@ -143,7 +144,7 @@ module ForemanAcd
143
144
  :description => h.description,
144
145
  :isExistingHost => h.is_existing_host,
145
146
  :foremanParameters => JSON.parse(h.foremanParameters),
146
- :ansibleParameters => JSON.parse(h.ansibleParameters)
147
+ :ansibleParameters => JSON.parse(h.ansibleParameters),
147
148
  }
148
149
  end
149
150
  hosts_data
@@ -15,17 +15,17 @@ module ForemanAcd
15
15
  :name => foreman_host.hostname,
16
16
  :build => nil,
17
17
  :hostUrl => nil,
18
- :progress_report => foreman_host.last_progress_report.empty? ? [] : JSON.parse(foreman_host.last_progress_report)
18
+ :progress_report => foreman_host.last_progress_report.empty? ? [] : JSON.parse(foreman_host.last_progress_report),
19
19
  }
20
20
 
21
21
  if foreman_host.host.present?
22
22
  a_host.update({
23
- :id => foreman_host.host.id,
24
- :build => foreman_host.host.build,
25
- :hostUrl => host_path(foreman_host.host),
26
- :isExistingHost => foreman_host.is_existing_host,
27
- :powerStatusUrl => power_api_host_path(foreman_host.host)
28
- })
23
+ :id => foreman_host.host.id,
24
+ :build => foreman_host.host.build,
25
+ :hostUrl => host_path(foreman_host.host),
26
+ :isExistingHost => foreman_host.is_existing_host,
27
+ :powerStatusUrl => power_api_host_path(foreman_host.host),
28
+ })
29
29
  end
30
30
  report_data << OpenStruct.new(a_host)
31
31
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Controller to create JSON data to be used in react app
4
- class UiAcdController < ::Api::V2::BaseController
4
+ class UIAcdController < ::Api::V2::BaseController
5
5
  include ::ForemanAcd::Concerns::AppInstanceMixins
6
6
 
7
7
  def app
@@ -62,7 +62,7 @@ class UiAcdController < ::Api::V2::BaseController
62
62
  report_data = {
63
63
  :hosts => collect_host_report_data(app_instance),
64
64
  :deploymentState => app_instance.deployment_state.to_s,
65
- :initialConfigureState => app_instance.initial_configure_state.to_s
65
+ :initialConfigureState => app_instance.initial_configure_state.to_s,
66
66
  }
67
67
  report_data['initialConfigureJobUrl'] = job_invocation_path(app_instance.initial_configure_job) unless app_instance.initial_configure_job.nil?
68
68
 
@@ -71,15 +71,14 @@ class UiAcdController < ::Api::V2::BaseController
71
71
 
72
72
  def hostname_duplicate?(app_def_id, service_id, hostname)
73
73
  app_definition = ForemanAcd::AppDefinition.find(app_def_id)
74
- service_data = JSON.parse(app_definition.services).select { |k| k['id'] == service_id }.first
74
+ service_data = JSON.parse(app_definition.services).find { |k| k['id'] == service_id }
75
75
  domain_name = Hostgroup.find(service_data['hostgroup']).domain.name
76
76
  validation_hostname = "#{hostname}.#{domain_name}"
77
77
 
78
- vdata = OpenStruct.new(
78
+ OpenStruct.new(
79
79
  :hostname => hostname,
80
80
  :fqdn => validation_hostname,
81
81
  :result => Host.find_by(:name => validation_hostname).nil?
82
82
  )
83
- vdata
84
83
  end
85
84
  end
@@ -32,7 +32,8 @@ module Actions
32
32
  end
33
33
  end
34
34
 
35
- def finalize; end
35
+ def finalize
36
+ end
36
37
 
37
38
  def rescue_strategy
38
39
  Dynflow::Action::Rescue::Fail
@@ -31,7 +31,8 @@ module Actions
31
31
  end
32
32
  end
33
33
 
34
- def finalize; end
34
+ def finalize
35
+ end
35
36
 
36
37
  def rescue_strategy
37
38
  Dynflow::Action::Rescue::Fail
@@ -13,12 +13,12 @@ module ForemanAcd
13
13
  has_many :app_instances, :through => :foreman_hosts, :class_name => 'ForemanAcd::AppInstance'
14
14
 
15
15
  scoped_search :relation => :app_instances,
16
- :on => :name,
17
- :rename => :acd_app_instance,
18
- :only_explicit => true,
19
- :complete_value => true,
20
- :operators => ['= '],
21
- :ext_method => :find_by_acd_app_instance_name
16
+ :on => :name,
17
+ :rename => :acd_app_instance,
18
+ :only_explicit => true,
19
+ :complete_value => true,
20
+ :operators => ['= '],
21
+ :ext_method => :find_by_acd_app_instance_name
22
22
  end
23
23
 
24
24
  base.singleton_class.prepend ClassMethods
@@ -20,11 +20,14 @@ module ForemanAcd
20
20
  super(template_invocation, host).merge(:name => host.name)
21
21
  end
22
22
 
23
- def ssh_password(_host); end
23
+ def ssh_password(_host)
24
+ end
24
25
 
25
- def ssh_key_passphrase(_host); end
26
+ def ssh_key_passphrase(_host)
27
+ end
26
28
 
27
- def sudo_password(_host); end
29
+ def sudo_password(_host)
30
+ end
28
31
 
29
32
  # Workaround till infrastructure jobs on proxies are possible. See
30
33
  # configure in services/foreman_acd/app_configurator.rb for more details.
@@ -48,7 +48,7 @@ module ForemanAcd
48
48
  when 'directory' || 'git'
49
49
  File.read(File.join(path, playfile))
50
50
  else
51
- raise NotImplementedError.new "scm_type #{scm_type.inspect} not supported!"
51
+ raise NotImplementedError, "scm_type #{scm_type.inspect} not supported!"
52
52
  end
53
53
  end
54
54
 
@@ -61,14 +61,13 @@ module ForemanAcd
61
61
  return :new if last_deploy_task.nil?
62
62
  return :initiated if !last_deploy_task.nil? && last_deploy_task.ended_at.nil?
63
63
 
64
- state = if all_hosts_deployed?
65
- :finished
66
- elsif last_deploy_task.ended_at? && last_deploy_task.result != 'success'
67
- :failed
68
- else
69
- :pending
70
- end
71
- state
64
+ if all_hosts_deployed?
65
+ :finished
66
+ elsif last_deploy_task.ended_at? && last_deploy_task.result != 'success'
67
+ :failed
68
+ else
69
+ :pending
70
+ end
72
71
  end
73
72
 
74
73
  def initial_configure_job
@@ -5,6 +5,8 @@ module ForemanAcd
5
5
  class AppConfigurator
6
6
  delegate :logger, :to => :Rails
7
7
 
8
+ PROXY_NOT_SUPPORTED_LABELS = [:not_available, :not_defined].freeze
9
+
8
10
  def initialize(app_instance)
9
11
  @app_instance = app_instance
10
12
  end
@@ -42,7 +44,7 @@ module ForemanAcd
42
44
  return [result, job]
43
45
  end
44
46
  proxy = proxy_selector.determine_proxy(h.host, 'ACD')
45
- raise StandardError.new('Proxy without ACD feature') if proxy.nil? || [:not_available, :not_defined].include?(proxy)
47
+ raise StandardError, 'Proxy without ACD feature' if proxy.nil? || PROXY_NOT_SUPPORTED_LABELS.include?(proxy)
46
48
  proxy_hosts[proxy.name] = [] unless proxy_hosts.key?(proxy.name)
47
49
  proxy_hosts[proxy.name] << h
48
50
  result.success = true
@@ -21,7 +21,7 @@ module ForemanAcd
21
21
  end
22
22
 
23
23
  foreman_hosts.each do |foreman_host|
24
- service_data = services.select { |k| k['id'] == foreman_host.service.to_i }.first
24
+ service_data = services.find { |k| k['id'] == foreman_host.service.to_i }
25
25
 
26
26
  # Handle already deployed hosts
27
27
  if foreman_host.existing_host?
@@ -27,7 +27,7 @@ module ForemanAcd
27
27
  end
28
28
 
29
29
  service_id = foreman_host.service.to_i
30
- host_service = services.select { |s| s['id'] == service_id }.first
30
+ host_service = services.find { |s| s['id'] == service_id }
31
31
  ansible_group = host_service['ansibleGroup']
32
32
 
33
33
  children[ansible_group] = { 'hosts' => {} } unless children.key?(host_service['ansibleGroup'])
data/config/routes.rb CHANGED
@@ -40,16 +40,16 @@ Rails.application.routes.draw do
40
40
 
41
41
  match '/remote_execution', :controller => 'foreman_acd/remote_execution', :action => 'create', :via => [:post]
42
42
 
43
- get 'ui_acd_app/:id', :to => 'ui_acd#app', :constraints => { :id => /[\w\.-]+/ }, :as => :ui_acd_app
44
- get 'ui_acd_foreman_data/:id', :to => 'ui_acd#foreman_data', :constraints => { :id => /[\w\.-]+/ }, :as => :ui_acd_foreman_data
45
- get 'ui_acd_ansible_data/:id', :to => 'ui_acd#ansible_data', :constraints => { :id => /[\w\.-]+/ }, :as => :ui_acd_ansible_data
46
- get 'ui_acd_report_data/:id', :to => 'ui_acd#report_data', :constraints => { :id => /[\w\.-]+/ }, :as => :ui_acd_report_data
43
+ get 'ui_acd_app/:id', :to => 'ui_acd#app', :constraints => { :id => /[\w.-]+/ }, :as => :ui_acd_app
44
+ get 'ui_acd_foreman_data/:id', :to => 'ui_acd#foreman_data', :constraints => { :id => /[\w.-]+/ }, :as => :ui_acd_foreman_data
45
+ get 'ui_acd_ansible_data/:id', :to => 'ui_acd#ansible_data', :constraints => { :id => /[\w.-]+/ }, :as => :ui_acd_ansible_data
46
+ get 'ui_acd_report_data/:id', :to => 'ui_acd#report_data', :constraints => { :id => /[\w.-]+/ }, :as => :ui_acd_report_data
47
47
  get 'ui_acd_validate_hostname', :to => 'ui_acd#validate_hostname', :as => :ui_acd_validate_hostname
48
48
 
49
49
  scope :api, :path => '/api', :defaults => { :format => 'json' } do
50
50
  scope '(:apiv)', :defaults => { :apiv => 'v2' },
51
51
  :apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2) do
52
- constraints(:id => /[\w\.-]+/) do
52
+ constraints(:id => /[\w.-]+/) do
53
53
  resources :app_definitions, :only => [:show, :index], :controller => 'foreman_acd/api/v2/app_definitions', :as => :acd_api_v2_app_definitions
54
54
  resources :app_instances, :only => [:show, :index], :controller => 'foreman_acd/api/v2/app_instances', :as => :api_v2_foreman_acd_app_instances
55
55
  resources :ansible_playbooks, :only => [:show, :index], :controller => 'foreman_acd/api/v2/ansible_playbooks', :as => :api_v2_foreman_acd_ansible_playbooks do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Add git_url column to ansible_playbook
4
- class AddGitUrlToAnsiblePlaybooks < ActiveRecord::Migration[6.0]
4
+ class AddGitURLToAnsiblePlaybooks < ActiveRecord::Migration[6.0]
5
5
  def change
6
6
  add_column :acd_ansible_playbooks, :git_url, :string
7
7
  end
@@ -9,14 +9,6 @@ module ForemanAcd
9
9
  class Engine < ::Rails::Engine
10
10
  engine_name 'foreman_acd'
11
11
 
12
- config.autoload_paths += Dir["#{config.root}/app/controllers/foreman_acd/concerns"]
13
- config.autoload_paths += Dir["#{config.root}/app/models"]
14
- config.autoload_paths += Dir["#{config.root}/app/services"]
15
- config.autoload_paths += Dir["#{config.root}/app/helpers"]
16
- config.autoload_paths += Dir["#{config.root}/app/overrides"]
17
- config.autoload_paths += Dir["#{config.root}/app/lib"]
18
- config.autoload_paths += Dir["#{config.root}/lib"]
19
-
20
12
  # Add any db migrations
21
13
  initializer 'foreman_acd.load_app_instance_data' do |app|
22
14
  ForemanAcd::Engine.paths['db/migrate'].existent.each do |path|
@@ -40,8 +32,10 @@ module ForemanAcd
40
32
  Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
41
33
  end
42
34
 
43
- initializer 'foreman_acd.register_plugin', :before => :finisher_hook do
44
- require 'foreman_acd/plugin'
35
+ initializer 'foreman_acd.register_plugin', :before => :finisher_hook do |app|
36
+ app.reloader.to_prepare do
37
+ require 'foreman_acd/plugin'
38
+ end
45
39
  end
46
40
 
47
41
  initializer 'foreman_acd.register_actions', :before => :finisher_hook do |_app|
@@ -76,7 +70,7 @@ module ForemanAcd
76
70
  N_('Run playbook for ACD'),
77
71
  {
78
72
  :description => N_('Run an Ansible playbook to configure ACD application'),
79
- :provided_inputs => %w[application_name playbook_name playbook_path inventory_path]
73
+ :provided_inputs => %w[application_name playbook_name playbook_path inventory_path],
80
74
  }
81
75
  )
82
76
  end
@@ -1,130 +1,130 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Foreman::Plugin.register :foreman_acd do
4
- requires_foreman '>= 2.1'
4
+ requires_foreman '>= 3.13'
5
5
 
6
6
  apipie_documented_controllers ["#{ForemanAcd::Engine.root}/app/controllers/foreman_acd/api/v2/*.rb"]
7
7
 
8
8
  # Menus
9
9
  sub_menu :top_menu, :application, :caption => N_('Applications'), :after => :hosts_menu, :icon => 'pficon pficon-integration' do
10
10
  menu :top_menu, :ansible_playbooks,
11
- :url_hash => { :controller => :'foreman_acd/ansible_playbooks', :action => :index },
12
- :caption => 'Ansible Playbooks'
11
+ :url_hash => { :controller => :'foreman_acd/ansible_playbooks', :action => :index },
12
+ :caption => 'Ansible Playbooks'
13
13
 
14
14
  menu :top_menu, :app_definitions,
15
- :url_hash => { :controller => :'foreman_acd/app_definitions', :action => :index },
16
- :caption => 'App Definitions'
15
+ :url_hash => { :controller => :'foreman_acd/app_definitions', :action => :index },
16
+ :caption => 'App Definitions'
17
17
 
18
18
  menu :top_menu, :app_instances,
19
- :url_hash => { :controller => :'foreman_acd/app_instances', :action => :index },
20
- :caption => 'App Instances'
19
+ :url_hash => { :controller => :'foreman_acd/app_instances', :action => :index },
20
+ :caption => 'App Instances'
21
21
  end
22
22
 
23
23
  # Add permissions
24
24
  security_block :foreman_acd do
25
25
  permission :create_ansible_playbooks,
26
- { :'foreman_acd/ansible_playbooks' => [:new, :create],
27
- :'foreman_acd/api/v2/ansible_playbooks' => [:create] },
28
- :resource_type => 'ForemanAcd::AnsiblePlaybook'
26
+ { :'foreman_acd/ansible_playbooks' => [:new, :create],
27
+ :'foreman_acd/api/v2/ansible_playbooks' => [:create] },
28
+ :resource_type => 'ForemanAcd::AnsiblePlaybook'
29
29
 
30
30
  permission :view_ansible_playbooks,
31
- { :'foreman_acd/ansible_playbooks' => [:index, :show, :auto_complete_search],
32
- :'foreman_acd/api/v2/ansible_playbooks' => [:index, :show] },
33
- :resource_type => 'ForemanAcd::AnsiblePlaybook'
31
+ { :'foreman_acd/ansible_playbooks' => [:index, :show, :auto_complete_search],
32
+ :'foreman_acd/api/v2/ansible_playbooks' => [:index, :show] },
33
+ :resource_type => 'ForemanAcd::AnsiblePlaybook'
34
34
 
35
35
  permission :edit_ansible_playbooks,
36
- { :'foreman_acd/ansible_playbooks' => [:update, :edit, :sync_git_repo],
37
- :'foreman_acd/api/v2/ansible_playbooks' => [:update] },
38
- :resource_type => 'ForemanAcd::AnsiblePlaybook'
36
+ { :'foreman_acd/ansible_playbooks' => [:update, :edit, :sync_git_repo],
37
+ :'foreman_acd/api/v2/ansible_playbooks' => [:update] },
38
+ :resource_type => 'ForemanAcd::AnsiblePlaybook'
39
39
 
40
40
  permission :destroy_ansible_playbooks,
41
- { :'foreman_acd/ansible_playbooks' => [:destroy],
42
- :'foreman_acd/api/v2/ansible_playbooks' => [:destroy] },
43
- :resource_type => 'ForemanAcd::AnsiblePlaybook'
41
+ { :'foreman_acd/ansible_playbooks' => [:destroy],
42
+ :'foreman_acd/api/v2/ansible_playbooks' => [:destroy] },
43
+ :resource_type => 'ForemanAcd::AnsiblePlaybook'
44
44
 
45
45
  permission :import_vars_ansible_playbooks,
46
- { :'foreman_acd/ansible_playbooks' => [:import_vars],
47
- :'foreman_acd/api/v2/ansible_playbooks' => [:import_vars] },
48
- :resource_type => 'ForemanAcd::AnsiblePlaybook'
46
+ { :'foreman_acd/ansible_playbooks' => [:import_vars],
47
+ :'foreman_acd/api/v2/ansible_playbooks' => [:import_vars] },
48
+ :resource_type => 'ForemanAcd::AnsiblePlaybook'
49
49
 
50
50
  permission :grab_ansible_playbooks,
51
- { :'foreman_acd/api/v2/ansible_playbooks' => [:grab] },
52
- :resource_type => 'ForemanAcd::AnsiblePlaybook'
51
+ { :'foreman_acd/api/v2/ansible_playbooks' => [:grab] },
52
+ :resource_type => 'ForemanAcd::AnsiblePlaybook'
53
53
 
54
54
  permission :create_app_definitions,
55
- { :'foreman_acd/app_definitions' => [:new, :create],
56
- :'foreman_acd/api/v2/app_definitions' => [:create] },
57
- :resource_type => 'ForemanAcd::AppDefinition'
55
+ { :'foreman_acd/app_definitions' => [:new, :create],
56
+ :'foreman_acd/api/v2/app_definitions' => [:create] },
57
+ :resource_type => 'ForemanAcd::AppDefinition'
58
58
 
59
59
  permission :view_app_definitions,
60
- { :'foreman_acd/app_definitions' => [:index, :show, :auto_complete_search],
61
- :'foreman_acd/api/v2/app_definitions' => [:index, :show] },
62
- :resource_type => 'ForemanAcd::AppDefinition'
60
+ { :'foreman_acd/app_definitions' => [:index, :show, :auto_complete_search],
61
+ :'foreman_acd/api/v2/app_definitions' => [:index, :show] },
62
+ :resource_type => 'ForemanAcd::AppDefinition'
63
63
 
64
64
  permission :edit_app_definitions,
65
- { :'foreman_acd/app_definitions' => [:update, :edit],
66
- :'foreman_acd/api/v2/app_definitions' => [:update] },
67
- :resource_type => 'ForemanAcd::AppDefinition'
65
+ { :'foreman_acd/app_definitions' => [:update, :edit],
66
+ :'foreman_acd/api/v2/app_definitions' => [:update] },
67
+ :resource_type => 'ForemanAcd::AppDefinition'
68
68
 
69
69
  permission :destroy_app_definitions,
70
- { :'foreman_acd/app_definitions' => [:destroy],
71
- :'foreman_acd/api/v2/app_definitions' => [:destroy] },
72
- :resource_type => 'ForemanAcd::AppDefinition'
70
+ { :'foreman_acd/app_definitions' => [:destroy],
71
+ :'foreman_acd/api/v2/app_definitions' => [:destroy] },
72
+ :resource_type => 'ForemanAcd::AppDefinition'
73
73
 
74
74
  permission :export_app_definitions,
75
- { :'foreman_acd/app_definitions' => [:export, :handle_file_upload],
76
- :'foreman_acd/api/v2/app_definitions' => [:export] },
77
- :resource_type => 'ForemanAcd::AppDefinition'
75
+ { :'foreman_acd/app_definitions' => [:export, :handle_file_upload],
76
+ :'foreman_acd/api/v2/app_definitions' => [:export] },
77
+ :resource_type => 'ForemanAcd::AppDefinition'
78
78
 
79
79
  permission :import_app_definitions,
80
- { :'foreman_acd/app_definitions' => [:import],
81
- :'foreman_acd/api/v2/app_definitions' => [:import] },
82
- :resource_type => 'ForemanAcd::AppDefinition'
80
+ { :'foreman_acd/app_definitions' => [:import],
81
+ :'foreman_acd/api/v2/app_definitions' => [:import] },
82
+ :resource_type => 'ForemanAcd::AppDefinition'
83
83
 
84
84
  permission :create_app_instances,
85
- { :'foreman_acd/app_instances' => [:new, :create],
86
- :'foreman_acd/api/v2/app_instances' => [:create] },
87
- :resource_type => 'ForemanAcd::AppInstance'
85
+ { :'foreman_acd/app_instances' => [:new, :create],
86
+ :'foreman_acd/api/v2/app_instances' => [:create] },
87
+ :resource_type => 'ForemanAcd::AppInstance'
88
88
 
89
89
  permission :view_app_instances,
90
- { :'foreman_acd/app_instances' => [:index, :show, :auto_complete_search],
91
- :'foreman_acd/api/v2/app_instances' => [:index, :show] },
92
- :resource_type => 'ForemanAcd::AppInstance'
90
+ { :'foreman_acd/app_instances' => [:index, :show, :auto_complete_search],
91
+ :'foreman_acd/api/v2/app_instances' => [:index, :show] },
92
+ :resource_type => 'ForemanAcd::AppInstance'
93
93
 
94
94
  permission :edit_app_instances,
95
- { :'foreman_acd/app_instances' => [:update, :edit],
96
- :'foreman_acd/api/v2/app_instances' => [:update] },
97
- :resource_type => 'ForemanAcd::AppInstance'
95
+ { :'foreman_acd/app_instances' => [:update, :edit],
96
+ :'foreman_acd/api/v2/app_instances' => [:update] },
97
+ :resource_type => 'ForemanAcd::AppInstance'
98
98
 
99
99
  permission :destroy_app_instances,
100
- { :'foreman_acd/app_instances' => [:destroy, :destroy_with_hosts],
101
- :'foreman_acd/api/v2/app_instances' => [:destroy, :destroy_with_hosts] },
102
- :resource_type => 'ForemanAcd::AppInstance'
100
+ { :'foreman_acd/app_instances' => [:destroy, :destroy_with_hosts],
101
+ :'foreman_acd/api/v2/app_instances' => [:destroy, :destroy_with_hosts] },
102
+ :resource_type => 'ForemanAcd::AppInstance'
103
103
 
104
104
  permission :deploy_app_instances,
105
- { :'foreman_acd/app_instances' => [:deploy],
106
- :'foreman_acd/api/v2/app_instances' => [:deploy] },
107
- :resource_type => 'ForemanAcd::AppInstance'
105
+ { :'foreman_acd/app_instances' => [:deploy],
106
+ :'foreman_acd/api/v2/app_instances' => [:deploy] },
107
+ :resource_type => 'ForemanAcd::AppInstance'
108
108
 
109
109
  permission :report_app_instances,
110
- { :'foreman_acd/app_instances' => [:report],
111
- :'foreman_acd/api/v2/app_instances' => [:report] },
112
- :resource_type => 'ForemanAcd::AppInstance'
110
+ { :'foreman_acd/app_instances' => [:report],
111
+ :'foreman_acd/api/v2/app_instances' => [:report] },
112
+ :resource_type => 'ForemanAcd::AppInstance'
113
113
 
114
114
  permission :new_acd_configure_job,
115
- { :'foreman_acd/remote_execution' => [:new] },
116
- :resource_type => 'ForemanAcd::AppInstance'
115
+ { :'foreman_acd/remote_execution' => [:new] },
116
+ :resource_type => 'ForemanAcd::AppInstance'
117
117
 
118
118
  permission :create_acd_configure_job,
119
- { :'foreman_acd/remote_execution' => [:create] },
120
- :resource_type => 'ForemanAcd::AppInstance'
119
+ { :'foreman_acd/remote_execution' => [:create] },
120
+ :resource_type => 'ForemanAcd::AppInstance'
121
121
 
122
122
  permission :view_ui_acd,
123
- { :ui_acd => [:app, :foreman_data, :ansible_data, :validate_hostname, :report_data] }
123
+ { :ui_acd => [:app, :foreman_data, :ansible_data, :validate_hostname, :report_data] }
124
124
 
125
125
  permission :acd_foreman_hosts,
126
- { :'foreman_acd/app_instances' => [:create, :edit, :update, :deploy, :destroy_with_hosts, :destroy] },
127
- :resource_type => 'ForemanAcd::ForemanHost'
126
+ { :'foreman_acd/app_instances' => [:create, :edit, :update, :deploy, :destroy_with_hosts, :destroy] },
127
+ :resource_type => 'ForemanAcd::ForemanHost'
128
128
  end
129
129
 
130
130
  # Manager Role
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanAcd
4
- VERSION = '0.10.0'
4
+ VERSION = '0.12.0'
5
5
  end
data/lib/foreman_acd.rb CHANGED
@@ -29,8 +29,8 @@ module ForemanAcd
29
29
 
30
30
  def start_acd_app_configurator(app_instance)
31
31
  task = ForemanTasks.delay(::Actions::ForemanAcd::RunConfigurator,
32
- { :start_at => Time.zone.now + RUN_CONFIGURATOR_DELAY },
33
- app_instance)
32
+ { :start_at => Time.zone.now + RUN_CONFIGURATOR_DELAY },
33
+ app_instance)
34
34
  app_instance.update(:initial_configure_task_id => task.id)
35
35
  end
36
36
  end
@@ -13,20 +13,13 @@ namespace :test do
13
13
  end
14
14
 
15
15
  namespace :foreman_acd do
16
- task :rubocop do
17
- begin
18
- require 'rubocop/rake_task'
19
- RuboCop::RakeTask.new(:rubocop_foreman_acd) do |task|
20
- task.patterns = ["#{ForemanAcd::Engine.root}/app/**/*.rb",
21
- "#{ForemanAcd::Engine.root}/lib/**/*.rb",
22
- "#{ForemanAcd::Engine.root}/test/**/*.rb"]
23
- end
24
- rescue StandardError
25
- puts 'Rubocop not loaded.'
26
- end
27
-
28
- Rake::Task['rubocop_foreman_acd'].invoke
16
+ require 'rubocop/rake_task'
17
+ RuboCop::RakeTask.new(:rubocop) do |task|
18
+ task.options = ['--force-exclusion']
19
+ task.patterns = [ForemanAcd::Engine.root.to_s]
29
20
  end
21
+ rescue LoadError
22
+ puts 'Rubocop not loaded.'
30
23
  end
31
24
 
32
25
  Rake::Task[:test].enhance ['test:foreman_acd']
@@ -18,8 +18,8 @@ module ForemanAcd
18
18
  test 'should destroy ansible playbook' do
19
19
  assert_difference('AnsiblePlaybook.count', -1) do
20
20
  delete :destroy,
21
- :params => { :id => @model.id },
22
- :session => set_session_user
21
+ :params => { :id => @model.id },
22
+ :session => set_session_user
23
23
  end
24
24
  assert_redirected_to ansible_playbooks_url
25
25
  end
@@ -18,8 +18,8 @@ module ForemanAcd
18
18
  test 'should destroy app definition' do
19
19
  assert_difference('AppDefinition.count', -1) do
20
20
  delete :destroy,
21
- :params => { :id => @model.id },
22
- :session => set_session_user
21
+ :params => { :id => @model.id },
22
+ :session => set_session_user
23
23
  end
24
24
  assert_redirected_to app_definitions_url
25
25
  end
@@ -24,8 +24,8 @@ module ForemanAcd
24
24
  test 'should destroy app instance' do
25
25
  assert_difference('AppInstance.count', -1) do
26
26
  delete :destroy_with_hosts,
27
- :params => { :id => @model.id },
28
- :session => set_session_user
27
+ :params => { :id => @model.id },
28
+ :session => set_session_user
29
29
  end
30
30
  end
31
31
  end
@@ -13,7 +13,7 @@ module Katello
13
13
  end
14
14
 
15
15
  # UI Controller tests
16
- class UiAcdControllerTest < ActionController::TestCase
16
+ class UIAcdControllerTest < ActionController::TestCase
17
17
  test 'get app json' do
18
18
  app_def = FactoryBot.create(:app_definition)
19
19
  get :app, :params => { :id => app_def.id }, :session => set_session_user
@@ -10,13 +10,13 @@ module ForemanAcd
10
10
 
11
11
  it 'returns only strings' do
12
12
  provider_names.each do |name|
13
- _(name).must_be_kind_of String
13
+ expect(name).must_be_kind_of String
14
14
  end
15
15
  end
16
16
 
17
17
  context 'provider is registetered under :custom symbol' do
18
18
  before { AcdProvider.register(:ACD, String) }
19
- it { _(provider_names).must_include 'ACD' }
19
+ it { expect(provider_names).must_include 'ACD' }
20
20
  end
21
21
  end
22
22
 
@@ -14,10 +14,10 @@ module ForemanAcd
14
14
  app = FactoryBot.create :app_instance
15
15
 
16
16
  foreman_host = app.foreman_hosts.create(:hostname => host.name,
17
- :service => 'DB',
18
- :description => 'Description',
19
- :foremanParameters => nil,
20
- :ansibleParameters => nil)
17
+ :service => 'DB',
18
+ :description => 'Description',
19
+ :foremanParameters => nil,
20
+ :ansibleParameters => nil)
21
21
  foreman_host.host = host
22
22
  foreman_host.save
23
23
  assert host.deployed_via_acd?
metadata CHANGED
@@ -1,43 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_acd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-09-26 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rubocop
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.89.0
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.89.0
27
- - !ruby/object:Gem::Dependency
28
- name: rubocop-rails
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 2.8.1
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 2.8.1
41
12
  - !ruby/object:Gem::Dependency
42
13
  name: foreman_remote_execution
43
14
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +51,20 @@ dependencies:
80
51
  - - ">="
81
52
  - !ruby/object:Gem::Version
82
53
  version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: theforeman-rubocop
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.1.0
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.1.0
83
68
  description: Foreman plugin to provide application centric deployment and self service
84
69
  portal
85
70
  email:
@@ -364,7 +349,6 @@ homepage: https://www.orcharhino.com
364
349
  licenses:
365
350
  - GPL-3.0
366
351
  metadata: {}
367
- post_install_message:
368
352
  rdoc_options: []
369
353
  require_paths:
370
354
  - lib
@@ -382,8 +366,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
382
366
  - !ruby/object:Gem::Version
383
367
  version: '0'
384
368
  requirements: []
385
- rubygems_version: 3.3.27
386
- signing_key:
369
+ rubygems_version: 3.6.7
387
370
  specification_version: 4
388
371
  summary: Foreman plugin to provide application centric deployment and self service
389
372
  portal