Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API support for adding/removing Policies to/from Policy Profiles #14575

Merged
merged 2 commits into from
Apr 27, 2017
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Review revisions
* miq_policy_set: add_policy, remove_policy, get_policies
* api.yml: add identifier
* move assignment specs
  • Loading branch information
dkorn committed Apr 24, 2017
commit 20ac36a6184fea7cc1ec5daeed47d364fa439ab2
12 changes: 2 additions & 10 deletions app/controllers/api/subcollections/policies.rb
Original file line number Diff line number Diff line change
@@ -8,19 +8,11 @@ def policies_query_resource(object)
end

def policies_assign_resource(object, _type, id = nil, data = nil)
if object.kind_of?(collection_class(:policy_profiles))
object.add_member(policy_specified(id, data, :policies, MiqPolicy))
else
policy_assign_action(object, :policies, id, data)
end
policy_assign_action(object, :policies, id, data)
end

def policies_unassign_resource(object, _type, id = nil, data = nil)
if object.kind_of?(collection_class(:policy_profiles))
object.remove_member(policy_specified(id, data, :policies, MiqPolicy))
else
policy_unassign_action(object, :policies, id, data)
end
policy_unassign_action(object, :policies, id, data)
end

def policies_resolve_resource(object, _type, id = nil, data = nil)
12 changes: 12 additions & 0 deletions app/models/miq_policy_set.rb
Original file line number Diff line number Diff line change
@@ -25,6 +25,18 @@ def destroy_policy_tags
Tag.find_by(:name => "/miq_policy/assignment/#{self.class.to_s.underscore}/#{id}").try!(:destroy)
end

def add_policy(policy)
add_member(policy)
end

def remove_policy(policy)
remove_member(policy)
end

def get_policies
miq_policies
end

def add_to(ids, db)
model = db.respond_to?(:constantize) ? db.constantize : db
ids.each do|id|
8 changes: 6 additions & 2 deletions config/api.yml
Original file line number Diff line number Diff line change
@@ -1160,15 +1160,19 @@
- :name: delete
:identifier: profile_delete
:disabled: true
:subcollection_actions:
:policies_subcollection_actions:
:post:
- :name: assign
:identifier: policy_profile_assign
- :name: unassign
:identifier: policy_profile_assign
- :name: resolve
:subresource_actions:
:policies_subresource_actions:
:post:
- :name: assign
:identifier: policy_profile_assign
- :name: unassign
:identifier: policy_profile_assign
- :name: resolve
:providers:
:description: Providers
5 changes: 5 additions & 0 deletions db/fixtures/miq_product_features.yml
Original file line number Diff line number Diff line change
@@ -1750,6 +1750,11 @@
:feature_type: admin
:hidden: true
:identifier: profile_edit
- :name: Edit Policies Assignment
:description: Edit Policy Profile's policies assignments
:feature_type: admin
:hidden: true
:identifier: policy_profile_assign
- :name: Policies
:description: Everything under Policies Accordion
:protected: true
29 changes: 12 additions & 17 deletions spec/requests/api/policies_assignment_spec.rb
Original file line number Diff line number Diff line change
@@ -118,9 +118,9 @@ def test_unassign_multiple_policies(object_policies_url, collection, subcollecti
api_basic_authorize subcollection_action_identifier(collection, subcollection, :unassign)

object = options[:object]

[p1, p2, p3].each { |p| object.add_policy(p) }
run_post(object_policies_url, gen_request(:unassign, [{:guid => p2.guid}, {:guid => p3.guid}]))
object.reload

expect_multiple_action_result(2)
expect(object.get_policies.size).to eq(1)
@@ -140,25 +140,20 @@ def test_unassign_multiple_policy_profiles(object_policies_url, collection, subc
end

context "Policy profile policies assignment" do
it "adds Policies to a Policy Profile" do
api_basic_authorize
let(:policy_profile_url) { policy_profiles_url(ps2.id) }
let(:policy_profile_policies_url) { "#{policy_profile_url}/policies" }

run_post("#{policy_profiles_url(ps2.id)}/policies", gen_request(:assign, [{"id" => p1.id}, {"id" => p2.id}]))

expect(response).to have_http_status(:ok)
expect(response.parsed_body["results"].count).to eq(2)
expect(ps2.reload.miq_policies.count).to eq(3)
expect(response.parsed_body["results"].first["guid"]).to eq(p1.guid)
expect(response.parsed_body["results"].second["guid"]).to eq(p2.guid)
it "adds Policies to a Policy Profile" do
test_assign_multiple_policies(policy_profile_url,
policy_profile_policies_url,
:policy_profiles,
:policies,
:object => ps2,
:policies => [p1, p2, p3])
end

it "removes a Policy from a Policy Profile" do
api_basic_authorize

run_post("#{policy_profiles_url(ps2.id)}/policies", gen_request(:unassign, [{"id" => p3.id}]))

expect(response).to have_http_status(:ok)
expect(ps2.reload.miq_policies.count).to eq(0)
it "removes Policies from a Policy Profile" do
test_unassign_multiple_policies(policy_profile_policies_url, :policy_profiles, :policies, :object => ps2)
end
end