foreman_packages 0.0.1

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 (38) hide show
  1. data/LICENSE +619 -0
  2. data/README.md +38 -0
  3. data/Rakefile +47 -0
  4. data/app/controllers/foreman_packages/hosts_controller.rb +11 -0
  5. data/app/controllers/foreman_packages/packages_controller.rb +84 -0
  6. data/app/helpers/concerns/foreman_packages/hosts_helper_extensions.rb +13 -0
  7. data/app/helpers/packages_helper.rb +4 -0
  8. data/app/models/concerns/foreman_packages/host_extensions.rb +19 -0
  9. data/app/models/package.rb +81 -0
  10. data/app/overrides/dashboard/index/sample_override.html.erb.deface +4 -0
  11. data/app/uploaders/attachment_uploader.rb +16 -0
  12. data/app/uploaders/avatar_uploader.rb +57 -0
  13. data/app/views/dashboard/_foreman_packages_widget.html.erb +2 -0
  14. data/app/views/foreman_packages/hosts/hosts/new_action.html.erb +1 -0
  15. data/app/views/foreman_packages/hosts/new_action.html.erb +1 -0
  16. data/app/views/foreman_packages/layouts/layouts/new_layout.html.erb +0 -0
  17. data/app/views/foreman_packages/layouts/new_layout.html.erb +0 -0
  18. data/app/views/foreman_packages/packages/_form.html.erb +109 -0
  19. data/app/views/foreman_packages/packages/_list.html.erb +69 -0
  20. data/app/views/foreman_packages/packages/edit.html.erb +1 -0
  21. data/app/views/foreman_packages/packages/index.html.erb +5 -0
  22. data/app/views/foreman_packages/packages/new.html.erb +1 -0
  23. data/app/views/foreman_packages/packages/show.html.erb +77 -0
  24. data/app/views/foreman_packages/packages/upload.html.erb +4 -0
  25. data/config/routes.rb +9 -0
  26. data/db/migrate/20150921011935_create_foreman_packages_packages.rb +24 -0
  27. data/lib/foreman_packages/engine.rb +95 -0
  28. data/lib/foreman_packages/version.rb +3 -0
  29. data/lib/foreman_packages.rb +4 -0
  30. data/lib/tasks/foreman_packages_tasks.rake +49 -0
  31. data/locale/Makefile +62 -0
  32. data/locale/en/foreman_packages.po +19 -0
  33. data/locale/foreman_packages.pot +19 -0
  34. data/locale/gemspec.rb +2 -0
  35. data/test/factories/foreman_packages_factories.rb +5 -0
  36. data/test/test_plugin_helper.rb +6 -0
  37. data/test/unit/foreman_packages_test.rb +11 -0
  38. metadata +117 -0
data/Rakefile ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'ForemanPackages'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+ task default: :test
37
+
38
+ begin
39
+ require 'rubocop/rake_task'
40
+ RuboCop::RakeTask.new
41
+ rescue => _
42
+ puts 'Rubocop not loaded.'
43
+ end
44
+
45
+ task :default do
46
+ Rake::Task['rubocop'].execute
47
+ end
@@ -0,0 +1,11 @@
1
+ module ForemanPackages
2
+ # Example: Plugin's HostsController inherits from Foreman's HostsController
3
+ class HostsController < ::HostsController
4
+ # change layout if needed
5
+ # layout 'foreman_packages/layouts/new_layout'
6
+
7
+ def new_action
8
+ # automatically renders view/foreman_packages/hosts/new_action
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,84 @@
1
+ module ForemanPackages
2
+ class PackagesController < ApplicationController
3
+ # GET /packages
4
+ # GET /packages.json
5
+ def index
6
+ @packages = package.all.paginate(:page => params[:page])
7
+
8
+ respond_to do |format|
9
+ format.html # index.html.erb
10
+ format.json { render json: @packages }
11
+ end
12
+ end
13
+
14
+ # GET /packages/1
15
+ # GET /packages/1.json
16
+ def show
17
+ @package = package.find(params[:id])
18
+
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.json { render json: @package }
22
+ end
23
+ end
24
+
25
+ # GET /packages/new
26
+ # GET /packages/new.json
27
+ def new
28
+ @package = package.new
29
+
30
+ respond_to do |format|
31
+ format.html # new.html.erb
32
+ format.json { render json: @package }
33
+ end
34
+ end
35
+
36
+ # GET /packages/1/edit
37
+ def edit
38
+ @package = package.find(params[:id])
39
+ end
40
+
41
+ # POST /packages
42
+ # POST /packages.json
43
+ def create
44
+ @package = package.new(params[:package])
45
+ @package.filename = params[:package][:filename].original_filename
46
+ respond_to do |format|
47
+ if @package.save
48
+ format.html { redirect_to @package, notice: 'package was successfully created.' }
49
+ format.json { render json: @package, status: :created, location: @package }
50
+ else
51
+ format.html { render action: "new" }
52
+ format.json { render json: @package.errors, status: :unprocessable_entity }
53
+ end
54
+ end
55
+ end
56
+
57
+ # PUT /packages/1
58
+ # PUT /packages/1.json
59
+ def update
60
+ @package = package.find(params[:id])
61
+ @package.filename = params[:package][:filename].original_filename
62
+ respond_to do |format|
63
+ if @package.update_attributes(params[:package])
64
+ format.html { redirect_to @package, notice: 'package was successfully updated.' }
65
+ format.json { head :no_content }
66
+ else
67
+ format.html { render action: "edit" }
68
+ format.json { render json: @package.errors, status: :unprocessable_entity }
69
+ end
70
+ end
71
+ end
72
+
73
+ # DELETE /packages/1
74
+ # DELETE /packages/1.json
75
+ def destroy
76
+ @package = package.find(params[:id])
77
+ @package.destroy
78
+
79
+ respond_to do |format|
80
+ format.html { redirect_to packages_url }
81
+ format.json { head :no_content }
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,13 @@
1
+ module ForemanPackages
2
+ module HostsHelperExtensions
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ # execute callbacks
7
+ end
8
+
9
+ # create or overwrite instance methods...
10
+ def instance_method_name
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module ForemanPackages
2
+ module SypackagesHelper
3
+ end
4
+ end
@@ -0,0 +1,19 @@
1
+ module ForemanPackages
2
+ module HostExtensions
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ # execute callbacks
7
+ end
8
+
9
+ # create or overwrite instance methods...
10
+ def instance_method_name
11
+ end
12
+
13
+ module ClassMethods
14
+ # create or overwrite class methods...
15
+ def class_method_name
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,81 @@
1
+ module ForemanPackages
2
+ class Package < ActiveRecord::Base
3
+ require "fileutils"
4
+ attr_accessible :name, :ensure, :file_path, :file_ensure, :file_source, :file_mode, :file_onwer, :file_group, :file_notify, :file_require, :service_name, :service_ensure, :service_enable, :service_hasstatus, :service_hasrestart, :filename, :file_cache
5
+
6
+ mount_uploader :filename, ForemanPackages::AttachmentUploader
7
+ after_create :create_dir
8
+ after_update :create_dir
9
+ after_update :change_dir
10
+ #after_destory :destory_dir
11
+ def create_dir
12
+ #目前用 "/home/stdtnt/app/"代替 "/etc/puppet/environments/production/modules/packages"
13
+ #该处需要注意权限问题,当前用户是否具有该目录的操作权限
14
+ root_dir_name = "/etc/puppet/environments/production/modules/packages/"
15
+ self.destory_dir #默认删除该目录,然后重新创建
16
+ dir_exist_status = File.exist?(root_dir_name) #判断该目录是否存在
17
+ if !dir_exist_status
18
+ #创建目录结构
19
+ Dir::mkdir(root_dir_name)
20
+ Dir::mkdir(root_dir_name + "files")
21
+ Dir::mkdir(root_dir_name + "manifests")
22
+
23
+ #生成files下welcome.conf文件
24
+ files_welcome_File = File.new(root_dir_name + "files/welcome.conf", "w+")
25
+ files_welcome_File.close
26
+ #生成manifests下init.pp文件
27
+ main_init_File = File.new(root_dir_name +"manifests/init.pp", "w+")
28
+ if main_init_File
29
+ main_init_File.syswrite(self.create_content)
30
+ else
31
+ puts "Unable to open file!"
32
+ end
33
+ main_init_File.close
34
+ end
35
+
36
+ #self.change_dir
37
+
38
+ end
39
+
40
+
41
+ def destory_dir
42
+ #目前用 "/home/stdtnt/app/"代替 "/etc/puppet/environments/production/modules/users"
43
+ #该处需要注意权限问题,当前用户是否具有该目录的操作权限
44
+ root_dir_name = "/etc/puppet/environments/production/modules/packages"
45
+ #判断该目录是否存在
46
+ dir_exist_status = File.exist?(root_dir_name )
47
+ if dir_exist_status
48
+ #使用fileUtils.rm_r 删除该文件夹及其以下所有内容
49
+ FileUtils.rm_r root_dir_name
50
+ end
51
+ end
52
+
53
+ def create_content
54
+ user_content = "class packages {" + "\n" + "\s\s" + "package{'" + self.name + "':" + "\n\s\s\s\s" + "ensure => '" + self.ensure + "'," + "\n\s\s" +"}" + "\n"
55
+
56
+
57
+ file_content = "\s\s" + "file{'"+ self.file_path + "':" + "\n\s\s\s\s" + "ensure => '" + self.file_ensure + "'," + "\n\s\s\s\s" + "source => '" + self.file_source + "mode => '" + self.file_mode + "'," + "\n\s\s\s\s" + "onwer => '" + self.file_onwer + "group => '" + self.file_group + "'," + "\n\s\s\s\s" + "notify=> Service['" + self.file_notify + "']," + "\n\s\s\s\s" + "require=> Package['" + self.file_require + "']," + "\n\s\s" +"}" + "\n\s\s"
58
+
59
+
60
+ service_content = "\s\s" + "service{'"+ self.service_name + "':" + "\n\s\s\s\s" + "ensure => '" + self.service_ensure + "'," + "\n\s\s\s\s" + "enable => '" + self.service_enable + "hasstatus => '" + self.service_hasstatus + "'," + "\n\s\s\s\s" + "hasrestart => '" + self.service_hasrestart + "," + "\n\s\s" +"}" + "\n\s\s"
61
+ rs = user_content + file_content + service_content + "\n" + "}"
62
+ return rs
63
+ end
64
+
65
+
66
+ def change_dir
67
+ upload_dir = "/home/stdtnt/workspaces/foreman/public/uploads/sypackage/filename/" + self.id.to_s
68
+ root_file_dir_name = "/home/stdtnt/app/packages/files/"
69
+ # FileUtils.cd(upload_dir, :verbose => true)
70
+ # FileUtils.cp_r Dir.glob('*.*'), "/home/stdtnt/app/packages/files/", :noop => true, :verbose => true
71
+ # list=Dir.entries(upload_dir)
72
+ # list.each_index do |x|
73
+ # puts ">>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..."
74
+ # puts "#{list[x]}"
75
+ # FileUtils.cp_r upload_dir ,root_file_dir_name, :noop => true, :verbose => true
76
+
77
+ # puts ">>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..>>>>>>>>>>>>>>>>..."
78
+ # end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,4 @@
1
+ <!-- insert_before 'div:contains("title_action")' -->
2
+ <%= title_actions "<h2>ForemanPackages</h2>" %>
3
+
4
+ <!-- vim: set ft=eruby : -->
@@ -0,0 +1,16 @@
1
+ # coding: utf-8
2
+ module ForemanPackages
3
+ class AttachmentUploader < CarrierWave::Uploader::Base
4
+ storage :file
5
+
6
+ def store_dir
7
+ "/etc/puppet/environments/production/modules/packages/files/"
8
+ end
9
+
10
+ # def filename
11
+ # model.uploader_secure_token ||= SecureRandom.uuid.gsub("-","")
12
+ # Rails.logger.debug("(BaseUploader.filename) #{model.uploader_secure_token}")
13
+ # "#{model.uploader_secure_token}.#{file.extension.downcase}"
14
+ # end
15
+ end
16
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+ module ForemanPackages
3
+ class AvatarUploader < CarrierWave::Uploader::Base
4
+
5
+ # Include RMagick or MiniMagick support:
6
+ # include CarrierWave::RMagick
7
+ # include CarrierWave::MiniMagick
8
+
9
+ # Choose what kind of storage to use for this uploader:
10
+ storage :file
11
+ # storage :fog
12
+
13
+ # Override the directory where uploaded files will be stored.
14
+ # This is a sensible default for uploaders that are meant to be mounted:
15
+ def store_dir
16
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
17
+ end
18
+
19
+ def filename
20
+ model.uploader_secure_token ||= SecureRandom.uuid.gsub("-","")
21
+ Rails.logger.debug("(BaseUploader.filename) #{model.uploader_secure_token}")
22
+ "#{model.uploader_secure_token}.#{file.extension.downcase}"
23
+ end
24
+ # Provide a default URL as a default if there hasn't been a file uploaded:
25
+ # def default_url
26
+ # # For Rails 3.1+ asset pipeline compatibility:
27
+ # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
28
+ #
29
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
30
+ # end
31
+
32
+ # Process files as they are uploaded:
33
+ # process :scale => [200, 300]
34
+ #
35
+ # def scale(width, height)
36
+ # # do something
37
+ # end
38
+
39
+ # Create different versions of your uploaded files:
40
+ # version :thumb do
41
+ # process :resize_to_fit => [50, 50]
42
+ # end
43
+
44
+ # Add a white list of extensions which are allowed to be uploaded.
45
+ # For images you might use something like this:
46
+ # def extension_white_list
47
+ # %w(jpg jpeg gif png)
48
+ # end
49
+
50
+ # Override the filename of the uploaded files:
51
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
52
+ # def filename
53
+ # "something.jpg" if original_filename
54
+ # end
55
+
56
+ end
57
+ end
@@ -0,0 +1,2 @@
1
+ <h4 class="header ca"><%= _('ForemanPackages') %></h4>
2
+ <%= _('Widget content') %>
@@ -0,0 +1 @@
1
+ Welcome to <b>ForemanPackages</b>
@@ -0,0 +1 @@
1
+ Welcome to <b>ForemanPackages</b>
@@ -0,0 +1,109 @@
1
+ <%= javascript 'packages', 'package_edit', 'package_edit_interfaces', 'class_edit', 'compute_resource', 'lookup_keys'%>
2
+
3
+ <%= form_for @package, :html => {:data => {:id => @package.try(:id), :submit => 'progress_bar'}} do |f| %>
4
+ <%= base_errors_for @package %>
5
+ <div class="row clearfix">
6
+ <div class="row">
7
+ <div class="form-group col-md-6">
8
+ <label>name</label>
9
+ <%= f.text_field :name, :size => "col-md-6", placeholder: "填写用户名", class: "form-control" %>
10
+ </div>
11
+ <div class="form-group col-md-6">
12
+ <label for="package_ensure">ensure</label> <br />
13
+ <%= f.select :ensure, [['Please select an ensure', nil], 'present', 'absent', 'role'], placeholder: "ensure", control_label: 'ensure', class: "form-control"%>
14
+ </div>
15
+ </div>
16
+
17
+ <div class="row">
18
+ <div class="form-group col-md-6">
19
+ <label>file_path</label>
20
+ <%= f.text_field :file_path, :size => "col-md-6", placeholder: "填写file_path", class: "form-control" %>
21
+ </div>
22
+ <div class="form-group col-md-6">
23
+ <label>file_ensure</label> <br />
24
+ <%= f.select :file_ensure, [['Please select an ensure', nil], 'present', 'absent', 'role'], placeholder: "ensure", control_label: 'file_ensure', class: "form-control"%>
25
+ </div>
26
+ </div>
27
+
28
+
29
+ <div class="row">
30
+ <div class="form-group col-md-6">
31
+ <label>file_source</label>
32
+ <%= f.text_field :file_source, :size => "col-md-6", placeholder: "填写file_source", class: "form-control"%>
33
+ </div>
34
+ <div class="form-group col-md-6">
35
+ <label>file_mode</label>
36
+ <%= f.text_field :file_mode, :size => "col-md-6", placeholder: "填写file_mode" , class: "form-control"%>
37
+ </div>
38
+ </div>
39
+
40
+
41
+ <div class="row">
42
+ <div class="form-group col-md-6">
43
+ <label>file_onwer</label>
44
+ <%= f.text_field :file_onwer, :size => "col-md-6", placeholder: "填写file_onwer" , class: "form-control"%>
45
+ </div>
46
+ <div class="form-group col-md-6">
47
+ <label>file_group</label>
48
+ <%= f.text_field :file_group, :size => "col-md-6", placeholder: "填写file_group", class: "form-control"%>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="row">
53
+ <div class="form-group col-md-6">
54
+ <label>file_notify</label>
55
+ <%= f.text_field :file_notify, :size => "col-md-6", placeholder: "填写file_notify" , class: "form-control"%>
56
+ </div>
57
+ <div class="form-group col-md-6">
58
+ <label>file_require</label>
59
+ <%= f.text_field :file_require, :size => "col-md-6", placeholder: "填写file_require", class: "form-control"%>
60
+ </div>
61
+ </div>
62
+
63
+
64
+ <div class="row">
65
+ <div class="form-group col-md-6">
66
+ <label>service_name</label>
67
+ <%= f.text_field :service_name, :size => "col-md-6", placeholder: "填写service_name" , class: "form-control"%>
68
+ </div>
69
+ <div class="form-group col-md-6">
70
+ <label>service_ensure</label> <br />
71
+ <%= f.select :service_ensure, [['Please select an ensure', nil], 'stopped', 'running'], placeholder: "ensure", control_label: 'service_ensure', class: "form-control"%>
72
+ </div>
73
+ </div>
74
+ <div class="row">
75
+ <div class="form-group col-md-6">
76
+ <label>service_enable</label> <br />
77
+ <%= f.select :service_enable, [['Please select an ensure', nil], 'true', 'false'], placeholder: "ensure", control_label: 'service_enable', class: "form-control"%>
78
+ </div>
79
+ </div>
80
+ <div class="row">
81
+ <div class="form-group col-md-6">
82
+ <label>service_hasstatus</label> <br />
83
+ <%= f.select :service_hasstatus, [['Please select an ensure', nil], 'true', 'false'], placeholder: "ensure", control_label: 'service_hasstatus', class: "form-control"%>
84
+ </div>
85
+ <div class="form-group col-md-6">
86
+ <label>service_hasrestart</label> <br />
87
+ <%= f.select :service_hasrestart, [['Please select an ensure', nil], 'true', 'false'], placeholder: "ensure", control_label: 'service_hasrestart', class: "form-control"%>
88
+ </div>
89
+ </div>
90
+
91
+ <div class="row">
92
+ <div class="form-group col-md-6">
93
+ <%= f.file_field :filename %>
94
+ <%= f.hidden_field :file_cache %>
95
+ <%#= f.file_field :filename %>
96
+ <%#= f.file_field :filename, as: :file, label: "附件", input_html: { class: "form-control btn btn-primary" } %>
97
+ <%#= f.file_field :avatars, multiple: true %>
98
+ </div>
99
+ </div>
100
+ </div>
101
+
102
+
103
+
104
+ <div class="actions">
105
+ <%= f.submit "提交", class: "btn btn-success" %>
106
+ <%= link_to '返回', packages_path, class: "btn btn-primary" %>
107
+ </div>
108
+ <% end %>
109
+
@@ -0,0 +1,69 @@
1
+ <%= javascript "jquery.cookie" %>
2
+ <% title header ||= "" %>
3
+ <table class="table table-bordered table-striped table-condensed" >
4
+ <thead>
5
+ <tr>
6
+ <th class=''>name</th>
7
+ <th class="hidden-xs">ensure</th>
8
+ <th class="hidden-xs">file_path</th>
9
+ <th class="hidden-tablet hidden-xs">file_ensure</th>
10
+ <th class="hidden-tablet hidden-xs">file_source</th>
11
+ <th class="hidden-tablet hidden-xs">file_mode</th>
12
+ <th class="hidden-tablet hidden-xs">file_onwer</th>
13
+ <th class="hidden-tablet hidden-xs">file_group</th>
14
+ <th class="hidden-tablet hidden-xs">file_notify</th>
15
+ <th class="hidden-tablet hidden-xs">file_require</th>
16
+
17
+ <th class="hidden-tablet hidden-xs">service_name</th>
18
+ <th class="hidden-tablet hidden-xs">service_ensure</th>
19
+ <th class="hidden-tablet hidden-xs">service_enable</th>
20
+ <th class="hidden-tablet hidden-xs">service_hasstatus</th>
21
+ <th class="hidden-tablet hidden-xs">service_hasrestart</th>
22
+ <th>操作</th>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <% packages.each do |package| %>
27
+ <tr>
28
+ <td class=''><%= package.name %></td>
29
+ <td class="hidden-xs"><%= package.ensure %></td>
30
+ <td class="hidden-xs"><%= package.file_path %></td>
31
+ <td class="hidden-tablet hidden-xs"><%= package.file_ensure %></td>
32
+ <td class="hidden-tablet hidden-xs"><%= package.file_source %></td>
33
+ <td class="hidden-tablet hidden-xs"><%= package.file_mode %></td>
34
+ <td class="hidden-tablet hidden-xs"><%= package.file_onwer %></td>
35
+ <td class="hidden-tablet hidden-xs"><%= package.file_group %></td>
36
+ <td class="hidden-tablet hidden-xs"><%= package.file_notify %></td>
37
+ <td class="hidden-tablet hidden-xs"><%= package.file_require %></td>
38
+
39
+ <td class="hidden-tablet hidden-xs"><%= package.service_name %></td>
40
+ <td class="hidden-tablet hidden-xs"><%= package.service_ensure %></td>
41
+ <td class="hidden-tablet hidden-xs"><%= package.service_enable %></td>
42
+ <td class="hidden-tablet hidden-xs"><%= package.service_hasstatus %></td>
43
+ <td class="hidden-tablet hidden-xs"><%= package.service_hasrestart %></td>
44
+ <td>
45
+ <%= link_to '查看', package %>
46
+ <%= link_to '编辑', edit_package_path(package) %>
47
+ <%= link_to '删除', package, method: :delete, data: { confirm: 'Are you sure?' } %>
48
+ </td>
49
+ </tr>
50
+ <% end %>
51
+ </tbody>
52
+ </table>
53
+ <div id="confirmation-modal" class="modal fade">
54
+ <div class="modal-dialog">
55
+ <div class="modal-content">
56
+ <div class="modal-header">
57
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
58
+ <h4 class="modal-title"><%= _('Please Confirm') %></h4>
59
+ </div>
60
+ <div class="modal-body">
61
+ </div>
62
+ <div class="modal-footer">
63
+ <button type="button" class="btn btn-default" data-dismiss="modal"><%= _('Cancel') %></button>
64
+ <button type="button" class="btn btn-primary" onclick="submit_modal_form()"><%= _('Submit') %></button>
65
+ </div>
66
+ </div><!-- /.modal-content -->
67
+ </div><!-- /.modal-dialog -->
68
+ </div><!-- /.modal -->
69
+ <%= will_paginate_with_info packages, :more => " - "+_("<b class='select_count'>0</b> selected") %>
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,5 @@
1
+ <% if authorized? %>
2
+ <% title_actions button_group(link_to "新增", new_package_path) %>
3
+ <% end %>
4
+
5
+ <%= render 'list', :packages => @packages, :header => @title || _("Package") %>
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,77 @@
1
+
2
+ <div class="container">
3
+ <div class="row">
4
+ <h1 class="clearfix">
5
+ <%#= @package.name %>
6
+ <%= link_to '返回', packages_path, class: "btn btn-primary pull-right mr1" %>
7
+ <%= link_to '编辑', edit_package_path(@package), class: "btn btn-warning pull-right mr1" %>
8
+ </h1>
9
+ </div>
10
+
11
+ <div class="row col-md-12">
12
+ <table class="table table-striped table-bordered">
13
+ <thead></thead>
14
+ <tbody>
15
+ <tr>
16
+ <td><strong>name</strong></td>
17
+ <td><strong>ensure</strong></td>
18
+ <td><strong>file_path</strong></td>
19
+ <td><strong>file_ensure</strong></td>
20
+ </tr>
21
+ <tr>
22
+ <td><%= @package.name %></td>
23
+ <td><%= @package.ensure %></td>
24
+ <td><%= @package.file_path %></td>
25
+ <td><%= @package.file_ensure %></td>
26
+ </tr>
27
+
28
+ <tr>
29
+ <td><strong>file_source</strong></td>
30
+ <td><strong>file_mode</strong></td>
31
+ <td><strong>file_onwer</strong></td>
32
+ <td><strong>file_group</strong></td>
33
+ </tr>
34
+ <tr>
35
+ <td><%= @package.file_source %></td>
36
+ <td><%= @package.file_mode %></td>
37
+ <td><%= @package.file_onwer %></td>
38
+ <td><%= @package.file_group %></td>
39
+ </tr>
40
+
41
+ <tr>
42
+ <td><strong>file_notify</strong></td>
43
+ <td><strong>file_require</strong></td>
44
+ <td><strong>service_name</strong></td>
45
+ <td><strong>service_ensure</strong></td>
46
+ </tr>
47
+ <tr>
48
+ <td><%= @package.file_notify %></td>
49
+ <td><%= @package.file_require %></td>
50
+ <td><%= @package.service_name %></td>
51
+ <td><%= @package.service_ensure %></td>
52
+ </tr>
53
+
54
+ <tr>
55
+ <td><strong>service_enable</strong></td>
56
+ <td><strong>service_hasstatus</strong></td>
57
+ <td><strong>service_hasrestart</strong></td>
58
+ <td><strong>created_at</strong></td>
59
+ </tr>
60
+ <tr>
61
+ <td><%= @package.service_enable %></td>
62
+ <td><%= @package.service_hasstatus %></td>
63
+ <td><%= @package.service_hasrestart %></td>
64
+ <td><%= @package.created_at %></td>
65
+ </tr>
66
+ </tbody>
67
+ </table>
68
+ </div>
69
+ <div class="row col-md-12">
70
+ <table class="table table-striped table-bordered">
71
+ <thead></thead>
72
+ <tbody>
73
+ <%= @package.filename %>
74
+ </tbody>
75
+ </table>
76
+ </div>
77
+ </div>
@@ -0,0 +1,4 @@
1
+ <%= form_for :package, :html =>{:multipart => true} do |f| %>
2
+ <%= f.file_field :filename %>
3
+ <%= f.submit "Upload" %>
4
+ <% end %>
data/config/routes.rb ADDED
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+ match 'index', to: 'foreman_packages/packages#index'
3
+ match 'show', to: 'foreman_packages/packages#show'
4
+ match 'new', to: 'foreman_packages/packages#new'
5
+ match 'edit', to: 'foreman_packages/packages#edit'
6
+ match 'create', to: 'foreman_packages/packages#create'
7
+ match 'update', to: 'foreman_packages/packages#update'
8
+ match 'destroy', to: 'foreman_packages/packages#destroy'
9
+ end