foreman_pipeline 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/LICENSE +674 -0
- data/README.md +36 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/foreman_pipeline/foreman_pipeline-bootstrap.js +8 -0
- data/app/assets/javascripts/foreman_pipeline/foreman_pipeline.js +20 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/details/jenkins-instance-details-info.controller.js +46 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/details/jenkins-instance-details-users.controller.js +72 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/details/jenkins-instance-details.controller.js +40 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/details/views/jenkins-instance-details-info.html +36 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/details/views/jenkins-instance-details-users.html +107 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/details/views/jenkins-instance-details.html +53 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/jenkins-instances.controller.js +34 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/jenkins-instances.factory.js +14 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/jenkins-instances.module.js +93 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/new/new-jenkins-instance.controller.js +40 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/new/views/new-jenkins-instance-form.html +50 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/new/views/new-jenkins-instance.html +16 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/views/jenkins-instances-table-collapsed.html +20 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/views/jenkins-instances-table-full.html +30 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-instances/views/jenkins-instances.html +17 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-project-params/jenkins-project-params.factory.js +11 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-project-params/jenkins-project-params.module.js +6 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-projects/jenkins-projects.factory.js +9 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-projects/jenkins-projects.module.js +10 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-requests/jenkins-requests.factory.js +11 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-requests/jenkins-requests.module.js +10 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-users/details/jenkins-user-info.controller.js +39 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-users/details/views/jenkins-user-info.html +37 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-users/jenkins-users.factory.js +10 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-users/jenkins-users.module.js +6 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-users/new/new-jenkins-user.controller.js +45 -0
- data/app/assets/javascripts/foreman_pipeline/jenkins-users/new/views/new-jenkins-user.html +32 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-add-paths.controller.js +63 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-content-views.controller.js +55 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-environments.controller.js +56 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-hostgroups.controller.js +59 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-info.controller.js +69 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-jenkins-projects.controller.js +49 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-jenkins.controller.js +56 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-resources.controller.js +60 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details-to-environments.controller.js +157 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/job-details.controller.js +34 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/project-discovery/job-projects-discovery.controller.js +96 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/project-discovery/job-projects-parameters.controller.js +54 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/project-discovery/views/job-jenkins-projects.html +1 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/project-discovery/views/job-projects-discovery.html +91 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/project-discovery/views/job-projects-parameters.html +77 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-content-views.html +83 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-environments.html +50 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-hostgroups.html +81 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-info.html +117 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-jenkins-projects.html +75 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-jenkins.html +88 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-paths-list.html +72 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-resources.html +86 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details-to-environments.html +51 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/details/views/job-details.html +80 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/jobs.controller.js +40 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/jobs.factory.js +54 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/jobs.module.js +142 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/new/new-job.controller.js +31 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/new/views/new-job-form.html +47 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/new/views/new-job.html +17 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/views/jobs-table-collapsed.html +20 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/views/jobs-table-full.html +66 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/views/jobs.html +19 -0
- data/app/assets/javascripts/foreman_pipeline/jobs/views/pln-path-selector.html +10 -0
- data/app/assets/stylesheets/foreman_pipeline/foreman_pipeline.css +13 -0
- data/app/controllers/foreman_pipeline/api/jenkins_instances_controller.rb +124 -0
- data/app/controllers/foreman_pipeline/api/jenkins_project_params_controller.rb +34 -0
- data/app/controllers/foreman_pipeline/api/jenkins_projects_controller.rb +29 -0
- data/app/controllers/foreman_pipeline/api/jenkins_requests_controller.rb +28 -0
- data/app/controllers/foreman_pipeline/api/jenkins_users_controller.rb +89 -0
- data/app/controllers/foreman_pipeline/api/jobs_controller.rb +271 -0
- data/app/controllers/foreman_pipeline/application_controller.rb +4 -0
- data/app/helpers/foreman_pipeline/application_helper.rb +4 -0
- data/app/lib/actions/foreman_pipeline/jenkins/abstract_jenkins_action.rb +20 -0
- data/app/lib/actions/foreman_pipeline/jenkins/build.rb +35 -0
- data/app/lib/actions/foreman_pipeline/jenkins/build_project.rb +31 -0
- data/app/lib/actions/foreman_pipeline/jenkins/bulk_build.rb +23 -0
- data/app/lib/actions/foreman_pipeline/jenkins/get_build_details.rb +11 -0
- data/app/lib/actions/foreman_pipeline/jenkins/get_build_params.rb +11 -0
- data/app/lib/actions/foreman_pipeline/jenkins/get_version.rb +17 -0
- data/app/lib/actions/foreman_pipeline/jenkins/list.rb +15 -0
- data/app/lib/actions/foreman_pipeline/jenkins/wait_and_poll.rb +33 -0
- data/app/lib/actions/foreman_pipeline/jenkins/wait_for_build.rb +42 -0
- data/app/lib/actions/foreman_pipeline/jenkins/wait_host_ready.rb +36 -0
- data/app/lib/actions/foreman_pipeline/jenkins_instance/abstract_jenkins_instance_action.rb +17 -0
- data/app/lib/actions/foreman_pipeline/jenkins_instance/create_jenkins_instance_keys.rb +45 -0
- data/app/lib/actions/foreman_pipeline/job/create_activation_key.rb +20 -0
- data/app/lib/actions/foreman_pipeline/job/create_host.rb +88 -0
- data/app/lib/actions/foreman_pipeline/job/cv_promote_job_hook.rb +22 -0
- data/app/lib/actions/foreman_pipeline/job/cv_publish_job_hook.rb +22 -0
- data/app/lib/actions/foreman_pipeline/job/deploy_new_host.rb +25 -0
- data/app/lib/actions/foreman_pipeline/job/find_packages_to_install.rb +16 -0
- data/app/lib/actions/foreman_pipeline/job/job_hook.rb +24 -0
- data/app/lib/actions/foreman_pipeline/job/multiple_promotions.rb +18 -0
- data/app/lib/actions/foreman_pipeline/job/promote.rb +38 -0
- data/app/lib/actions/foreman_pipeline/job/redeploy.rb +45 -0
- data/app/lib/actions/foreman_pipeline/job/repo_sync_job_hook.rb +33 -0
- data/app/lib/actions/foreman_pipeline/job/run_job_manually.rb +25 -0
- data/app/lib/actions/foreman_pipeline/job/suspend_until_provisioned.rb +13 -0
- data/app/lib/actions/foreman_pipeline/mixins/ssh_extension.rb +41 -0
- data/app/lib/actions/foreman_pipeline/mixins/uri_extension.rb +14 -0
- data/app/lib/foreman_pipeline/api/rendering.rb +18 -0
- data/app/models/foreman_pipeline/authorization/base_model.rb +31 -0
- data/app/models/foreman_pipeline/authorization/jenkins_instance.rb +8 -0
- data/app/models/foreman_pipeline/authorization/jenkins_project.rb +8 -0
- data/app/models/foreman_pipeline/authorization/jenkins_project_param.rb +8 -0
- data/app/models/foreman_pipeline/authorization/jenkins_user.rb +7 -0
- data/app/models/foreman_pipeline/authorization/job.rb +7 -0
- data/app/models/foreman_pipeline/concerns/compute_resource_extension.rb +11 -0
- data/app/models/foreman_pipeline/concerns/content_view_extension.rb +12 -0
- data/app/models/foreman_pipeline/concerns/content_view_repository_extension.rb +12 -0
- data/app/models/foreman_pipeline/concerns/hostgroup_extension.rb +12 -0
- data/app/models/foreman_pipeline/concerns/kt_environment_extension.rb +18 -0
- data/app/models/foreman_pipeline/concerns/repository_extension.rb +12 -0
- data/app/models/foreman_pipeline/glue/elastic_search/base_model.rb +21 -0
- data/app/models/foreman_pipeline/glue/elastic_search/jenkins_instance.rb +11 -0
- data/app/models/foreman_pipeline/glue/elastic_search/jenkins_project.rb +11 -0
- data/app/models/foreman_pipeline/glue/elastic_search/jenkins_user.rb +11 -0
- data/app/models/foreman_pipeline/glue/elastic_search/job.rb +11 -0
- data/app/models/foreman_pipeline/jenkins_instance.rb +51 -0
- data/app/models/foreman_pipeline/jenkins_project.rb +18 -0
- data/app/models/foreman_pipeline/jenkins_project_param.rb +21 -0
- data/app/models/foreman_pipeline/jenkins_user.rb +15 -0
- data/app/models/foreman_pipeline/job.rb +72 -0
- data/app/models/foreman_pipeline/job_jenkins_project.rb +25 -0
- data/app/models/foreman_pipeline/job_to_environment.rb +19 -0
- data/app/views/foreman/unattended/snippets/_jenkins_instance_pubkey.erb +10 -0
- data/app/views/foreman_pipeline/api/common/async.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/common/index.json.rabl +7 -0
- data/app/views/foreman_pipeline/api/compute_resources/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/compute_resources/show.json.rabl +5 -0
- data/app/views/foreman_pipeline/api/content_views/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/content_views/show.json.rabl +5 -0
- data/app/views/foreman_pipeline/api/environments/show.json.rabl +11 -0
- data/app/views/foreman_pipeline/api/hostgroups/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/hostgroups/show.json.rabl +5 -0
- data/app/views/foreman_pipeline/api/jenkins_instances/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/jenkins_instances/show.json.rabl +7 -0
- data/app/views/foreman_pipeline/api/jenkins_project_params/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/jenkins_project_params/show.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/jenkins_projects/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/jenkins_projects/show.json.rabl +7 -0
- data/app/views/foreman_pipeline/api/jenkins_users/index.json.rabl +2 -0
- data/app/views/foreman_pipeline/api/jenkins_users/show.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/jobs/available_paths.json.rabl +9 -0
- data/app/views/foreman_pipeline/api/jobs/index.json.rabl +3 -0
- data/app/views/foreman_pipeline/api/jobs/show.json.rabl +32 -0
- data/config/mount_engine.rb +3 -0
- data/config/routes.rb +53 -0
- data/db/migrate/20141003121914_create_job_table.rb +13 -0
- data/db/migrate/20141003145152_add_organization_to_jobs_table.rb +9 -0
- data/db/migrate/20141014125836_make_content_view_and_hostgroup_optional_for_job.rb +11 -0
- data/db/migrate/20141029121444_create_test_table.rb +11 -0
- data/db/migrate/20141029125423_add_organization_to_test_table.rb +9 -0
- data/db/migrate/20141030154210_create_jobs_tests_table.rb +12 -0
- data/db/migrate/20141120130350_add_resource_to_job.rb +9 -0
- data/db/migrate/20150121134503_create_jenkins_instances_table.rb +13 -0
- data/db/migrate/20150121134748_add_jenkins_instances_to_job_table.rb +9 -0
- data/db/migrate/20150122155819_add_kt_environment_to_jobs_table.rb +9 -0
- data/db/migrate/20150127101153_add_trigger_options_to_jobs_table.rb +13 -0
- data/db/migrate/20150202180711_add_content_column_to_tests_table.rb +9 -0
- data/db/migrate/20150209145400_add_pubkey_to_jenkins_instance_table.rb +9 -0
- data/db/migrate/20150209160604_add_jenkins_home_to_jenkins_instance_table.rb +9 -0
- data/db/migrate/20150212115234_add_uniqueness_to_jenkins_instance_url.rb +9 -0
- data/db/migrate/20150212125901_add_uniqueness_to_test_name.rb +9 -0
- data/db/migrate/20150213095447_add_cert_path_to_jenkins_instances.rb +9 -0
- data/db/migrate/20150216170951_add_build_step_to_tests_table.rb +9 -0
- data/db/migrate/20150223142315_change_jenkins_instance_cert_path_column.rb +9 -0
- data/db/migrate/20150224090100_create_jenkins_projects_table.rb +19 -0
- data/db/migrate/20150226182211_add_org_to_jenkins_project.rb +9 -0
- data/db/migrate/20150301134121_create_jenkins_project_params_table.rb +16 -0
- data/db/migrate/20150303134951_change_jenkins_project_param_value_column.rb +9 -0
- data/db/migrate/20150304123529_change_jenkins_project_params_table.rb +9 -0
- data/db/migrate/20150305122212_drop_tests_table.rb +5 -0
- data/db/migrate/20150312153833_create_jenkins_users.rb +15 -0
- data/db/migrate/20150313093244_add_jenkins_user_to_jobs.rb +9 -0
- data/db/migrate/20150313115956_change_jenkins_user_owner.rb +9 -0
- data/db/migrate/20150318141859_rename_tables.rb +19 -0
- data/db/migrate/20150323153355_remove_owner_from_jenkins_user.rb +9 -0
- data/db/migrate/20150323165954_add_jenkins_user_to_instance.rb +9 -0
- data/db/migrate/20150323175436_remove_jenkins_user_from_job.rb +9 -0
- data/db/migrate/20150324082437_remove_jenkins_instance_from_user.rb +9 -0
- data/db/migrate/20150324093416_add_promote_to_jobs.rb +9 -0
- data/db/migrate/20150324124034_create_job_path.rb +13 -0
- data/db/migrate/20150408143011_remove_cv_promote_from_job.rb +9 -0
- data/db/migrate/20150408145022_rename_job_path.rb +11 -0
- data/db/migrate/20150923073033_drop_orphaned_table.rb +8 -0
- data/lib/foreman_pipeline.rb +5 -0
- data/lib/foreman_pipeline/engine.rb +67 -0
- data/lib/foreman_pipeline/permissions.rb +3 -0
- data/lib/foreman_pipeline/permissions/jenkins_instance_permissions.rb +25 -0
- data/lib/foreman_pipeline/permissions/jenkins_project_params_permissions.rb +9 -0
- data/lib/foreman_pipeline/permissions/jenkins_projects_permissions.rb +9 -0
- data/lib/foreman_pipeline/permissions/jenkins_request_permissions.rb +9 -0
- data/lib/foreman_pipeline/permissions/jenkins_user_permissions.rb +24 -0
- data/lib/foreman_pipeline/permissions/job_permissions.rb +27 -0
- data/lib/foreman_pipeline/plugin.rb +17 -0
- data/lib/foreman_pipeline/roles.rb +13 -0
- data/lib/foreman_pipeline/tasks/foreman_pipeline_seed.rake +18 -0
- data/lib/foreman_pipeline/tasks/foreman_pipeline_test.rake +34 -0
- data/lib/foreman_pipeline/version.rb +3 -0
- data/test/factories/hostgroup_factory.rb +6 -0
- data/test/factories/jenkins_instance_related_factory.rb +20 -0
- data/test/foreman_pipeline_plugin_test_helper.rb +28 -0
- data/test/unit/job_test.rb +26 -0
- data/test/unit/sanity_test.rb +12 -0
- metadata +327 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="path-selector" ng-repeat="path in paths">
|
2
|
+
<ul class="path-list">
|
3
|
+
<li class="path-list-item" ng-repeat="item in path" ng-class="{ 'disabled-item': item.disabled }">
|
4
|
+
<label class="path-list-item-label" ng-disabled="item.disabled" ng-class="{ active: item.selected }" ng-mouseenter="hover" ng-mouseleave="hover = false">
|
5
|
+
<input type="checkbox" ng-model="item.selected" ng-change="itemChanged(item)" ng-disabled="item.disabled"/>
|
6
|
+
{{ item.name }}
|
7
|
+
</label>
|
8
|
+
</li>
|
9
|
+
</ul>
|
10
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*= require_tree .
|
13
|
+
*/
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module ForemanPipeline
|
2
|
+
class Api::JenkinsInstancesController < Katello::Api::V2::ApiController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
include Api::Rendering
|
6
|
+
|
7
|
+
before_filter :find_jenkins_instance, :only => [:show, :update, :destroy, :check_jenkins, :set_jenkins_user]
|
8
|
+
before_filter :find_organization, :only => [:index, :create]
|
9
|
+
before_filter :load_search_service, :only => [:index]
|
10
|
+
|
11
|
+
def_param_group :jenkins_instance do
|
12
|
+
param :name, String, :desc => N_("Jenkins instance's name")
|
13
|
+
param :url, String, :desc => N_("Jenkins instance's url")
|
14
|
+
param :cert_path, String, :desc => ("Path to the private certificate for passwordless access to jenkins server")
|
15
|
+
param :jenkins_home, String, :desc => ("Location of $JENKINS_HOME")
|
16
|
+
end
|
17
|
+
|
18
|
+
def_param_group :jenkins_instance_id do
|
19
|
+
param :organization_id, :number, :desc => N_("Organization identifier"), :required => true
|
20
|
+
param :id, :number, :desc => N_("Jenkins instance identifier"), :required => true
|
21
|
+
end
|
22
|
+
|
23
|
+
api :GET, "/organizations/:organization_id/jenkins_instances", N_("List jenkins instances")
|
24
|
+
param :organization_id, :number, :desc => N_("organization identifier"), :required => true
|
25
|
+
param :name, String, :desc => N_("Name of the jenkins instance")
|
26
|
+
def index
|
27
|
+
ids = JenkinsInstance.readable.where(:organization_id => @organization.id).pluck(:id)
|
28
|
+
filters = [:terms => {:id => ids}]
|
29
|
+
filters << {:term => {:name => params[:name]}} if params[:name]
|
30
|
+
|
31
|
+
options = {
|
32
|
+
:filters => filters,
|
33
|
+
:load_records? => true
|
34
|
+
}
|
35
|
+
|
36
|
+
respond_for_index(:collection => item_search(JenkinsInstance, params, options))
|
37
|
+
end
|
38
|
+
|
39
|
+
api :POST, "/organizations/:organization_id/jenkins_instances/:id", N_("Create jenkins instance")
|
40
|
+
param_group :jenkins_instance_id
|
41
|
+
param_group :jenkins_instance
|
42
|
+
def create
|
43
|
+
@jenkins_instance = JenkinsInstance.new(jenkins_instance_params)
|
44
|
+
@jenkins_instance.organization = @organization
|
45
|
+
|
46
|
+
rollback = false
|
47
|
+
JenkinsInstance.transaction do
|
48
|
+
@jenkins_instance.save!
|
49
|
+
task = sync_task(::Actions::ForemanPipeline::JenkinsInstance::CreateJenkinsInstanceKeys,
|
50
|
+
:jenkins_url => jenkins_instance_params[:url],
|
51
|
+
:cert_path => @jenkins_instance.cert_path,
|
52
|
+
:jenkins_home => jenkins_instance_params[:jenkins_home])
|
53
|
+
|
54
|
+
@jenkins_instance.pubkey = task.output.fetch(:pubkey)
|
55
|
+
@jenkins_instance.save!
|
56
|
+
|
57
|
+
if task.output.fetch(:status) == 1
|
58
|
+
raise ActiveRecord::Rollback
|
59
|
+
rollback = true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if rollback
|
64
|
+
fail ::Katello::HttpErrors::Conflict, "Could not access Jenkins server, are you sure you set up certificates?"
|
65
|
+
else
|
66
|
+
respond_for_show(:resource => @jenkins_instance)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
api :PUT, "/organizations/:organization_id/jenkins_instances/:id", N_("Update jenkins instance")
|
71
|
+
param_group :jenkins_instance_id
|
72
|
+
param_group :jenkins_instance
|
73
|
+
def update
|
74
|
+
@jenkins_instance.update_attributes!(jenkins_instance_params.except(:url).except(:jenkins_home))
|
75
|
+
@jenkins_instance.save!
|
76
|
+
|
77
|
+
respond_for_show(:resource => @jenkins_instance)
|
78
|
+
end
|
79
|
+
|
80
|
+
api :GET, "/organizations/:organization_id/jenkins_instances/:id", N_("Get jenkins_instance by identifier")
|
81
|
+
param_group :jenkins_instance_id
|
82
|
+
def show
|
83
|
+
respond_for_show(:resource => @jenkins_instance)
|
84
|
+
end
|
85
|
+
|
86
|
+
api :DELETE, "/organizations/:organization_id/jenkins_instances/:id", N_("Delete jenkins_instance")
|
87
|
+
param_group :jenkins_instance_id
|
88
|
+
def destroy
|
89
|
+
@jenkins_instance.destroy
|
90
|
+
respond_for_show(:resource => @jenkins_instance)
|
91
|
+
end
|
92
|
+
|
93
|
+
api :GET, "/organizations/:organization_id/jenkins_instances/:id/check_jenkins", N_("Check jenkins instance reachability")
|
94
|
+
param_group :jenkins_instance_id
|
95
|
+
def check_jenkins
|
96
|
+
task = sync_task(::Actions::ForemanPipeline::Jenkins::GetVersion,
|
97
|
+
:id => @jenkins_instance.id,
|
98
|
+
:name => @jenkins_instance.name)
|
99
|
+
@jenkins_instance.server_version = task.output[:version]
|
100
|
+
respond_for_show
|
101
|
+
end
|
102
|
+
|
103
|
+
api :PUT, "/organizations/:organization_id/jenkins_instances/:id", N_("Set jenkins user")
|
104
|
+
param_group :jenkins_instance_id
|
105
|
+
param :jenkins_user_id, :number, :desc => N_("Jenkins user identifier to be set")
|
106
|
+
def set_jenkins_user
|
107
|
+
@jenkins_instance.jenkins_user = JenkinsUser.find(params[:jenkins_user_id])
|
108
|
+
@jenkins_instance.save!
|
109
|
+
respond_for_show
|
110
|
+
end
|
111
|
+
|
112
|
+
protected
|
113
|
+
|
114
|
+
def find_jenkins_instance
|
115
|
+
@jenkins_instance = JenkinsInstance.find_by_id(params[:id])
|
116
|
+
fail ::Katello::HttpErrors::NotFound, "Could not find Jenkins Instance with id: #{params[:id]}" if @jenkins_instance.nil?
|
117
|
+
@jenkins_instance
|
118
|
+
end
|
119
|
+
|
120
|
+
def jenkins_instance_params
|
121
|
+
params.require(:jenkins_instance).permit(:name, :url, :jenkins_home, :cert_path)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module ForemanPipeline
|
2
|
+
class Api::JenkinsProjectParamsController < Katello::Api::V2::ApiController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
include Api::Rendering
|
6
|
+
|
7
|
+
before_filter :find_jenkins_project_param, :only => [:update]
|
8
|
+
|
9
|
+
api :PUT, "/organizations/:organization_id/jenkins_project_params/:id", N_("Update jenkins project param")
|
10
|
+
param :organization_id, :number, :desc => N_("Organization identifier"), :required => true
|
11
|
+
param :id, :number, :desc => N_("Jenkins project parameter identifier")
|
12
|
+
param :name, String, :desc => N_("Parameter's name")
|
13
|
+
param :type, ["boolean", "string", "text"], :desc => N_("Parameter's type")
|
14
|
+
param :value, String, :desc => N_("Parameter's value")
|
15
|
+
param :description, String, :desc => N_("Parameter's description")
|
16
|
+
def update
|
17
|
+
@jenkins_project_param.update_attributes!(jenkins_project_param_params)
|
18
|
+
@jenkins_project_param.save!
|
19
|
+
respond_for_show(:resource => @jenkins_project_param)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def find_jenkins_project_param
|
25
|
+
@jenkins_project_param = JenkinsProjectParam.find_by_id(params[:id])
|
26
|
+
fail ::Katello::HttpErrors::NotFound, "Could not find Jenkins Project Param with id: #{params[:id]}" if @jenkins_project_param.nil?
|
27
|
+
@jenkins_project_param
|
28
|
+
end
|
29
|
+
|
30
|
+
def jenkins_project_param_params
|
31
|
+
params.require(:jenkins_project_param).permit(:name, :type, :value, :description)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ForemanPipeline
|
2
|
+
class Api::JenkinsProjectsController < Katello::Api::V2::ApiController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
include Api::Rendering
|
6
|
+
|
7
|
+
before_filter :find_jenkins_project, :only => [:show]
|
8
|
+
|
9
|
+
api :GET, "/organizations/:organization_id/jenkins_projects/:id", N_("Get jenkins project by identifier")
|
10
|
+
param :organization_id, :number, :desc => N_("Organization identifier")
|
11
|
+
param :id, :number, :desc => N_("Jenkins project identifier")
|
12
|
+
def show
|
13
|
+
respond_for_show(:resource => @jenkins_project)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def find_jenkins_project
|
19
|
+
@jenkins_project = JenkinsProject.find_by_id(params[:id])
|
20
|
+
fail ::Katello::HttpErrors::NotFound, "Could not find Jenkins Project with id: #{params[:id]}" if @jenkins_project.nil?
|
21
|
+
@jenkins_project
|
22
|
+
end
|
23
|
+
|
24
|
+
def jenkins_project_params
|
25
|
+
params.require(:jenkins_project).permit(:name)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ForemanPipeline
|
2
|
+
class Api::JenkinsRequestsController < Katello::Api::V2::ApiController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
include Api::Rendering
|
6
|
+
|
7
|
+
before_filter :find_job
|
8
|
+
|
9
|
+
api :GET, "/organizations/:organization_id/jenkins_requests/list"
|
10
|
+
param :organization_id, :number, :desc => N_("Organization identifier"), :required => true
|
11
|
+
param :job_id, :number, :desc => N_("Job identifier")
|
12
|
+
param :filter, String, :desc => N_("All jenkins projects with name matching this string will be retrieved")
|
13
|
+
def list
|
14
|
+
fail "filter string not given" if params[:filter].blank?
|
15
|
+
task = async_task(::Actions::ForemanPipeline::Jenkins::List, :job_id => params[:job_id], :filter => params[:filter])
|
16
|
+
respond_for_async(:resource => task)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def find_job
|
22
|
+
@job = Job.find_by_id(params[:job_id])
|
23
|
+
fail ::Katello::HttpErrors::NotFound, "Could not find job with id #{params[:job_id]}" if @job.nil?
|
24
|
+
@job
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module ForemanPipeline
|
2
|
+
class Api::JenkinsUsersController < Katello::Api::V2::ApiController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
include Api::Rendering
|
6
|
+
|
7
|
+
before_filter :find_organization, :only => [:create, :index]
|
8
|
+
before_filter :find_jenkins_user, :only => [:show, :destroy, :update]
|
9
|
+
|
10
|
+
def_param_group :jenkins_user_id do
|
11
|
+
param :organization_id, :number, :desc => N_("organization identifier"), :required => true
|
12
|
+
param :id, :number, :desc => N_("Jenkins user identifier"), :required => true
|
13
|
+
end
|
14
|
+
|
15
|
+
def_param_group :jenkins_user do
|
16
|
+
param :name, String, :desc => N_("Jenkins user name")
|
17
|
+
param :token, String, :desc => N_("Jenkins user token")
|
18
|
+
end
|
19
|
+
|
20
|
+
api :GET, "/organizations/:organization_id/jenkins_users", N_("List jenkins users")
|
21
|
+
param :organization_id, :number, :desc => N_("organization identifier"), :required => true
|
22
|
+
param :name, String, :desc => N_("Name of the jenkins instance")
|
23
|
+
def index
|
24
|
+
ids = JenkinsUser.readable
|
25
|
+
.where(:organization_id => @organization.id)
|
26
|
+
.pluck(:id)
|
27
|
+
filters = [:terms => {:id => ids}]
|
28
|
+
filters << {:term => {:name => params[:name]}} if params[:name]
|
29
|
+
|
30
|
+
options = {
|
31
|
+
:filters => filters,
|
32
|
+
:load_records? => true
|
33
|
+
}
|
34
|
+
respond_for_index(:collection => item_search(JenkinsUser, params, options))
|
35
|
+
end
|
36
|
+
|
37
|
+
api :GET, "/organizations/:organization_id/jenkins_users/:id", N_("Get jenkins user by identifier")
|
38
|
+
param_group :jenkins_user_id
|
39
|
+
def show
|
40
|
+
respond_for_show(:resource => @jenkins_user)
|
41
|
+
end
|
42
|
+
|
43
|
+
api :PUT, "/organizations/:organization_id/jenkins_users/:id", N_("Update jenkins user")
|
44
|
+
param_group :jenkins_user_id
|
45
|
+
param_group :jenkins_user
|
46
|
+
def update
|
47
|
+
if jenkins_user_params[:token].empty? || jenkins_user_params[:token].nil?
|
48
|
+
@jenkins_user.update_attributes!(jenkins_user_params.except(:token).except(:name))
|
49
|
+
else
|
50
|
+
@jenkins_user.update_attributes!(jenkins_user_params.except(:name))
|
51
|
+
end
|
52
|
+
@jenkins_user.save!
|
53
|
+
|
54
|
+
respond_for_show(:resource => @jenkins_user)
|
55
|
+
end
|
56
|
+
|
57
|
+
api :POST, "/organizations/:organization_id/jenkins_users/:id", N_("Update jenkins user")
|
58
|
+
param_group :jenkins_user_id
|
59
|
+
param_group :jenkins_user
|
60
|
+
def create
|
61
|
+
@jenkins_user = JenkinsUser.new(jenkins_user_params)
|
62
|
+
@jenkins_user.organization = @organization
|
63
|
+
@jenkins_user.save!
|
64
|
+
|
65
|
+
respond_for_show(:resource => @jenkins_user)
|
66
|
+
end
|
67
|
+
|
68
|
+
api :DELETE, "/organizations/:organization_id/jenkins_users/:id", N_("Update jenkins user")
|
69
|
+
param_group :jenkins_user_id
|
70
|
+
def destroy
|
71
|
+
@jenkins_user.destroy
|
72
|
+
respond_for_show(:resource => @jenkins_user)
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
protected
|
77
|
+
|
78
|
+
def find_jenkins_user
|
79
|
+
@jenkins_user = JenkinsUser.find_by_id(params[:id])
|
80
|
+
fail ::Katello::HttpErrors::NotFound, "Could not find Jenkins User with id #{params[:id]}" if @jenkins_user.nil?
|
81
|
+
@jenkins_user
|
82
|
+
end
|
83
|
+
|
84
|
+
def jenkins_user_params
|
85
|
+
params.require(:jenkins_user).permit(:name, :token)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,271 @@
|
|
1
|
+
module ForemanPipeline
|
2
|
+
class Api::JobsController < Katello::Api::V2::ApiController
|
3
|
+
respond_to :json
|
4
|
+
|
5
|
+
include Api::Rendering
|
6
|
+
|
7
|
+
before_filter :find_organization, :only => [:create, :index, :add_projects, :available_paths]
|
8
|
+
|
9
|
+
before_filter :find_job, :only => [:update, :show, :destroy, :set_content_view,
|
10
|
+
:set_hostgroup, :set_resource, :available_resources,
|
11
|
+
:set_jenkins, :set_environment, :run_job,
|
12
|
+
:add_projects, :remove_projects, :set_to_environments,
|
13
|
+
:available_paths]
|
14
|
+
|
15
|
+
before_filter :load_search_service, :only => [:index]
|
16
|
+
|
17
|
+
def_param_group :job do
|
18
|
+
param :name, String, :desc => N_("Name of the job"), :required => true
|
19
|
+
param :manual_trigger, :bool, :desc => N_("Allow starting job manually"), :required => false
|
20
|
+
param :sync_trigger, :bool, :desc => N_("Allow starting job on successful repo sync"), :required => false
|
21
|
+
param :levelup_trigger, :bool, :desc => N_("Allow starting job on successful content view publish/promote"), :required => false
|
22
|
+
param :promote, :bool, :desc => N_("Allow starting job manually"), :required => false
|
23
|
+
end
|
24
|
+
|
25
|
+
def_param_group :job_id do
|
26
|
+
param :organization_id, :number, :desc => N_("organization identifier"), :required => true
|
27
|
+
param :id, :number, :desc => N_("job identifier"), :required => true
|
28
|
+
end
|
29
|
+
|
30
|
+
api :GET, "/organizations/:organization_id/jobs", N_("List jobs")
|
31
|
+
param :organization_id, :number, :desc => N_("organization identifier"), :required => true
|
32
|
+
param :name, String, :desc => N_("Name of the job")
|
33
|
+
def index
|
34
|
+
ids = Job.readable.where(:organization_id => @organization.id).pluck(:id)
|
35
|
+
filters = [:terms => {:id => ids}]
|
36
|
+
filters << {:term => {:name => params[:name]}} if params[:name]
|
37
|
+
|
38
|
+
options = {
|
39
|
+
:filters => filters,
|
40
|
+
:load_records? => true
|
41
|
+
}
|
42
|
+
respond_for_index(:collection => item_search(Job, params, options))
|
43
|
+
end
|
44
|
+
|
45
|
+
api :GET, "/organizations/:organization_id/jobs/:id", N_("Get job by identifier")
|
46
|
+
param_group :job_id
|
47
|
+
def show
|
48
|
+
respond_for_show(:resource => @job)
|
49
|
+
end
|
50
|
+
|
51
|
+
api :POST, "/organizations/:organization_id/jobs/", N_("Create new job")
|
52
|
+
param :organization_id, :number, :desc => N_("Organization identifier"), :required => true
|
53
|
+
param_group :job
|
54
|
+
def create
|
55
|
+
@job = Job.new(job_params)
|
56
|
+
@job.organization = @organization
|
57
|
+
@job.save!
|
58
|
+
|
59
|
+
respond_for_show(:resource => @job)
|
60
|
+
end
|
61
|
+
|
62
|
+
api :PUT, "/organizations/:organization_id/jobs/:id", N_("Update job")
|
63
|
+
param_group :job_id
|
64
|
+
param_group :job
|
65
|
+
def update
|
66
|
+
@job.update_attributes!(job_params)
|
67
|
+
@job.save!
|
68
|
+
respond_for_show(:resource => @job)
|
69
|
+
end
|
70
|
+
|
71
|
+
api :DELETE, "/organizations/:organization_id/jobs/:id", N_("Delete job")
|
72
|
+
param_group :job_id
|
73
|
+
def destroy
|
74
|
+
@job.destroy
|
75
|
+
respond_for_show(:resource => @job)
|
76
|
+
end
|
77
|
+
|
78
|
+
api :PUT, "/organizations/:organization_id/jobs/:id/set_content_view", N_("Set content view for job")
|
79
|
+
param_group :job_id
|
80
|
+
param :content_view_id, :number, :desc => N_("Content view id which will be set"), :required => true
|
81
|
+
def set_content_view
|
82
|
+
cv = Katello::ContentView.find(params[:content_view_id])
|
83
|
+
fail Katello::HttpErrors::Conflict, "Only non-composite views are accepted" if cv.composite?
|
84
|
+
@job.content_view = cv
|
85
|
+
@job.save!
|
86
|
+
respond_for_show
|
87
|
+
end
|
88
|
+
|
89
|
+
api :PUT, "/organizations/:organization_id/jobs/:id/set_hostgroup", N_("Set hostgroup for job")
|
90
|
+
param_group :job_id
|
91
|
+
param :hostgroup_id, :number, :desc => N_("Hostgroup id which will be set"), :required => true
|
92
|
+
def set_hostgroup
|
93
|
+
@job.hostgroup = Hostgroup.find(params[:hostgroup_id])
|
94
|
+
@job.compute_resource = nil
|
95
|
+
@job.save!
|
96
|
+
respond_for_show
|
97
|
+
end
|
98
|
+
|
99
|
+
api :PUT, "/organizations/:organization_id/jobs/:id/set_jenkins", N_("Set jenkins instance for job")
|
100
|
+
param_group :job_id
|
101
|
+
param :jenkins_instance_id, :number, :desc => N_("Jenkins Instance id which will be set"), :required => true
|
102
|
+
def set_jenkins
|
103
|
+
instance = JenkinsInstance.find(params[:jenkins_instance_id])
|
104
|
+
@job.jenkins_instance = instance
|
105
|
+
@job.save!
|
106
|
+
respond_for_show
|
107
|
+
end
|
108
|
+
|
109
|
+
api :PUT, "/organizations/:organization_id/jobs/:id/set_environment", N_("Set environment for job")
|
110
|
+
param_group :job_id
|
111
|
+
param :environment_id, :number, :desc => N_("Environment id which will be set"), :required => true
|
112
|
+
def set_environment
|
113
|
+
@job.environment = Katello::KTEnvironment.find(params[:environment_id])
|
114
|
+
@job.to_environments = []
|
115
|
+
@job.save!
|
116
|
+
respond_for_show
|
117
|
+
end
|
118
|
+
|
119
|
+
api :PUT, "/organizations/:organization_id/jobs/:id/set_resource", N_("Set compute resource for job")
|
120
|
+
param_group :job_id
|
121
|
+
param :resource_id, :number, :desc => N_("Compute resource id which will be set"), :required => true
|
122
|
+
def set_resource
|
123
|
+
if @job.available_compute_resources.map(&:id).include? params[:resource_id]
|
124
|
+
@job.compute_resource = ComputeResource.find(params[:resource_id])
|
125
|
+
@job.save!
|
126
|
+
respond_for_show
|
127
|
+
else
|
128
|
+
fail Katello::HttpErrors::Conflict, "Only a Compute Resource configured for Job's Hostgroup may be set."
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
api :PUT, "/organizations/:organization_id/jobs/:id/set_to_environments", N_("Set 'to environments' for the job")
|
133
|
+
param_group :job_id
|
134
|
+
param :path_ids, Array, :desc => N_("Identifiers of environments which are successors of job's environment")
|
135
|
+
def set_to_environments
|
136
|
+
fail Katello::HttpErrors::Conflict, "Job's environment must be assigned before setting 'to environments'." if @job.environment.nil?
|
137
|
+
fail Katello::HttpErrors::Conflict, "Job's environment does not have any successors" if @job.environment.successors.empty?
|
138
|
+
is_ok = params[:to_environment_ids].map do |new_id|
|
139
|
+
@job.environment.successors.map(&:id).include? new_id
|
140
|
+
end.all?
|
141
|
+
if is_ok
|
142
|
+
@job.to_environment_ids = params[:to_environment_ids]
|
143
|
+
@job.save!
|
144
|
+
respond_for_show
|
145
|
+
else
|
146
|
+
fail Katello::HttpErrors::Conflict, "Only environments that are direct successors of Job's Environment may be set as 'to environments'."
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
api :GET, "/organizations/:organization_id/jobs/:id/available_paths", N_("List environment paths available for a job")
|
151
|
+
param_group :job_id
|
152
|
+
def available_paths
|
153
|
+
available = []
|
154
|
+
paths = []
|
155
|
+
if params[:all_paths]
|
156
|
+
available = @organization.readable_promotion_paths
|
157
|
+
paths = available.inject([]) do |result, path|
|
158
|
+
result << { :environments => [@organization.library] + path }
|
159
|
+
end
|
160
|
+
paths = [{ :environments => [@organization.library] }] if paths.empty?
|
161
|
+
else
|
162
|
+
available = @job.environment.full_paths rescue []
|
163
|
+
paths = available.inject([]) do |result, path|
|
164
|
+
result << { :environments => path }
|
165
|
+
end
|
166
|
+
paths = [{ :environments => [] }] if paths.empty?
|
167
|
+
end
|
168
|
+
|
169
|
+
collection = {
|
170
|
+
:results => paths,
|
171
|
+
:total => paths.size,
|
172
|
+
:subtotal => paths.size
|
173
|
+
}
|
174
|
+
|
175
|
+
respond_for_index(:collection => collection)
|
176
|
+
end
|
177
|
+
|
178
|
+
api :GET, "/organizations/:organization_id/jobs/:id/available_resources", N_("List compute resources available for the job")
|
179
|
+
param_group :job_id
|
180
|
+
def available_resources
|
181
|
+
@compute_resources = @job.available_compute_resources
|
182
|
+
render "api/v2/compute_resources/index"
|
183
|
+
end
|
184
|
+
|
185
|
+
api :GET, "/organizations/:organization_id/jobs/:id/run_job", N_("Start job execution")
|
186
|
+
param_group :job_id
|
187
|
+
def run_job
|
188
|
+
if @job.manual_trigger
|
189
|
+
task = async_task(::Actions::ForemanPipeline::Job::RunJobManually, @job)
|
190
|
+
render :nothing => true
|
191
|
+
else
|
192
|
+
fail ::Katello::HttpErrors::Forbidden, "Running manually not allowed for Job: #{@job.name}. Try setting it's :manual_trigger property."
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
api :GET, "/organizations/:organization_id/jobs/:id/add_projects", N_("Add jenkins projects to the job")
|
197
|
+
param_group :job_id
|
198
|
+
param :projects, Array, :desc => N_("Names of the jenkins projects to be added to the job")
|
199
|
+
def add_projects
|
200
|
+
rollback = {:occured => false}
|
201
|
+
Job.transaction do
|
202
|
+
projects = params[:projects].map do |p|
|
203
|
+
JenkinsProject.create(:name => p, :organization => @organization)
|
204
|
+
end
|
205
|
+
projects_to_add = projects.delete_if { |p| @job.jenkins_projects.include? p }
|
206
|
+
@job.jenkins_projects = @job.jenkins_projects + projects_to_add
|
207
|
+
@job.save!
|
208
|
+
|
209
|
+
projects_to_add.each do |project|
|
210
|
+
project.reload
|
211
|
+
task = sync_task(::Actions::ForemanPipeline::Jenkins::GetBuildParams, :job_id => @job.id, :name => project.name)
|
212
|
+
|
213
|
+
unless task.output[:build_params]
|
214
|
+
raise ActiveRecord::Rollback
|
215
|
+
rollback[:occured] = true
|
216
|
+
rollback[:project_name] = project.name
|
217
|
+
end
|
218
|
+
task.output[:build_params].each do |param|
|
219
|
+
new_param = JenkinsProjectParam.new(:name => param[:name],
|
220
|
+
:type => param[:type],
|
221
|
+
:description => param[:description],
|
222
|
+
:value => param[:default])
|
223
|
+
new_param.organization = @organization
|
224
|
+
new_param.jenkins_project = project
|
225
|
+
new_param.save!
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
if rollback[:occured]
|
230
|
+
fail ::Katello::HttpErrors::NotFound, "Could not retrieve build params for Jenkins project: #{rollback[:project_name]}"
|
231
|
+
else
|
232
|
+
respond_for_show
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
api :GET, "/organizations/:organization_id/jobs/:id/remove_projects", N_("Remove jenkins projects from the job")
|
237
|
+
param_group :job_id
|
238
|
+
param :projects, Array, :desc => N_("Identifiers of the projects to be removed from the job")
|
239
|
+
def remove_projects
|
240
|
+
ids = params[:project_ids]
|
241
|
+
jj_projects = JobJenkinsProject.where(:jenkins_project_id => ids)
|
242
|
+
jj_projects.map(&:destroy)
|
243
|
+
respond_for_show
|
244
|
+
end
|
245
|
+
|
246
|
+
protected
|
247
|
+
|
248
|
+
def find_job
|
249
|
+
@job = Job.find_by_id(params[:id])
|
250
|
+
fail ::Katello::HttpErrors::NotFound, "Could not find job with id #{params[:id]}" if @job.nil?
|
251
|
+
@job
|
252
|
+
end
|
253
|
+
|
254
|
+
def job_params
|
255
|
+
params.require(:job).permit(:name, :manual_trigger, :sync_trigger, :levelup_trigger, :projects, :promote)
|
256
|
+
end
|
257
|
+
|
258
|
+
def format_paths(paths)
|
259
|
+
formated_paths = paths.inject([]) do |result, path|
|
260
|
+
result << { :environments => path }
|
261
|
+
end
|
262
|
+
collection = {
|
263
|
+
:results => formated_paths,
|
264
|
+
:total => formated_paths.size,
|
265
|
+
:subtotal => formated_paths.size
|
266
|
+
}
|
267
|
+
respond_for_index(:collection => collection)
|
268
|
+
end
|
269
|
+
|
270
|
+
end
|
271
|
+
end
|