foreman_users 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 (39) hide show
  1. data/LICENSE +619 -0
  2. data/README.md +38 -0
  3. data/Rakefile +47 -0
  4. data/app/controllers/foreman_users/hosts_controller.rb +11 -0
  5. data/app/controllers/foreman_users/users_controller.rb +94 -0
  6. data/app/helpers/concerns/foreman_users/hosts_helper_extensions.rb +13 -0
  7. data/app/helpers/users_helper.rb +4 -0
  8. data/app/models/concerns/foreman_users/host_extensions.rb +19 -0
  9. data/app/models/group.rb +6 -0
  10. data/app/models/user.rb +67 -0
  11. data/app/overrides/dashboard/index/sample_override.html.erb.deface +4 -0
  12. data/app/views/dashboard/_foreman_users_widget.html.erb +2 -0
  13. data/app/views/foreman_users/hosts/hosts/new_action.html.erb +1 -0
  14. data/app/views/foreman_users/hosts/new_action.html.erb +1 -0
  15. data/app/views/foreman_users/layouts/layouts/new_layout.html.erb +0 -0
  16. data/app/views/foreman_users/layouts/new_layout.html.erb +0 -0
  17. data/app/views/foreman_users/users/_form.html.erb +94 -0
  18. data/app/views/foreman_users/users/_list.html.erb +57 -0
  19. data/app/views/foreman_users/users/_sub.html.erb +19 -0
  20. data/app/views/foreman_users/users/edit.html.erb +1 -0
  21. data/app/views/foreman_users/users/index.html.erb +5 -0
  22. data/app/views/foreman_users/users/new.html.erb +1 -0
  23. data/app/views/foreman_users/users/show.html.erb +77 -0
  24. data/config/routes.rb +9 -0
  25. data/db/migrate/20150918022411_create_syusers.rb +17 -0
  26. data/db/migrate/20150918050239_create_sygroups.rb +12 -0
  27. data/db/migrate/20150918055455_add_syuser_id_to_sygroup.rb +5 -0
  28. data/lib/foreman_users/engine.rb +99 -0
  29. data/lib/foreman_users/version.rb +3 -0
  30. data/lib/foreman_users.rb +4 -0
  31. data/lib/tasks/foreman_users_tasks.rake +49 -0
  32. data/locale/Makefile +62 -0
  33. data/locale/en/foreman_users.po +19 -0
  34. data/locale/foreman_users.pot +19 -0
  35. data/locale/gemspec.rb +2 -0
  36. data/test/factories/foreman_users_factories.rb +5 -0
  37. data/test/test_plugin_helper.rb +6 -0
  38. data/test/unit/foreman_users_test.rb +11 -0
  39. metadata +134 -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 = 'ForemanUsers'
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 ForemanUsers
2
+ # Example: Plugin's HostsController inherits from Foreman's HostsController
3
+ class HostsController < ::HostsController
4
+ # change layout if needed
5
+ # layout 'foreman_users/layouts/new_layout'
6
+
7
+ def new_action
8
+ # automatically renders view/foreman_users/hosts/new_action
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,94 @@
1
+ module ForemanUsers
2
+ class foreman_usersController < ApplicationController
3
+ # GET /foreman_users
4
+ # GET /foreman_users.json
5
+ def index
6
+ @users = foreman_user.all.paginate(:page => params[:page])
7
+
8
+ respond_to do |format|
9
+ format.html # index.html.erb
10
+ format.json { render json: @users }
11
+ end
12
+ end
13
+
14
+ # GET /foreman_users/1
15
+ # GET /foreman_users/1.json
16
+ def show
17
+ @user = foreman_user.find(params[:id])
18
+
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.json { render json: @user }
22
+ end
23
+ end
24
+
25
+ # GET /foreman_users/new
26
+ # GET /foreman_users/new.json
27
+ def new
28
+ @user = foreman_user.new
29
+ 5.times { @user.sygroups.build}
30
+ #sygroups = @user.sygroups.new
31
+ respond_to do |format|
32
+ format.html # new.html.erb
33
+ format.json { render json: @user }
34
+ end
35
+ end
36
+
37
+ # GET /foreman_users/1/edit
38
+ def edit
39
+ @user = foreman_user.find(params[:id])
40
+ sygroup_time = @user.sygroups.size
41
+ if sygroup_time == 0
42
+ 5.times { @user.sygroups.build}
43
+ else
44
+ 5.times { @user.sygroups.build}
45
+ end
46
+ end
47
+
48
+ # POST /foreman_users
49
+ # POST /foreman_users.json
50
+ def create
51
+ @user = foreman_user.new(params[:foreman_user])
52
+
53
+ respond_to do |format|
54
+ if @user.save
55
+ format.html { redirect_to @user, notice: 'foreman_user was successfully created.' }
56
+ format.json { render json: @user, status: :created, location: @user }
57
+ else
58
+ format.html { render action: "new" }
59
+ format.json { render json: @user.errors, status: :unprocessable_entity }
60
+ end
61
+ end
62
+ end
63
+
64
+ # PUT /foreman_users/1
65
+ # PUT /foreman_users/1.json
66
+ def update
67
+ @user = foreman_user.find(params[:id])
68
+
69
+ respond_to do |format|
70
+ if @user.update_attributes(params[:foreman_user])
71
+ format.html { redirect_to @user, notice: 'foreman_user was successfully updated.' }
72
+ format.json { head :no_content }
73
+ else
74
+ format.html { render action: "edit" }
75
+ format.json { render json: @user.errors, status: :unprocessable_entity }
76
+ end
77
+ end
78
+ end
79
+
80
+ # DELETE /foreman_users/1
81
+ # DELETE /foreman_users/1.json
82
+ def destroy
83
+ @user = foreman_user.find(params[:id])
84
+ @user.destroy
85
+ @user.destory_dir
86
+ respond_to do |format|
87
+ format.html { redirect_to foreman_users_url }
88
+ format.json { head :no_content }
89
+ end
90
+
91
+
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,13 @@
1
+ module ForemanUsers
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 ForemanHosts
2
+ module UsersHelper
3
+ end
4
+ end
@@ -0,0 +1,19 @@
1
+ module ForemanUsers
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,6 @@
1
+ module ForemanUsers
2
+ class Sygroup < ActiveRecord::Base
3
+ attr_accessible :name, :ensure, :gid, :groupable_type, :groupable_id, :user_id
4
+ belongs_to :user, class_name: "ForemanUsers::User"
5
+ end
6
+ end
@@ -0,0 +1,67 @@
1
+ module ForemanUsers
2
+ class Syuser < ActiveRecord::Base
3
+ require "fileutils"
4
+ attr_accessible :title, :body, :name, :ensure , :gid, :groups, :home , :password, :password_max_age, :password_min_age, :shell, :uid, :sygroups_attributes
5
+
6
+
7
+ has_many :groups, :class_name => 'ForemanTasks::Group', :foreign_key => :user_id
8
+ accepts_nested_attributes_for :groups, reject_if: proc { |attributes| attributes['gid'].blank?| attributes['name'].blank? | attributes['ensure'].blank? } , allow_destroy: true
9
+
10
+ after_create :create_dir
11
+ after_update :create_dir
12
+ #after_destory :destory_dir
13
+ def create_dir
14
+ #目前用 "/home/stdtnt/app/"代替 "/etc/puppet/environments/production/modules/users"
15
+ #该处需要注意权限问题,当前用户是否具有该目录的操作权限
16
+ root_dir_name = "/etc/puppet/environments/production/modules/users"
17
+ self.destory_dir #默认删除该目录,然后重新创建
18
+ dir_exist_status = File.exist?(root_dir_name) #判断该目录是否存在
19
+ if !dir_exist_status
20
+ #创建目录结构
21
+ Dir::mkdir(root_dir_name)
22
+ Dir::mkdir(root_dir_name + "/files")
23
+ Dir::mkdir(root_dir_name + "/manifests")
24
+
25
+ #生成files下welcome.conf文件
26
+ files_welcome_File = File.new(root_dir_name + "/files/welcome.conf", "w+")
27
+ files_welcome_File.close
28
+ #生成manifests下init.pp文件
29
+ main_init_File = File.new(root_dir_name +"/manifests/init.pp", "w+")
30
+ if main_init_File
31
+ main_init_File.syswrite(self.create_content)
32
+ else
33
+ puts "Unable to open file!"
34
+ end
35
+ main_init_File.close
36
+ end
37
+ end
38
+
39
+
40
+ def destory_dir
41
+ #目前用 "/home/stdtnt/app/"代替 "/etc/puppet/environments/production/modules/users"
42
+ #该处需要注意权限问题,当前用户是否具有该目录的操作权限
43
+ root_dir_name = "/etc/puppet/environments/production/modules/users"
44
+ #判断该目录是否存在
45
+ dir_exist_status = File.exist?(root_dir_name )
46
+ if dir_exist_status
47
+ #使用fileUtils.rm_r 删除该文件夹及其以下所有内容
48
+ FileUtils.rm_r root_dir_name
49
+ end
50
+ end
51
+
52
+ def create_content
53
+ #content = "class users { " + "\n" + "\s\s" + "include baseline::params" + "\n" + "\s\s" + "@user {'$user':" + "\n" + "\s\s\s\s" + "ensure => $user_ensure," + "\n" + "\s\s\s\s" + "home => $user_home," + "\n" + "\s\s" + "}" + "\n" + "}"
54
+ #
55
+ user_content = "class users {" + "\n" + "\s\s" + "user { '" + self.name + "':" + "\n\s\s\s\s" + "ensure => '" + self.ensure + "'," + "\n\s\s\s\s" + "gid => '" + self.gid + "'," + "\n\s\s\s\s" + "groups => [" + self.groups + "]," + "\n\s\s\s\s" + "home => '" + self.home + "'," + "\n\s\s\s\s" + "password => '" + self.password + "'," + "\n\s\s\s\s" + "password_max_age => '" + self.password_max_age + "'," + "\n\s\s\s\s" + "password_min_age => '" + self.password_min_age + "'," + "\n\s\s\s\s" + "shell => '" + self.shell + "'," + "\n\s\s\s\s" + "uid => '" + self.uid + "'," + "\n\s\s" +"}" + "\n"
56
+
57
+ group_content = "\s\s"
58
+ if self.sygroups.size > 0
59
+ self.sygroups.each do |sygroup|
60
+ group_content += "group {'"+ sygroup.name + "':" + "\n\s\s\s\s" + "ensure => '" + sygroup.ensure + "'," + "\n\s\s\s\s" + "gid => '" + sygroup.gid + "'," + "\n\s\s" +"}" + "\n\s\s"
61
+ end
62
+ end
63
+ rs = user_content + group_content + "\n" + "}"
64
+ return rs
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,4 @@
1
+ <!-- insert_before 'div:contains("title_action")' -->
2
+ <%= title_actions "<h2>ForemanUsers</h2>" %>
3
+
4
+ <!-- vim: set ft=eruby : -->
@@ -0,0 +1,2 @@
1
+ <h4 class="header ca"><%= _('ForemanUsers') %></h4>
2
+ <%= _('Widget content') %>
@@ -0,0 +1 @@
1
+ Welcome to <b>ForemanUsers</b>
@@ -0,0 +1 @@
1
+ Welcome to <b>ForemanUsers</b>
@@ -0,0 +1,94 @@
1
+ <%= javascript 'users', 'user_edit', 'user_edit_interfaces', 'class_edit', 'compute_resource', 'lookup_keys'%>
2
+
3
+ <%= form_for @user, :html => {:data => {:id => @user.try(:id), :submit => 'progress_bar'}} do |f| %>
4
+ <%= base_errors_for @user %>
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="user_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>gid</label>
20
+ <%= f.text_field :gid, :size => "col-md-6", placeholder: "填写gid", class: "form-control" %>
21
+ </div>
22
+ <div class="form-group col-md-6">
23
+ <label>groups</label>
24
+ <%= f.text_field :groups, :size => "col-md-6", placeholder: "填写组名", class: "form-control" %>
25
+ </div>
26
+ </div>
27
+
28
+
29
+ <div class="row">
30
+ <div class="form-group col-md-6">
31
+ <label>home</label>
32
+ <%= f.text_field :home, :size => "col-md-6", placeholder: "填写用户名", class: "form-control"%>
33
+ </div>
34
+ <div class="form-group col-md-6">
35
+ <label>password</label>
36
+ <%= f.text_field :password, :size => "col-md-6", placeholder: "填写密码" , class: "form-control"%>
37
+ </div>
38
+ </div>
39
+
40
+
41
+ <div class="row">
42
+ <div class="form-group col-md-6">
43
+ <label>password_max_age</label>
44
+ <%= f.text_field :password_max_age, :size => "col-md-6", placeholder: "填写用户名" , class: "form-control"%>
45
+ </div>
46
+ <div class="form-group col-md-6">
47
+ <label>password_min_age</label>
48
+ <%= f.text_field :password_min_age, :size => "col-md-6", placeholder: "填写用户名", class: "form-control"%>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="row">
53
+ <div class="form-group col-md-6">
54
+ <label>shell</label>
55
+ <%= f.text_field :shell, :size => "col-md-6", placeholder: "填写shell,例如: /bin/bash" , class: "form-control"%>
56
+ </div>
57
+ <div class="form-group col-md-6">
58
+ <label>uid</label>
59
+ <%= f.text_field :uid, :size => "col-md-6", placeholder: "填写uid,例如:609", class: "form-control"%>
60
+ </div>
61
+ </div>
62
+ <p><span style="color:red">以下为group信息</span>
63
+ </p>
64
+
65
+ <div class="row">
66
+ <label class=" col-md-4">name</label><label class=" col-md-4">ensure</label><label class=" col-md-4">gid</label>
67
+ </div>
68
+ <%= f.fields_for :sygroups do |sygroups_form| %>
69
+
70
+ <div class="row">
71
+ <div class=" form-group col-md-4">
72
+ <%= sygroups_form.text_field :name, :size => "col-md-4", placeholder: "填写shell,例如: /bin/bash" , class: "form-control"%>
73
+ </div>
74
+ <div class=" form-group col-md-4">
75
+ <%= sygroups_form.text_field :ensure, :size => "col-md-4", placeholder: "填写shell,例如: /bin/bash" , class: "form-control"%>
76
+ </div>
77
+ <div class=" form-group col-md-4">
78
+ <%= sygroups_form.text_field :gid, :size => "col-md-4", placeholder: "填写shell,例如: /bin/bash" , class: "form-control"%>
79
+ </div>
80
+ </div>
81
+
82
+
83
+ <% end %>
84
+
85
+ </div>
86
+
87
+
88
+
89
+ <div class="actions">
90
+ <%= f.submit "提交", class: "btn btn-success" %>
91
+ <%= link_to '返回', users_path, class: "btn btn-primary" %>
92
+ </div>
93
+ <% end %>
94
+
@@ -0,0 +1,57 @@
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">gid</th>
9
+ <th class="hidden-tablet hidden-xs">groups</th>
10
+ <th class="hidden-tablet hidden-xs">home</th>
11
+ <th class="hidden-tablet hidden-xs">password</th>
12
+ <th class="hidden-tablet hidden-xs">password_max_age</th>
13
+ <th class="hidden-tablet hidden-xs">password_min_age</th>
14
+ <th class="hidden-tablet hidden-xs">shell</th>
15
+ <th class="hidden-tablet hidden-xs">uid</th>
16
+ <th>操作</th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <% users.each do |user| %>
21
+ <tr>
22
+ <td class=''><%= user.name %></td>
23
+ <td class="hidden-xs"><%= user.ensure %></td>
24
+ <td class="hidden-xs"><%= user.gid %></td>
25
+ <td class="hidden-tablet hidden-xs"><%= user.groups %></td>
26
+ <td class="hidden-tablet hidden-xs"><%= user.home %></td>
27
+ <td class="hidden-tablet hidden-xs"><%= user.password %></td>
28
+ <td class="hidden-tablet hidden-xs"><%= user.password_max_age %></td>
29
+ <td class="hidden-tablet hidden-xs"><%= user.password_min_age %></td>
30
+ <td class="hidden-tablet hidden-xs"><%= user.shell %></td>
31
+ <td class="hidden-tablet hidden-xs"><%= user.uid %></td>
32
+ <td>
33
+ <%= link_to '查看', user %>
34
+ <%= link_to '编辑', edit_user_path(user) %>
35
+ <%= link_to '删除', user, method: :delete, data: { confirm: 'Are you sure?' } %>
36
+ </td>
37
+ </tr>
38
+ <% end %>
39
+ </tbody>
40
+ </table>
41
+ <div id="confirmation-modal" class="modal fade">
42
+ <div class="modal-dialog">
43
+ <div class="modal-content">
44
+ <div class="modal-header">
45
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
46
+ <h4 class="modal-title"><%= _('Please Confirm') %></h4>
47
+ </div>
48
+ <div class="modal-body">
49
+ </div>
50
+ <div class="modal-footer">
51
+ <button type="button" class="btn btn-default" data-dismiss="modal"><%= _('Cancel') %></button>
52
+ <button type="button" class="btn btn-primary" onclick="submit_modal_form()"><%= _('Submit') %></button>
53
+ </div>
54
+ </div><!-- /.modal-content -->
55
+ </div><!-- /.modal-dialog -->
56
+ </div><!-- /.modal -->
57
+ <%= will_paginate_with_info users, :more => " - "+_("<b class='select_count'>0</b> selected") %>
@@ -0,0 +1,19 @@
1
+ <div id="group">
2
+ <%= f.fields_for :group do |f| %>
3
+ <div class="row">
4
+ <div class="col-md-4 column form-group">
5
+ <%= text_f f, :name, :help_inline => _("填写用户名") %>
6
+ </div>
7
+ <div class="col-md-4 column form-group">
8
+ <%= text_f f, :name, :help_inline => _("填写用户名") %>
9
+ </div>
10
+ <div class="col-md-4 column form-group">
11
+ <%= text_f f, :name, :help_inline => _("填写用户名") %>
12
+ </div>
13
+ </div>
14
+ <%= f.hidden_field :groupable_id, value: object.id %>
15
+ <%= f.hidden_field :groupable_type, value: object.class.to_s %>
16
+ <% end %>
17
+ </div>
18
+
19
+ <%#= f.link_to_add "新增酒店", :group, :data => { :target => "#group" }, class: "btn btn-primary btn-xs mb1" %>
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,5 @@
1
+ <% if authorized? %>
2
+ <% title_actions button_group(link_to "新增", new_user_path) %>
3
+ <% end %>
4
+
5
+ <%= render 'list', :users => @users, :header => @title || _("users") %>
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,77 @@
1
+
2
+ <div class="container">
3
+ <div class="row">
4
+ <h1 class="clearfix">
5
+ <%= @user.name %>
6
+ <%= link_to '返回', user_path, class: "btn btn-primary pull-right mr1" %>
7
+ <%= link_to '编辑', edit_user_path(@user), 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>gid</strong></td>
19
+ <td><strong>groups</strong></td>
20
+ </tr>
21
+ <tr>
22
+ <td><%= @user.name %></td>
23
+ <td><%= @user.ensure %></td>
24
+ <td><%= @user.gid %></td>
25
+ <td><%= @user.groups %></td>
26
+ </tr>
27
+
28
+ <tr>
29
+ <td><strong>home</strong></td>
30
+ <td><strong>password</strong></td>
31
+ <td><strong>password_max_age</strong></td>
32
+ <td><strong>password_min_age</strong></td>
33
+ </tr>
34
+ <tr>
35
+ <td><%= @user.home %></td>
36
+ <td><%= @user.password %></td>
37
+ <td><%= @user.password_max_age %></td>
38
+ <td><%= @user.password_min_age %></td>
39
+ </tr>
40
+
41
+ <tr>
42
+ <td><strong>shell</strong></td>
43
+ <td><strong>uid</strong></td>
44
+ <td><strong>created_at</strong></td>
45
+ <td><strong>updated_at</strong></td>
46
+ </tr>
47
+ <tr>
48
+ <td><%= @user.shell %></td>
49
+ <td><%= @user.uid %></td>
50
+ <td><%= @user.created_at %></td>
51
+ <td><%= @user.updated_at %></td>
52
+ </tr>
53
+ </tbody>
54
+ </table>
55
+ </div>
56
+
57
+ <div class="row col-md-12">
58
+ <h2>groupList</h2>
59
+ <table class="table table-striped table-bordered">
60
+ <thead>
61
+ <th>groub_name</th>
62
+ <th>ensure</th>
63
+ <th>gid</th>
64
+ </thead>
65
+ <tbody>
66
+ <% @user.sygroups.each do |sygroup|%>
67
+ <tr class="success">
68
+ <td><%= sygroup.name %></td>
69
+ <td><%= sygroup.ensure %></td>
70
+ <td><%= sygroup.gid %></td>
71
+ </tr>
72
+ <% end %>
73
+ </tbody>
74
+ </table>
75
+ </div>
76
+
77
+ </div>
data/config/routes.rb ADDED
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+ match 'index', to: 'foreman_users/users#index'
3
+ match 'show', to: 'foreman_users/users#show'
4
+ match 'new', to: 'foreman_users/users#new'
5
+ match 'edit', to: 'foreman_users/users#edit'
6
+ match 'create', to: 'foreman_users/users#create'
7
+ match 'update', to: 'foreman_users/users#update'
8
+ match 'destroy', to: 'foreman_users/users#destroy'
9
+ end
@@ -0,0 +1,17 @@
1
+ class CreateSyusers < ActiveRecord::Migration
2
+ def change
3
+ create_table :syusers do |t|
4
+ t.string :name #名称
5
+ t.string :ensure #下拉菜单
6
+ t.string :gid #输入框
7
+ t.string :groups #多选
8
+ t.string :home #输入
9
+ t.string :password
10
+ t.string :password_max_age
11
+ t.string :password_min_age
12
+ t.string :shell
13
+ t.string :uid
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ class CreateSygroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :sygroups do |t|
4
+ t.string :name
5
+ t.string :ensure
6
+ t.string :gid
7
+ t.string :groupable_type
8
+ t.integer :groupable_id
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ class AddSyuserIdToSygroup < ActiveRecord::Migration
2
+ def change
3
+ add_column :sygroups, :syuser_id, :integer
4
+ end
5
+ end