Skip to content
This repository was archived by the owner on Aug 28, 2023. It is now read-only.

Commit bfc2122

Browse files
authored
Merge pull request #28 from martinpovolny/manifest_upload
Implement upload of the manifest.
2 parents 6d08f48 + 0207d55 commit bfc2122

File tree

3 files changed

+85
-10
lines changed

3 files changed

+85
-10
lines changed

app/controllers/api/red_hat_migration_analytics_controller.rb

+42-9
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ def index
55
manifest = self.class.parse_manifest
66
res = {
77
:manifest_version => manifest[:version],
8+
:default_manifest_version => manifest[:default_version],
89
:using_default_manifest => manifest[:using_default]
910
}
1011
render_resource :red_hat_migration_analytics, res
@@ -32,6 +33,23 @@ def bundle_collection(type, data)
3233
action_result(false, e.to_s)
3334
end
3435

36+
def import_manifest_collection(type, data)
37+
check_feature_enabled
38+
self.class.store_manifest(data['manifest'])
39+
action_result(true, 'imported manifest')
40+
end
41+
42+
def reset_manifest_collection(type, data)
43+
check_feature_enabled
44+
path = self.class.user_manifest_path
45+
if File.exist?(path)
46+
File.unlink(path)
47+
action_result(true, 'deleted manifest')
48+
else
49+
action_result(true, 'manifest does not exist')
50+
end
51+
end
52+
3553
private
3654

3755
def check_feature_enabled
@@ -46,18 +64,33 @@ def find_provider_ids(type)
4664
end
4765

4866
class << self
49-
def parse_manifest
50-
default_manifest_path = Cfme::MigrationAnalytics::Engine.root.join("config", "default-manifest.json")
51-
user_manifest_path = Pathname.new("/opt/rh/cfme-migration_analytics/manifest.json")
52-
manifest_path = user_manifest_path.exist? ? user_manifest_path : default_manifest_path
5367

54-
manifest = Vmdb::Settings.filter_passwords!(load_manifest(manifest_path))
68+
def default_manifest_path
69+
@default_manifest_path ||= Cfme::MigrationAnalytics::Engine.root.join("config", "default-manifest.json")
70+
end
71+
72+
def user_manifest_path
73+
@user_manifest_path ||= Pathname.new("/opt/rh/cfme-migration_analytics/manifest.json")
74+
end
5575

76+
def store_manifest(manifest)
77+
user_manifest_path.write(JSON.generate(manifest))
78+
end
79+
80+
def parse_manifest
81+
default_manifest = Vmdb::Settings.filter_passwords!(load_manifest(default_manifest_path))
82+
using_default = !user_manifest_path.exist?
83+
manifest = if using_default
84+
default_manifest
85+
else
86+
Vmdb::Settings.filter_passwords!(load_manifest(user_manifest_path))
87+
end
5688
{
57-
:path => manifest_path,
58-
:body => manifest,
59-
:version => manifest.dig("manifest", "version"),
60-
:using_default => manifest_path == default_manifest_path
89+
:path => using_default ? default_manifest : user_manifest_path,
90+
:body => manifest,
91+
:version => manifest.dig("manifest", "version"),
92+
:default_version => default_manifest.dig("manifest", "version"),
93+
:using_default => using_default
6194
}
6295
end
6396

config/api.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,9 @@
1414
:identifier: red_hat_migration_analytics
1515
:post:
1616
- :name: bundle
17-
:identifier: red_hat_migration_analytics
17+
:identifier: red_hat_migration_analytics
18+
- :name: import_manifest
19+
:identifier: red_hat_migration_analytics
20+
- :name: reset_manifest
21+
:identifier: red_hat_migration_analytics
22+

spec/requests/red_hat_migration_analytics_spec.rb

+37
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
end
1313

1414
it "with the built-in manifest" do
15+
expect(Api::RedHatMigrationAnalyticsController).to receive(:user_manifest_path).and_return(Pathname.new('/non-existent-file'))
1516
get(api_red_hat_migration_analytics_url)
1617

1718
expect(response).to have_http_status(:ok)
@@ -25,6 +26,7 @@
2526
"ssh_key_data" => nil
2627
}
2728

29+
expect(Api::RedHatMigrationAnalyticsController).to receive(:user_manifest_path).and_return(Pathname.new('/non-existent-file'))
2830
expect(Api::RedHatMigrationAnalyticsController).to receive(:load_manifest).and_return(malicious_manifest)
2931

3032
get(api_red_hat_migration_analytics_url)
@@ -58,5 +60,40 @@
5860
)
5961
expect(response).to have_http_status(:ok)
6062
end
63+
64+
it "/api/red_hat_migration_analytics/:id import_manifest action" do
65+
api_basic_authorize "red_hat_migration_analytics"
66+
67+
expect(Api::RedHatMigrationAnalyticsController).to receive(:store_manifest)
68+
69+
post(api_red_hat_migration_analytics_url,
70+
:params => {
71+
"action" => "import_manifest",
72+
"manifest" => { "foo" => "bar "}
73+
})
74+
75+
expect(response.parsed_body).to include(
76+
"success" => true,
77+
"message" => "imported manifest"
78+
)
79+
expect(response).to have_http_status(:ok)
80+
end
81+
82+
it "/api/red_hat_migration_analytics/:id reset_manifest action" do
83+
api_basic_authorize "red_hat_migration_analytics"
84+
85+
expect(Api::RedHatMigrationAnalyticsController).to receive(:user_manifest_path).and_return(Pathname.new('/non-existent-file'))
86+
87+
post(api_red_hat_migration_analytics_url,
88+
:params => {
89+
"action" => "reset_manifest"
90+
})
91+
92+
expect(response.parsed_body).to include(
93+
"success" => true,
94+
"message" => "manifest does not exist"
95+
)
96+
expect(response).to have_http_status(:ok)
97+
end
6198
end
6299
end

0 commit comments

Comments
 (0)