foreman_content 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +113 -0
  3. data/Rakefile +111 -0
  4. data/app/assets/javascripts/content/content.js +12 -0
  5. data/app/assets/stylesheets/content/application.css +13 -0
  6. data/app/controllers/content/api/repositories_controller.rb +27 -0
  7. data/app/controllers/content/gpg_keys_controller.rb +42 -0
  8. data/app/controllers/content/products_controller.rb +51 -0
  9. data/app/controllers/content/repositories_controller.rb +57 -0
  10. data/app/helpers/content/application_helper.rb +5 -0
  11. data/app/helpers/content/repositories_helper.rb +56 -0
  12. data/app/models/content/custom_repository_paths.rb +27 -0
  13. data/app/models/content/environment_product.rb +19 -0
  14. data/app/models/content/gpg_key.rb +32 -0
  15. data/app/models/content/host_product.rb +20 -0
  16. data/app/models/content/hostgroup_product.rb +19 -0
  17. data/app/models/content/operatingsystem_repository.rb +19 -0
  18. data/app/models/content/orchestration/pulp.rb +93 -0
  19. data/app/models/content/product.rb +28 -0
  20. data/app/models/content/product_operatingsystem.rb +19 -0
  21. data/app/models/content/remote/pulp/repository.rb +46 -0
  22. data/app/models/content/repository.rb +70 -0
  23. data/app/models/content/validators/content_validator.rb +25 -0
  24. data/app/models/content/validators/description_format.rb +24 -0
  25. data/app/models/content/validators/name_format.rb +40 -0
  26. data/app/models/content/validators/no_trailing_space.rb +27 -0
  27. data/app/models/setting/content.rb +42 -0
  28. data/app/overrides/add_host_conent_tab.rb +9 -0
  29. data/app/overrides/add_hostgroup_conent_tab.rb +9 -0
  30. data/app/overrides/add_os_conent_tab.rb +9 -0
  31. data/app/services/content/pulp_event_handler.rb +25 -0
  32. data/app/views/content/gpg_keys/_form.html.erb +8 -0
  33. data/app/views/content/gpg_keys/edit.html.erb +3 -0
  34. data/app/views/content/gpg_keys/index.html.erb +20 -0
  35. data/app/views/content/gpg_keys/new.html.erb +3 -0
  36. data/app/views/content/products/_form.html.erb +26 -0
  37. data/app/views/content/products/_form_tab.html.erb +3 -0
  38. data/app/views/content/products/_host_tab_pane.html.erb +5 -0
  39. data/app/views/content/products/_hostgroup_tab_pane.html.erb +5 -0
  40. data/app/views/content/products/_operatingsystem_tab_pane.html.erb +5 -0
  41. data/app/views/content/products/edit.html.erb +3 -0
  42. data/app/views/content/products/index.html.erb +27 -0
  43. data/app/views/content/products/new.html.erb +3 -0
  44. data/app/views/content/products/welcome.html.erb +8 -0
  45. data/app/views/content/repositories/_form.html.erb +30 -0
  46. data/app/views/content/repositories/edit.html.erb +3 -0
  47. data/app/views/content/repositories/index.html.erb +32 -0
  48. data/app/views/content/repositories/new.html.erb +3 -0
  49. data/app/views/content/repositories/show.html.erb +98 -0
  50. data/app/views/content/repositories/welcome.html.erb +8 -0
  51. data/config/routes.rb +36 -0
  52. data/db/migrate/20130702140034_create_content_repositories.rb +19 -0
  53. data/db/migrate/20130702162629_create_content_products.rb +10 -0
  54. data/db/migrate/20130709001120_create_content_gpg_keys.rb +10 -0
  55. data/db/migrate/20130717032320_create_content_environments_products.rb +9 -0
  56. data/db/migrate/20130722084911_create_content_operatingsystem_repositories.rb +9 -0
  57. data/db/migrate/20130723084911_create_content_hostgroup_products.rb +9 -0
  58. data/db/migrate/20130723124911_create_content_host_products.rb +9 -0
  59. data/db/migrate/20130729032320_create_content_product_operatingsystems.rb +9 -0
  60. data/lib/content/engine.rb +59 -0
  61. data/lib/content/version.rb +3 -0
  62. data/lib/content_environment.rb +13 -0
  63. data/lib/content_home_helper_patch.rb +23 -0
  64. data/lib/content_host.rb +55 -0
  65. data/lib/content_hostgroup.rb +22 -0
  66. data/lib/content_operatingsystem.rb +17 -0
  67. data/lib/content_redhat.rb +36 -0
  68. data/lib/content_taxonomy.rb +18 -0
  69. data/lib/foreman_content.rb +4 -0
  70. data/lib/pulp_configuration.rb +23 -0
  71. data/lib/tasks/content_tasks.rake +4 -0
  72. data/test/content_test.rb +7 -0
  73. data/test/fixtures/content/products.yml +11 -0
  74. data/test/fixtures/content/repositories.yml +11 -0
  75. data/test/integration/navigation_test.rb +10 -0
  76. data/test/test_helper.rb +23 -0
  77. data/test/unit/content/description_format_validator_test.rb +20 -0
  78. data/test/unit/content/name_format_validator_test.rb +28 -0
  79. data/test/unit/content/product_validation_test.rb +18 -0
  80. data/test/unit/content/repositories_test.rb +7 -0
  81. metadata +194 -0
@@ -0,0 +1,36 @@
1
+ module ContentRedhat
2
+ def self.included(base)
3
+ base.send(:include, InstanceMethods)
4
+ base.class_eval do
5
+ alias_method_chain :medium_uri, :content_uri
6
+ end
7
+ end
8
+
9
+ module InstanceMethods
10
+ def medium_uri_with_content_uri host, url = nil
11
+ if url.nil? && (full_path = Content::Repository.available_for_host(host).kickstart.first.try(:full_path))
12
+ URI.parse(full_path)
13
+ else
14
+ medium_uri_without_content_uri(host, url)
15
+ end
16
+ end
17
+
18
+ # return an array of repositories for kickstart script as additional repos
19
+ # to the kickstart main repo, this list will typically include updates and epel
20
+ def repos host
21
+ host.attached_repositories.yum.map{ |repo| format_repo(repo) }
22
+ end
23
+
24
+ private
25
+ # convert a repository to a format that kickstart script can consume
26
+ def format_repo repo
27
+ {
28
+ :baseurl => repo.full_path,
29
+ :name => repo.to_label,
30
+ :description => repo.product.description,
31
+ :enabled => repo.enabled,
32
+ :gpgcheck => !!repo.gpg_key
33
+ }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ module ContentTaxonomy
2
+ def self.included(base)
3
+ base.send(:include, InstanceMethods)
4
+
5
+ base.class_eval do
6
+ has_many :products, :through => :taxable_taxonomies, :source => :taxable, :source_type => 'Content::Product'
7
+ alias_method_chain :dup, :content_dup
8
+ end
9
+ end
10
+
11
+ module InstanceMethods
12
+ def dup_with_content_dup
13
+ new = dup_without_content_dup
14
+ new.products = products
15
+ new
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,4 @@
1
+ require "content/engine"
2
+
3
+ module Content
4
+ end
@@ -0,0 +1,23 @@
1
+ require 'runcible'
2
+
3
+ class PulpConfiguration
4
+ def self.initialize_runcible
5
+ Runcible::Base.config = runcible_config
6
+ end
7
+
8
+ def self.runcible_config
9
+ pulp_url = URI(Setting.pulp_url)
10
+ {
11
+ :url => "#{pulp_url.scheme}://#{pulp_url.host}:#{pulp_url.port}",
12
+ :api_path => pulp_url.path,
13
+ :user => "admin",
14
+ :timeout => 60,
15
+ :open_timeout => 60,
16
+ :oauth => { :oauth_secret => Setting['pulp_oauth_secret'],
17
+ :oauth_key => Setting['pulp_oauth_key'] },
18
+ :logging => { :logger => Rails.logger,
19
+ :exception => true,
20
+ :debug => true }
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :content do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class ContentTest < ActiveSupport::TestCase
4
+ test "truth" do
5
+ assert_kind_of Module, Content
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
2
+
3
+ # This model initially had no columns defined. If you add columns to the
4
+ # model remove the '{}' from the fixture names and add the columns immediately
5
+ # below each fixture, per the syntax in the comments below
6
+ #
7
+ one: {}
8
+ # column: value
9
+ #
10
+ two: {}
11
+ # column: value
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
2
+
3
+ # This model initially had no columns defined. If you add columns to the
4
+ # model remove the '{}' from the fixture names and add the columns immediately
5
+ # below each fixture, per the syntax in the comments below
6
+ #
7
+ one: {}
8
+ # column: value
9
+ #
10
+ two: {}
11
+ # column: value
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActionDispatch::IntegrationTest
4
+ fixtures :all
5
+
6
+ # test "the truth" do
7
+ # assert true
8
+ # end
9
+ end
10
+
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+ require File.join("foreman_app/config/environment.rb")
6
+
7
+ require 'test/unit'
8
+ require 'content'
9
+ require 'rails/test_help'
10
+
11
+ Rails.backtrace_cleaner.remove_silencers!
12
+
13
+ class ActiveSupport::TestCase
14
+ foreman_dir = File.expand_path("../foreman_app", File.join(Dir.pwd, __FILE__))
15
+ fixture_path=File.join(foreman_dir, "test/fixtures")
16
+ fixtures :all
17
+
18
+ set_fixture_class({ :hosts => Host::Base })
19
+ end
20
+
21
+ def set_session_user
22
+ SETTINGS[:login] ? {:user => User.admin.id, :expires_at => 5.minutes.from_now} : {}
23
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ module Content
4
+ class DescriptionFormatValidatorModelForTest
5
+ include ActiveModel::Validations
6
+ attr_accessor :desc
7
+ def initialize(adescription); @desc = adescription; end
8
+ validates_with Content::Validators::DescriptionFormat, :attributes => :desc
9
+ end
10
+
11
+ class DescriptionFormatValidatorTest < ActiveSupport::TestCase
12
+ test "should enforce max length" do
13
+ assert !DescriptionFormatValidatorModelForTest.new("t" * (Content::Validators::DescriptionFormat::MAX_LENGTH + 1)).valid?
14
+ end
15
+
16
+ test "should be valid with allowed number of characters" do
17
+ assert DescriptionFormatValidatorModelForTest.new("a description").valid?
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ module Content
4
+ class NameFormatValidatorModelForTest
5
+ include ActiveModel::Validations
6
+ attr_accessor :name
7
+ def initialize(aname); @name = aname; end
8
+ validates_with Content::Validators::NameFormat, :attributes => :name
9
+ end
10
+
11
+ class NameFormatValidatorTest < ActiveSupport::TestCase
12
+ test "should enforce min length" do
13
+ assert !NameFormatValidatorModelForTest.new("").valid?
14
+ end
15
+
16
+ test "should enforce max length" do
17
+ assert !NameFormatValidatorModelForTest.new("t" * (Content::Validators::NameFormat::MAX_LENGTH + 1)).valid?
18
+ end
19
+
20
+ test "should be valid with allowed characters" do
21
+ assert NameFormatValidatorModelForTest.new("abc123 _-").valid?
22
+ end
23
+
24
+ test "should be invalid with a trailing space" do
25
+ assert !NameFormatValidatorModelForTest.new("abc ").valid?
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ module Content
4
+ class ProductValidationTest < ActiveSupport::TestCase
5
+ test "valid product should be valid" do
6
+ assert Product.new(:name => "test", :description => "a description").valid?
7
+ end
8
+
9
+ test "should fail validation when the name is invalid" do
10
+ assert !Product.new(:name => nil, :description => "a description").valid?
11
+ assert !Product.new(:name => "t" * (Validators::NameFormat::MAX_LENGTH + 1), :description => "a description").valid?
12
+ end
13
+
14
+ test "should fail validation when the description is invalid" do
15
+ assert !Product.new(:name => "test", :description => "t" * (Validators::DescriptionFormat::MAX_LENGTH + 1)).valid?
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class Content::RepositoriesTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman_content
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Dmitri Dolguikh
8
+ - Amos Benari
9
+ - Ohad Levy
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-08-01 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: 3.2.8
29
+ - !ruby/object:Gem::Dependency
30
+ name: logging
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 1.8.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: 1.8.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: runcible
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ version: 0.4.10
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 0.4.10
57
+ - !ruby/object:Gem::Dependency
58
+ name: deface
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ description: Add Foreman support for software repositories and puppet environments
72
+ management.
73
+ email:
74
+ - witlessbird@gmail.com
75
+ - abenari@redhat.com
76
+ - ohadlevy@gmail.com
77
+ executables: []
78
+ extensions: []
79
+ extra_rdoc_files:
80
+ - README.md
81
+ files:
82
+ - app/models/setting/content.rb
83
+ - app/models/content/remote/pulp/repository.rb
84
+ - app/models/content/host_product.rb
85
+ - app/models/content/product_operatingsystem.rb
86
+ - app/models/content/gpg_key.rb
87
+ - app/models/content/orchestration/pulp.rb
88
+ - app/models/content/hostgroup_product.rb
89
+ - app/models/content/custom_repository_paths.rb
90
+ - app/models/content/operatingsystem_repository.rb
91
+ - app/models/content/validators/no_trailing_space.rb
92
+ - app/models/content/validators/name_format.rb
93
+ - app/models/content/validators/content_validator.rb
94
+ - app/models/content/validators/description_format.rb
95
+ - app/models/content/repository.rb
96
+ - app/models/content/product.rb
97
+ - app/models/content/environment_product.rb
98
+ - app/services/content/pulp_event_handler.rb
99
+ - app/overrides/add_os_conent_tab.rb
100
+ - app/overrides/add_host_conent_tab.rb
101
+ - app/overrides/add_hostgroup_conent_tab.rb
102
+ - app/controllers/content/api/repositories_controller.rb
103
+ - app/controllers/content/repositories_controller.rb
104
+ - app/controllers/content/products_controller.rb
105
+ - app/controllers/content/gpg_keys_controller.rb
106
+ - app/views/content/gpg_keys/_form.html.erb
107
+ - app/views/content/gpg_keys/new.html.erb
108
+ - app/views/content/gpg_keys/index.html.erb
109
+ - app/views/content/gpg_keys/edit.html.erb
110
+ - app/views/content/repositories/_form.html.erb
111
+ - app/views/content/repositories/new.html.erb
112
+ - app/views/content/repositories/show.html.erb
113
+ - app/views/content/repositories/index.html.erb
114
+ - app/views/content/repositories/welcome.html.erb
115
+ - app/views/content/repositories/edit.html.erb
116
+ - app/views/content/products/_form.html.erb
117
+ - app/views/content/products/new.html.erb
118
+ - app/views/content/products/_operatingsystem_tab_pane.html.erb
119
+ - app/views/content/products/_form_tab.html.erb
120
+ - app/views/content/products/_hostgroup_tab_pane.html.erb
121
+ - app/views/content/products/index.html.erb
122
+ - app/views/content/products/_host_tab_pane.html.erb
123
+ - app/views/content/products/welcome.html.erb
124
+ - app/views/content/products/edit.html.erb
125
+ - app/helpers/content/repositories_helper.rb
126
+ - app/helpers/content/application_helper.rb
127
+ - app/assets/javascripts/content/content.js
128
+ - app/assets/stylesheets/content/application.css
129
+ - config/routes.rb
130
+ - db/migrate/20130702162629_create_content_products.rb
131
+ - db/migrate/20130709001120_create_content_gpg_keys.rb
132
+ - db/migrate/20130722084911_create_content_operatingsystem_repositories.rb
133
+ - db/migrate/20130717032320_create_content_environments_products.rb
134
+ - db/migrate/20130723124911_create_content_host_products.rb
135
+ - db/migrate/20130729032320_create_content_product_operatingsystems.rb
136
+ - db/migrate/20130702140034_create_content_repositories.rb
137
+ - db/migrate/20130723084911_create_content_hostgroup_products.rb
138
+ - lib/content_hostgroup.rb
139
+ - lib/content_environment.rb
140
+ - lib/content_redhat.rb
141
+ - lib/content_home_helper_patch.rb
142
+ - lib/content_taxonomy.rb
143
+ - lib/content/engine.rb
144
+ - lib/content/version.rb
145
+ - lib/content_operatingsystem.rb
146
+ - lib/foreman_content.rb
147
+ - lib/tasks/content_tasks.rake
148
+ - lib/content_host.rb
149
+ - lib/pulp_configuration.rb
150
+ - Rakefile
151
+ - README.md
152
+ - test/unit/content/description_format_validator_test.rb
153
+ - test/unit/content/repositories_test.rb
154
+ - test/unit/content/product_validation_test.rb
155
+ - test/unit/content/name_format_validator_test.rb
156
+ - test/test_helper.rb
157
+ - test/fixtures/content/products.yml
158
+ - test/fixtures/content/repositories.yml
159
+ - test/content_test.rb
160
+ - test/integration/navigation_test.rb
161
+ homepage: https://github.com/theforeman/foreman_content
162
+ licenses:
163
+ - GPL-3
164
+ metadata: {}
165
+ post_install_message:
166
+ rdoc_options: []
167
+ require_paths:
168
+ - lib
169
+ required_ruby_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ requirements: []
180
+ rubyforge_project:
181
+ rubygems_version: 2.0.5
182
+ signing_key:
183
+ specification_version: 4
184
+ summary: Add Foreman support for content management.
185
+ test_files:
186
+ - test/unit/content/description_format_validator_test.rb
187
+ - test/unit/content/repositories_test.rb
188
+ - test/unit/content/product_validation_test.rb
189
+ - test/unit/content/name_format_validator_test.rb
190
+ - test/test_helper.rb
191
+ - test/fixtures/content/products.yml
192
+ - test/fixtures/content/repositories.yml
193
+ - test/content_test.rb
194
+ - test/integration/navigation_test.rb