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.
- data/LICENSE +619 -0
- data/README.md +38 -0
- data/Rakefile +47 -0
- data/app/controllers/foreman_packages/hosts_controller.rb +11 -0
- data/app/controllers/foreman_packages/packages_controller.rb +84 -0
- data/app/helpers/concerns/foreman_packages/hosts_helper_extensions.rb +13 -0
- data/app/helpers/packages_helper.rb +4 -0
- data/app/models/concerns/foreman_packages/host_extensions.rb +19 -0
- data/app/models/package.rb +81 -0
- data/app/overrides/dashboard/index/sample_override.html.erb.deface +4 -0
- data/app/uploaders/attachment_uploader.rb +16 -0
- data/app/uploaders/avatar_uploader.rb +57 -0
- data/app/views/dashboard/_foreman_packages_widget.html.erb +2 -0
- data/app/views/foreman_packages/hosts/hosts/new_action.html.erb +1 -0
- data/app/views/foreman_packages/hosts/new_action.html.erb +1 -0
- data/app/views/foreman_packages/layouts/layouts/new_layout.html.erb +0 -0
- data/app/views/foreman_packages/layouts/new_layout.html.erb +0 -0
- data/app/views/foreman_packages/packages/_form.html.erb +109 -0
- data/app/views/foreman_packages/packages/_list.html.erb +69 -0
- data/app/views/foreman_packages/packages/edit.html.erb +1 -0
- data/app/views/foreman_packages/packages/index.html.erb +5 -0
- data/app/views/foreman_packages/packages/new.html.erb +1 -0
- data/app/views/foreman_packages/packages/show.html.erb +77 -0
- data/app/views/foreman_packages/packages/upload.html.erb +4 -0
- data/config/routes.rb +9 -0
- data/db/migrate/20150921011935_create_foreman_packages_packages.rb +24 -0
- data/lib/foreman_packages/engine.rb +95 -0
- data/lib/foreman_packages/version.rb +3 -0
- data/lib/foreman_packages.rb +4 -0
- data/lib/tasks/foreman_packages_tasks.rake +49 -0
- data/locale/Makefile +62 -0
- data/locale/en/foreman_packages.po +19 -0
- data/locale/foreman_packages.pot +19 -0
- data/locale/gemspec.rb +2 -0
- data/test/factories/foreman_packages_factories.rb +5 -0
- data/test/test_plugin_helper.rb +6 -0
- data/test/unit/foreman_packages_test.rb +11 -0
- 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,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,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 @@
|
|
|
1
|
+
Welcome to <b>ForemanPackages</b>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Welcome to <b>ForemanPackages</b>
|
|
File without changes
|
|
File without changes
|
|
@@ -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">×</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 @@
|
|
|
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>
|
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
|