Ajout de toute les vue , engine ok

main
stef 2024-02-11 15:13:25 +01:00
parent d9572b468e
commit 98fd4c4a80
71 changed files with 1860 additions and 138 deletions

View File

@ -0,0 +1,50 @@
function get_ipxe(id){
$.ajax({
method: "GET",
url: "/host/ipxe",
data: { uuid:id}
}).done(function(result) {
$("#script_result").empty().append(result)
});
}
function get_install(id){
$.ajax({
method: "GET",
url: "/host/install",
data: { uuid:id}
}).done(function(result) {
$("#script_result").empty().append(result)
});
}
function get_postinstall(id){
$.ajax({
method: "GET",
url: "/host/postinstall",
data: { uuid:id}
}).done(function(result) {
$("#script_result").empty().append(result)
});
}
$( document ).ready(function() {
$(document).on("click",".getIpxeScript", function(){
var id=$(this).attr('id')
get_ipxe(id)
});
$(document).on("click",".getInstallScript", function(){
var id=$(this).attr('id')
get_install(id)
});
$(document).on("click",".getPostinstallScript", function(){
var id=$(this).attr('id')
get_postinstall(id)
});
});

View File

@ -1,7 +1,53 @@
function get_ipxe(id){
$.ajax({
method: "GET",
url: "/host/ipxe",
data: { uuid:id}
}).done(function(result) {
$("#script_result").empty().append(result)
});
}
function get_install(id){
$.ajax({
method: "GET",
url: "/host/install",
data: { uuid:id}
}).done(function(result) {
$("#script_result").empty().append(result)
});
}
function get_postinstall(id){
$.ajax({
method: "GET",
url: "/host/postinstall",
data: { uuid:id}
}).done(function(result) {
$("#script_result").empty().append(result)
});
}
$( document ).ready(function() {
$('.toggleable').next().hide();
$(document).on("click",".toggleable", function(){
$(this).toggleClass("is-active");
$(this).next().toggle();
});
$(document).on("click",".getIpxeScript", function(){
var id=$(this).attr('id')
get_ipxe(id)
});
$(document).on("click",".getInstallScript", function(){
var id=$(this).attr('id')
get_install(id)
});
$(document).on("click",".getPostinstallScript", function(){
var id=$(this).attr('id')
get_postinstall(id)
});
})

View File

@ -0,0 +1,23 @@
.scrollDiv {
max-height: 80vh;
overflow:auto;
}
table {
/* Not required only for visualizing */
border-collapse: collapse;
width: 100%;
}
table thead tr th {
/* Important */
background-color: white;
position: sticky;
z-index: 100;
top: 0;
}
td {
/* Not required only for visualizing */
padding: 1em;
}

View File

@ -0,0 +1,80 @@
class AccountsController < ApplicationController
before_action :set_account, only: %i[ show edit update destroy ]
before_action :set_pass, only: %i[ update ]
# GET /accounts or /accounts.json
def index
@accounts = Account.all
end
# GET /accounts/1 or /accounts/1.json
def show
end
# GET /accounts/new
def new
@account = Account.new
end
# GET /accounts/1/edit
def edit
end
# POST /accounts or /accounts.json
def create
@account = Account.new(account_params.except(:password))
respond_to do |format|
if @account.save
format.html { redirect_to account_url(@account), notice: "Account was successfully created." }
format.json { render :show, status: :created, location: @account }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @account.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /accounts/1 or /accounts/1.json
def update
respond_to do |format|
logger.debug(account_params)
if @account.update(account_params.except(:password))
format.html { redirect_to account_url(@account), notice: "Account was successfully updated." }
format.json { render :show, status: :ok, location: @account }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @account.errors, status: :unprocessable_entity }
end
end
end
# DELETE /accounts/1 or /accounts/1.json
def destroy
@account.destroy!
respond_to do |format|
format.html { redirect_to accounts_url, notice: "Account was successfully destroyed." }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_account
@account = Account.find(params[:id])
end
def set_pass
# [IMPORTANT] Salt must be generated for prodution !
cmdline = "mkpasswd -m sha-512 -S 012345678 #{account_params[:password]}"
@account.encpassword = `#{cmdline}`.strip
account_params.delete(:password)
end
# Only allow a list of trusted parameters through.
def account_params
params.require(:account).permit(:name, :login, :password, :sshpubkey,:encpassword)
end
end

View File

@ -1,7 +1,6 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters

View File

@ -0,0 +1,100 @@
class EngineController < ApplicationController
before_action :set_host_by_uuid, only: %i[ generate_boot generate_install generate_postinstall generate_installed generate_metadata ]
def generateglobal
gv=Utils::Globalvar.new
puts gv.Get
end
def generate_boot
if @host
sourceip=request.headers['REMOTE_ADDR']
log=Log.new({source: "#{sourceip}", crit: "info",message: "#{@host.uuid} Request boot script"})
log.save()
@host.mac = params[:mac]
@host.installip = params[:installip]
boot_script = @host.installtemplate.boot.content
template = @host.installtemplate
@site = @host.site
host = @host
@template = @host.installtemplate
if @host.toinstall
@host.update({status: "Computer Booting"})
end
result = render inline: boot_script, layout: false, content_type: 'text/plain'
@host.update({lastbootgenerated: result})
end
end
def generate_install
if @host
sourceip=request.headers['REMOTE_ADDR']
log=Log.new({source: "#{sourceip}", crit: "info",message: "#{@host.uuid} Request Install script"})
log.save()
script = @host.installtemplate.install.content
template = @host.installtemplate
@site = @host.site
host = @host
@template = @host.installtemplate
@host.update({status: "System Install"})
result = render inline: script, layout: false, content_type: 'text/plain'
@host.update({lastinstallgenerated: result})
end
end
def generate_postinstall
if @host
sourceip=request.headers['REMOTE_ADDR']
log=Log.new({source: "#{sourceip}", crit: "info",message: "#{@host.uuid} Request Postinstall script"})
log.save()
@host.update({status: "System Post Install"})
script = @host.installtemplate.postinstall.content
template = @host.installtemplate
@ansible = Account.find_by(name: "ansible")
@site = @host.site
host = @host
@template = @host.installtemplate
result = render inline: script, layout: false, content_type: 'text/plain'
@host.update({lastpostinstallgenerated: result})
end
end
def generate_installed
sourceip=request.headers['REMOTE_ADDR']
log=Log.new({source: "#{sourceip}", crit: "info",message: "#{@host.uuid} Install Finished."})
log.save()
if @host.update({status: "Installation Finish", installed: true, toinstall: false, interface: params[:interface],ip: params[:installip]})
render plain: "ok"
else
render json: @host.errors
end
end
def generate_metadata
@host = Host.find_by(uuid: params[:uuid])
script = Script.find_by({name: "metadata",stage: "config"})
result = render inline: script.content, layout: false, content_type: 'text/plain'
end
private
# Use callbacks to share common setup or constraints between actions.
def set_host_by_uuid
@host = Host.find_by(uuid: params[:uuid])
if ! @host
logger.debug "> NEW HOST DETECTED !!!"
sourceip=request.headers['REMOTE_ADDR']
log=Log.new({source: "#{sourceip}", crit: "warning",message: "New host with uuid #{params[:uuid]} Detected."})
log.save()
@template = Installtemplate.find_by(name:"default")
@site = Site.find_by(name:"default")
@account = Account.find_by(name:"default")
@host = Host.new(hostname: "New host detected",uuid: params["uuid"], installip: params["installip"], installtemplate: @template,site: @site, mac: params["mac"], status: "discover", discover: true,installed: false, toinstall: false,rootaccount: @account, mainaccount: @account)
@host.save!
end
end
# Only allow a list of trusted parameters through.
def host_params
params.require(:host).permit(:uuid, :hostname, :ip, :status, :mac, :discover, :installed, :interface , :installtemplate, :site , :installtemplate_id, :site_id, :rootaccount_id, :mainaccount_id,:toinstall, :installip)
end
end

View File

@ -1,4 +0,0 @@
class HomeController < ApplicationController
def index
end
end

View File

@ -0,0 +1,139 @@
class HostsController < ApplicationController
before_action :authenticate_user!
before_action :set_host, only: %i[ show edit update destroy ]
before_action :set_host_by_uuid, only: %i[ generate_boot generate_install generate_postinstall generate_metadata ]
# GET /hosts or /hosts.json
def index
@hosts = Host.asc(:hostname)
end
# GET /hosts/1 or /hosts/1.json
def show
end
# GET /hosts/new
def new
@host = Host.new
end
# GET /hosts/1/edit
def edit
end
# POST /hosts or /hosts.json
def create
@host = Host.new(host_params)
respond_to do |format|
if @host.save
format.html { redirect_to host_url(@host), notice: "Host was successfully created." }
format.json { render :show, status: :created, location: @host }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @host.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /hosts/1 or /hosts/1.json
def update
puts host_params
respond_to do |format|
log=Log.new({source: "admin", crit: "info",message: "User xxx update #{host_params[:hostname]}"})
log.save()
if @host.update(host_params)
format.html { redirect_to host_url(@host), notice: "Host was successfully updated." }
format.json { render :show, status: :ok, location: @host }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @host.errors, status: :unprocessable_entity }
end
end
end
# DELETE /hosts/1 or /hosts/1.json
def destroy
@host.destroy!
respond_to do |format|
format.html { redirect_to hosts_url, notice: "Host was successfully destroyed." }
format.json { head :no_content }
end
end
def generate_boot
if @host
@host.mac = params[:mac]
@host.installip = params[:installip]
boot_script = @host.installtemplate.boot.content
template = @host.installtemplate
@site = @host.site
host = @host
@template = @host.installtemplate
result = render inline: boot_script, layout: false, content_type: 'text/plain'
@host.update({lastbootgenerated: result})
end
end
def generate_install
if @host
script = @host.installtemplate.install.content
template = @host.installtemplate
@site = @host.site
host = @host
@template = @host.installtemplate
result = render inline: script, layout: false, content_type: 'text/plain'
@host.update({lastinstallgenerated: result})
end
end
def generate_postinstall
if @host
script = @host.installtemplate.postinstall.content
template = @host.installtemplate
@ansible = Account.find_by(name: "ansible")
@site = @host.site
host = @host
@template = @host.installtemplate
result = render inline: script, layout: false, content_type: 'text/plain'
end
end
def generate_metadata
@host = Host.find_by(uuid: params[:uuid])
script = Script.find_by({name: "metadata",stage: "config"})
result = render inline: script.content, layout: false, content_type: 'text/plain'
end
private
# Use callbacks to share common setup or constraints between actions.
def set_host
logger.debug "#{params}"
@host = Host.find(params[:id])
end
def set_host_by_uuid
@host = Host.find_by(uuid: params[:uuid])
if ! @host
logger.debug "> NEW HOST DETECTED !!!"
sourceip=request.headers['REMOTE_ADDR']
log=Log.new({source: "#{sourceip}", crit: "warning",message: "New host with uuid #{params[:uuid]} Detected."})
log.save()
@template = Installtemplate.find_by(name:"default")
@site = Site.find_by(name:"default")
@account = Account.find_by(name:"default")
@host = Host.new(hostname: "New host detected",uuid: params["uuid"], installip: params["installip"], installtemplate: @template,site: @site, mac: params["mac"], status: "discover", discover: true,installed: false, toinstall: false,rootuser: @account, mainuser: @account)
@host.save!
end
end
# Only allow a list of trusted parameters through.
def host_params
params.require(:host).permit(:uuid, :hostname, :ip, :status, :mac, :discover, :installed, :interface , :installtemplate, :site , :installtemplate_id, :site_id, :rootaccount_id, :mainaccount_id,:toinstall, :installip)
end
end

View File

@ -0,0 +1,71 @@
class InstalltemplatesController < ApplicationController
before_action :authenticate_user!
before_action :set_installtemplate, only: %i[ show edit update destroy ]
# GET /installtemplates or /installtemplates.json
def index
@installtemplates = Installtemplate.asc(:name)
end
# GET /installtemplates/1 or /installtemplates/1.json
def show
end
# GET /installtemplates/new
def new
@installtemplate = Installtemplate.new
end
# GET /installtemplates/1/edit
def edit
end
# POST /installtemplates or /installtemplates.json
def create
@installtemplate = Installtemplate.new(installtemplate_params)
respond_to do |format|
if @installtemplate.save
format.html { redirect_to installtemplate_url(@installtemplate), notice: "Installtemplate was successfully created." }
format.json { render :show, status: :created, location: @installtemplate }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @installtemplate.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /installtemplates/1 or /installtemplates/1.json
def update
respond_to do |format|
if @installtemplate.update(installtemplate_params)
format.html { redirect_to installtemplate_url(@installtemplate), notice: "Installtemplate was successfully updated." }
format.json { render :show, status: :ok, location: @installtemplate }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @installtemplate.errors, status: :unprocessable_entity }
end
end
end
# DELETE /installtemplates/1 or /installtemplates/1.json
def destroy
@installtemplate.destroy!
respond_to do |format|
format.html { redirect_to installtemplates_url, notice: "Installtemplate was successfully destroyed." }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_installtemplate
@installtemplate = Installtemplate.find(params[:id])
end
# Only allow a list of trusted parameters through.
def installtemplate_params
params.require(:installtemplate).permit(:name, :ostype, :osversion, :repository, :nfsroot, :kernel, :initrd, :rootfile, :boot_id, :install_id, :postinstall_id, :lang)
end
end

View File

@ -0,0 +1,75 @@
class LogsController < ApplicationController
before_action :authenticate_user!
before_action :set_log, only: %i[ show edit update destroy ]
# GET /logs or /logs.json
def index
@logs = Log.desc(:created_at)
end
# GET /logs/1 or /logs/1.json
def show
end
# GET /logs/new
def new
@log = Log.new
end
# GET /logs/1/edit
def edit
end
# POST /logs or /logs.json
def create
@log = Log.new(log_params)
respond_to do |format|
if @log.save
format.html { redirect_to log_url(@log), notice: "Log was successfully created." }
format.json { render :show, status: :created, location: @log }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @log.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /logs/1 or /logs/1.json
def update
puts log_params
respond_to do |format|
if @log.update(log_params)
format.html { redirect_to log_url(@log), notice: "Log was successfully updated." }
format.json { render :show, status: :ok, location: @log }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @log.errors, status: :unprocessable_entity }
end
end
end
# DELETE /logs/1 or /logs/1.json
def destroy
@log.destroy!
respond_to do |format|
format.html { redirect_to logs_url, notice: "Log was successfully destroyed." }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_log
logger.debug "#{params}"
@log = Log.find(params[:id])
end
# Only allow a list of trusted parameters through.
def log_params
params.require(:log).permit(:source, :crit, :message)
end
end

View File

@ -0,0 +1,5 @@
class PagesController < ApplicationController
def index
@hostslist = Host.all
end
end

View File

@ -0,0 +1,73 @@
class SitesController < ApplicationController
before_action :authenticate_user!
before_action :set_site, only: %i[ show edit update destroy ]
# GET /sites or /sites.json
def index
@sites = Site.all
end
# GET /sites/1 or /sites/1.json
def show
end
# GET /sites/new
def new
@site = Site.new
end
# GET /sites/1/edit
def edit
end
# POST /sites or /sites.json
def create
@site = Site.new(site_params)
respond_to do |format|
if @site.save
format.html { redirect_to site_url(@site), notice: "Site was successfully created." }
format.json { render :show, status: :created, location: @site }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @site.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /sites/1 or /sites/1.json
def update
respond_to do |format|
if @site.update(site_params)
format.html { redirect_to site_url(@site), notice: "Site was successfully updated." }
format.json { render :show, status: :ok, location: @site }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @site.errors, status: :unprocessable_entity }
end
end
end
# DELETE /sites/1 or /sites/1.json
def destroy
@site.destroy!
respond_to do |format|
format.html { redirect_to sites_url, notice: "Site was successfully destroyed." }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_site
@site = Site.find(params[:id])
end
# Only allow a list of trusted parameters through.
def site_params
params.require(:site).permit(:name, :domain, :gateway, :nameserver, :network, :netmask, :server_ip, :server_port, :fileserver_ip, :fileserver_port,:fileserver_basepath, :timezone, :apiurl, :cfenginehub)
end
end

View File

@ -0,0 +1,10 @@
class Account
include Mongoid::Document
include Mongoid::Timestamps
field :name, type: String
field :login, type: String
field :encpassword, type: String
field :sshpubkey, type: String
has_many :rootref, class_name: "Host", inverse_of: :rootuser
has_many :userref, class_name: "Host", inverse_of: :mainuser
end

View File

@ -0,0 +1,21 @@
class Host
include Mongoid::Document
include Mongoid::Timestamps
field :uuid, type: String
field :hostname, type: String
field :ip, type: String
field :installip, type: String
field :status, type: String
field :mac, type: String
field :discover, type: Mongoid::Boolean
field :installed, type: Mongoid::Boolean
field :toinstall, type: Mongoid::Boolean
field :interface, type: String
field :lastbootgenerated, type: String , default: ''
field :lastinstallgenerated, type: String , default: ''
field :lastpostinstallgenerated, type: String, default: ''
belongs_to :installtemplate , class_name: "Installtemplate", inverse_of: :hostreferences
belongs_to :site , class_name: "Site", inverse_of: :sitereferences
belongs_to :rootaccount , class_name: "Account", inverse_of: :rootref
belongs_to :mainaccount , class_name: "Account", inverse_of: :accountref
end

View File

@ -0,0 +1,18 @@
class Installtemplate
include Mongoid::Document
include Mongoid::Timestamps
field :name, type: String
field :ostype, type: String
field :osversion, type: String
field :repository, type: String
field :nfsroot, type: String
field :kernel, type: String
field :initrd, type: String
field :rootfile, type: String
field :lang, type: String
has_many :hostreferences, class_name: "Host", inverse_of: :installtemplate
belongs_to :boot , class_name: "Script", inverse_of: :bootref
belongs_to :install , class_name: "Script", inverse_of: :installref
belongs_to :postinstall , class_name: "Script", inverse_of: :postsinstallref
end

View File

@ -0,0 +1,8 @@
class Log
include Mongoid::Document
include Mongoid::Timestamps
field :source, type: String
field :crit, type: String
field :message, type: String
end

View File

@ -0,0 +1,21 @@
class Site
include Mongoid::Document
include Mongoid::Timestamps
field :name, type: String
field :domain, type: String
field :gateway, type: String
field :nameserver, type: String
field :network, type: String
field :netmask, type: String
field :server_ip, type: String
field :server_port, type: String
field :fileserver_ip, type: String
field :fileserver_port, type: String
field :fileserver_basepath, type: String
field :timezone, type: String
field :apiurl, type: String
field :description, type: String
field :cfenginehub, type: String
has_many :sitereferences, class_name: "Host", inverse_of: :site
end

View File

@ -0,0 +1,20 @@
<div id="<%= dom_id account %>">
<p>
<strong>Name:</strong>
<%= account.name %>
</p>
<p>
<strong>Login:</strong>
<%= account.login %>
</p>
<p>
<strong>SSH Key:</strong>
<%= account.sshpubkey %>
</p>
</div>

View File

@ -0,0 +1,2 @@
json.extract! account, :id, :name, :login, :sshpubkey, :password, :created_at, :updated_at
json.url account_url(account, format: :json)

View File

@ -0,0 +1,5 @@
<tr>
<td><%= account.name %></td>
<td><%= account.login %></td>
<td> <%= button_to "Edit", edit_account_path(account), method: :get, class: "button is-small is-primary" %></tr>
</tr>

View File

@ -0,0 +1,51 @@
<div class="box">
<%= form_with(model: account) do |form| %>
<% if account.errors.any? %>
<div style="color: red">
<h2><%= pluralize(account.errors.count, "error") %> prohibited this account from being saved:</h2>
<ul>
<% account.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<label class="label">Name</label>
<div class="control">
<%= form.text_field :name , { class: "input"} %>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<label class="label">Login</label>
<div class="control">
<%= form.text_field :login , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">Password</label>
<div class="control">
<%= form.text_field :password , { class: "input"} %>
</div>
</div>
</div>
<div class="field">
<div>
<label class="label">SSH Public Key</label>
<textarea class="textarea" name="account[sshpubkey]" id="account_sshpubkey" rows="4"><%= account.sshpubkey %></textarea>
</div>
</div>
<div class="control">
<button class="button is-link">Submit</button>
<%= link_to "Return", "/accounts", class: "button is-success" %>
</div>
<% end %>
</div>
<%= button_to "Destroy", @account, method: :delete, class: "button is-danger" %>

View File

@ -0,0 +1,3 @@
<h1 class="title">Editing Account: <%= @account.name %></h1>
<%= render "form", account: @account %>

View File

@ -0,0 +1,23 @@
<p style="color: green"><%= notice %></p>
<h1 class="title">Accounts</h1>
<%= button_to "New Account", new_account_path, method: :get, class: "button is-small is-primary" %></tr>
<div class="box">
<table id="scripts" class="table">
<thead>
<tr>
<th colspan="1">Login</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @accounts.each do |account| %>
<%= render :partial => 'account_raw', :locals => { :account => account} %>
<% end %>
</tbody>
</table>
</div>

View File

@ -0,0 +1 @@
json.array! @accounts, partial: "accounts/account", as: :account

View File

@ -0,0 +1,9 @@
<h1>New account</h1>
<%= render "form", account: @account %>
<br>
<div>
<%= link_to "Back to accounts", accounts_path %>
</div>

View File

@ -0,0 +1,10 @@
<p style="color: green"><%= notice %></p>
<%= render @account %>
<div>
<%= link_to "Edit this account", edit_account_path(@account) %> |
<%= link_to "Back to accounts", accounts_path %>
<%= button_to "Destroy", @account, method: :delete %>
</div>

View File

@ -0,0 +1 @@
json.partial! "accounts/account", account: @account

View File

@ -1,43 +1,48 @@
<h2>Edit <%= resource_name.to_s.humanize %></h2>
<div class="columns is-mobile is-centered">
<div class="column is-half">
<div class="box">
<h1 class="title is-1">Your profil</h1>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email", class: "input is-small" , placeholder: :email %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
<% end %>
<div class="field">
<%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
<%= f.password_field :password, autocomplete: "new-password",class: "input is-small" , placeholder: "New password" %>
<% if @minimum_password_length %>
<br />
<em><%= @minimum_password_length %> characters minimum</em>
<% end %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password", class: "input is-small" , placeholder: "New password confirmation" %>
</div>
<div class="field">
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password, autocomplete: "current-password", class: "input is-small" , placeholder: "Current password" %>
</div>
<div class="actions">
<%= f.submit "Update",class:"button is-success" %>
</div>
<% end %>
<h3>Cancel my account</h3>
<div>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?", turbo_confirm: "Are you sure?" }, method: :delete , class:"button is-danger"%></div>
<%= link_to "Back", :back %>
</div>
</div>
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
<% end %>
<div class="field">
<%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
<%= f.password_field :password, autocomplete: "new-password" %>
<% if @minimum_password_length %>
<br />
<em><%= @minimum_password_length %> characters minimum</em>
<% end %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password, autocomplete: "current-password" %>
</div>
<div class="actions">
<%= f.submit "Update" %>
</div>
<% end %>
<h3>Cancel my account</h3>
<div>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?", turbo_confirm: "Are you sure?" }, method: :delete %></div>
<%= link_to "Back", :back %>
</div>

View File

@ -0,0 +1,170 @@
<%# _form.html.erb %>
<div class="columns">
<div class="column">
<div class="box">
<%= form_with(model: host) do |form| %>
<% if host.errors.any? %>
<div style="color: red">
<h2><%= pluralize(host.errors.count, "error") %> prohibited this host from being saved:</h2>
<ul>
<% host.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">UUID</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :uuid , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">Hostname</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :hostname , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">ip</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :ip , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">Installing IP</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :installip , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">Status</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :status , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">MAC Address</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :mac , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">Interface</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= form.text_field :interface , { class: "input"} %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">Template</label>
</div>
<div class="field-body">
<div class="field">
<div class="select">
<%= collection_select(:host, :installtemplate_id, Installtemplate.all, :_id, :name) %>
</div>
</div>
</div>
</div>
<div class="field is-horizontal">
<div class="field-label is-small">
<label class="label">Site</label>
</div>
<div class="field-body">
<div class="field">
<div class="select">
<%= collection_select(:host, :site_id, Site.all, :_id, :name) %>
</div>
</div>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<%= form.label :rootaccount, class: "label is-small" %>
<div class="select is-primary">
<%= form.collection_select :rootaccount_id, Account.all, :id, :name %>
</div>
</div>
<div class="control">
<%= form.label :mainaccount, class: "label is-small" %>
<div class="select is-primary">
<%= form.collection_select :mainaccount_id, Account.all, :id, :name %>
</div>
</div>
<div class="control">
<%= form.label :discover, class: "checkbox" %>
<%= form.check_box :discover %>
</div>
<div class="control">
<%= form.label :installed, class: "checkbox" %>
<%= form.check_box :installed %>
</div>
<div class="control">
<%= form.label :toinstall, class: "checkbox" %>
<%= form.check_box :toinstall %>
</div>
</div>
<div class="control">
<button class="button is-link">Submit</button>
<%= link_to "Return", "/hosts", class: "button is-success" %>
<%= button_to "Destroy", @host, method: :delete, class: "button is-danger is-pulled-right" %>
</div>
<% end %>
</div>
</div>
</div>

View File

@ -0,0 +1,69 @@
<div class="card" id="<%= dom_id host %>">
<header class="card-header">
<p class="card-header-title">
<%= host.hostname %>
</p>
<button class="card-header-icon" aria-label="more options">
<span class="icon">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</button>
</header>
<div class="card-content">
<div class="content">
<p>
<strong>Ip:</strong>
<%= host.ip %>
</p>
<p>
<strong>Status:</strong>
<%= host.status %>
</p>
<p>
<strong>Mac:</strong>
<%= host.mac %>
</p>
<p>
<strong>Discover:</strong>
<%= host.discover %>
</p>
<p>
<strong>Installed:</strong>
<%= host.installed %>
</p>
<p>
<strong>Interface:</strong>
<%= host.interface %>
</p>
<p>
<strong>Install Template:</strong>
<% if defined?host.installtemplate.name %>
<%= host.installtemplate.name %>
<% else %>
not set
<% end %>
</p>
<p>
<strong>Site:</strong>
<% if defined?host.site.name %>
<%= host.site.name %>
<% else %>
not set
<% end %>
</p>
</div>
</div>
<button class="button">
<%= link_to "Edit this host", edit_host_path(host) %>
</button>
</div>

View File

@ -0,0 +1,2 @@
json.extract! host, :id, :uuid, :hostname, :ip, :status, :mac, :discover, :installed, :interface, :installtemplate, :site, :created_at, :updated_at
json.url host_url(host, format: :json)

View File

@ -0,0 +1,9 @@
<tr>
<td><%= host.hostname %></td>
<td><%= host.status %></td>
<td><%= host.installtemplate.name %></td>
<td><%= button_to "Edit", edit_host_path(host), method: :get, class: "button is-small is-primary" %></td>
<td><button id=<%= host.uuid %> class="getIpxeScript button is-small is-primary">IPXE</button></td>
<td><button id=<%= host.uuid %> class="getInstallScript button is-small is-primary">Install</button></td>
<td><button id=<%= host.uuid %> class="getPostinstallScript button is-small is-primary">Postinstall</button></td>
</tr>

View File

@ -0,0 +1,6 @@
<h1 class="title">Editing Host: <%= @host.hostname %></h1>
<%= render "form", host: @host %>

View File

@ -0,0 +1,27 @@
<h1 class="title">Hosts</h1>
<%= button_to "New Host", new_host_path, method: :get, class: "button is-small is-primary" %></tr>
<div class="container">
<table id="hosts" class="table">
<thead>
<tr>
<th colspan="1">Hostname</th>
<th colspan="1">Status</th>
<th colspan="1">Template</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @hosts.each do |host| %>
<%= render :partial => 'hostraw', :locals => { :host => host} %>
<% end %>
</tbody>
</table>
<div id="script_div">
<h2>Render</h2>
<pre style="overflow:scroll; max-height:500px" id="script_result">
</pre>
</div>
</div>

View File

@ -0,0 +1 @@
json.array! @hosts, partial: "hosts/host", as: :host

View File

@ -0,0 +1,9 @@
<h1>New host</h1>
<%= render "form", host: @host %>
<br>
<div>
<%= link_to "Back to hosts", hosts_path %>
</div>

View File

@ -0,0 +1,12 @@
<section>
<p style="color: green"><%= notice %></p>
</section>
<%= render @host %>
<div>
<button class="button">
<%= link_to "Back to hosts", hosts_path %>
</button>
</div>

View File

@ -0,0 +1 @@
json.partial! "hosts/host", host: @host

View File

@ -0,0 +1,112 @@
<div class="box">
<%= form_with(model: installtemplate) do |form| %>
<% if installtemplate.errors.any? %>
<div style="color: red">
<h2><%= pluralize(installtemplate.errors.count, "error") %> prohibited this installtemplate from being saved:</h2>
<ul>
<% installtemplate.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :name, class: "label" %>
<div class="control">
<%= form.text_field :name , { class: "input"} %>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<%= form.label :ostype, class: "label" %>
<div class="control">
<%= form.text_field :ostype , { class: "input"} %>
</div>
</div>
<div class="field">
<%= form.label :osversion, class: "label" %>
<div class="control">
<%= form.text_field :osversion , { class: "input"} %>
</div>
</div>
</div>
<div class="field">
<%= form.label :repository, class: "label" %>
<div class="control">
<%= form.text_field :repository , { class: "input"} %>
</div>
</div>
<div class="field">
<%= form.label :nfsroot, class: "label" %>
<div class="control">
<%= form.text_field :nfsroot , { class: "input"} %>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<%= form.label :kernel, class: "label" %>
<div class="control">
<%= form.text_field :kernel , { class: "input"} %>
</div>
</div>
<div class="field">
<%= form.label :initrd, class: "label" %>
<div class="control">
<%= form.text_field :initrd , { class: "input"} %>
</div>
</div>
</div>
<div class="field">
<%= form.label :rootfile, class: "label" %>
<div class="control">
<%= form.text_field :rootfile , { class: "input"} %>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<%= form.label :boot, class: "label" %>
<div class="select is-primary">
<%= form.collection_select :boot_id, Script.where(stage:"boot"), :id, :name %>
</div>
</div>
<div class="control">
<%= form.label :install, class: "label" %>
<div class="select is-primary">
<%= form.collection_select :install_id, Script.where(stage:"install"), :id, :name %>
</div>
</div>
<div class="control">
<%= form.label :postinstall, class: "label" %>
<div class="select is-primary">
<%= form.collection_select :postinstall_id, Script.where(stage:"postinstall"), :id, :name %>
</div>
</div>
</div>
<div class="field">
<%= form.label :lang, class: "label" %>
<div class="control">
<%= form.text_field :lang , { class: "input"} %>
</div>
</div>
<div class="control">
<button class="button is-link">Submit</button>
<%= link_to "Return", "/installtemplates", class: "button is-success" %>
</div>
<% end %>
<%= button_to " Destroy ", @installtemplate, method: :delete, class: "button is-danger" %>

View File

@ -0,0 +1,69 @@
<div id="<%= dom_id installtemplate %>">
<p>
<strong>Name:</strong>
<%= installtemplate.name %>
</p>
<p>
<strong>Ostype:</strong>
<%= installtemplate.ostype %>
</p>
<p>
<strong>Osversion:</strong>
<%= installtemplate.osversion %>
</p>
<p>
<strong>Repository:</strong>
<%= installtemplate.repository %>
</p>
<p>
<strong>Nfsroot:</strong>
<%= installtemplate.nfsroot %>
</p>
<p>
<strong>Kernel:</strong>
<%= installtemplate.kernel %>
</p>
<p>
<strong>Initrd:</strong>
<%= installtemplate.initrd %>
</p>
<p>
<strong>Rootfile:</strong>
<%= installtemplate.rootfile %>
</p>
<p>
<strong>Boot Script</strong>
<% if defined?installtemplate.boot.name %>
<%= installtemplate.boot.name %>
<% else %>
not set
<% end %>
</p>
<p>
<strong>Install</strong>
<% if defined?installtemplate.install.name %>
<%= installtemplate.install.name %>
<% else %>
not set
<% end %>
</p>
<p>
<strong>PostInstall</strong>
<% if defined?installtemplate.boot.name %>
<%= installtemplate.boot.name %>
<% else %>
not set
<% end %>
</p>
</div>

View File

@ -0,0 +1,2 @@
json.extract! installtemplate, :id, :name, :ostype, :osversion, :repository, :nfsroot, :kernel, :initrd, :rootfile, :boot, :install, :postinstall :created_at, :updated_at
json.url installtemplate_url(installtemplate, format: :json)

View File

@ -0,0 +1,4 @@
<tr>
<td><%= installtemplate.name %></td>
<td> <%= button_to "Edit", edit_installtemplate_path(installtemplate), method: :get, class: "button is-small is-primary" %></tr>
</tr>

View File

@ -0,0 +1,10 @@
<h1 class="title">Editing <%= @installtemplate.name %></h1>
<%= render "form", installtemplate: @installtemplate %>
<br>
<div>
<%= link_to "Show", @installtemplate %> |
<%= link_to "Back", installtemplates_path %>
</div>

View File

@ -0,0 +1,21 @@
<p style="color: green"><%= notice %></p>
<h1 class="title">Templates</h1>
<%= button_to "New Template", new_installtemplate_path, method: :get, class: "button is-small is-primary" %></tr>
<div class="box">
<table id="Templates" class="table">
<thead>
<tr>
<th colspan="1">Name</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @installtemplates.each do |installtemplate| %>
<%= render :partial => 'templateraw', :locals => { :installtemplate => installtemplate} %>
<% end %>
</tbody>
</table>
</div>

View File

@ -0,0 +1 @@
json.array! @installtemplates, partial: "installtemplates/installtemplate", as: :installtemplate

View File

@ -0,0 +1,9 @@
<h1>New installtemplate</h1>
<%= render "form", installtemplate: @installtemplate %>
<br>
<div>
<%= link_to "Back to installtemplates", installtemplates_path %>
</div>

View File

@ -0,0 +1,10 @@
<p style="color: green"><%= notice %></p>
<%= render @installtemplate %>
<div>
<%= link_to "Edit this installtemplate", edit_installtemplate_path(@installtemplate) %> |
<%= link_to "Back to installtemplates", installtemplates_path %>
<%= button_to "Destroy this installtemplate", @installtemplate, method: :delete %>
</div>

View File

@ -0,0 +1 @@
json.partial! "installtemplates/installtemplate", installtemplate: @installtemplate

View File

@ -1,3 +1,4 @@
<!-- application.html.erb -->
<!DOCTYPE html>
<html>
<head>
@ -14,14 +15,14 @@
<body>
<div class="container is-fluid">
<%= render "partials/top-menu" %>
<div class="columns">
<div class="column is-one-fifth">
<div class="columns is-1">
<div class="column is-one-quarter">
<%= render "partials/left-menu" %>
</div>
<div class="column auto">
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<div class="container is-fluid">
</div>
<div class="column">
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<div class="container">
<%= yield %>
</div>
</div>
@ -30,3 +31,5 @@
<%= javascript_include_tag "init" %>
</body>
</html>
<!-- end application.html.erb -->

View File

@ -0,0 +1,6 @@
<tr>
<td><%= log.created_at %></td>
<td><%= log.source %></td>
<td><%= log.crit %></td>
<td><%= log.message %></td>
</tr>

View File

@ -0,0 +1,22 @@
<p style="color: green"><%= notice %></p>
<div class="scrollDiv" >
<table id="logs" class="table">
<thead>
<tr>
<th colspan="1">Date</th>
<th colspan="1">Source</th>
<th colspan="1">Crit</th>
<th colspan="1">Message</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @logs.each do |log| %>
<%= render :partial => 'log_raw', :locals => { :log => log} %>
<% end %>
</tbody>
</table>
</div>

View File

@ -0,0 +1 @@
json.array! @logs, partial: "logs/log", as: :log

View File

@ -3,5 +3,5 @@
<div class="notification is-primary">
<h1>Home#index</h1>
</div>
<p>Find me in app/views/home/index.html.erb</p>
<p>Find me in app/views/pages/index.html.erb</p>
</div>

View File

@ -1,40 +1,32 @@
<aside class="menu">
<p class="menu-label">Tutorial</p>
<ul class="menu-list">
<li>
<a class="has-background-info toggleable">
Configurations
</a>
<ul>
<li><a href="/scripts">Scripts</a></li>
<li><a href="/templates">Templates</a></li>
<li><a href="/sites">Templates</a></li>
<li><a href="/accounts">Accounts</a></li>
<aside class="menu">
<ul class="menu-list">
<li>
<a class="has-background-info toggleable">
Configurations
</a>
<ul>
<%= link_to "Scripts" , scripts_path %>
<%= link_to "Templates" , installtemplates_path %>
<%= link_to "Sites" , sites_path %>
<%= link_to "Account" , accounts_path %>
</ul>
</li>
<li>
<% if @hostslist %>
<a class="has-background-info toggleable">
Hosts
</a>
<ul>
<% @hostslist.each do |host| %>
<%= link_to host.hostname , edit_host_path(host) %>
<% end %>
</ul>
</li>
<li>
<a class="has-background-info toggleable">
Hosts
</a>
<ul>
<li><a href="/host1">host1</a></li>
</ul>
</li>
<li><a>Data Structures</a></li>
<li><a>Web Tech</a></li>
<li><a>Machine Learning</a></li>
</ul>
<p class="menu-label">Courses</p>
<ul class="menu-list">
<li><a>Java</a></li>
<li><a>Python</a></li>
<li><a>C++</a></li>
</ul>
<ul class="menu-list">
<li><a>About us</a></li>
<li><a>Careers</a></li>
</ul>
</aside>
</ul>
<% else %>
<%= link_to "Host" , hosts_path %>
<% end %>
</li>
<li><%= link_to "Logs" , logs_path %></li>
</ul>
</aside>

View File

@ -48,9 +48,9 @@
<div class="navbar-item">
<div class="buttons">
<% if !user_signed_in? %>
<%= link_to "Sign up", new_registration_path(resource_name) , class: "button is-light"%><br />
<%= link_to "Login", new_user_session_path, class: "button is-light" %>
<% else %>
<%= link_to "Profil", edit_user_registration_path, class: "button is-light" %>
<%= button_to "Logout", destroy_user_session_path, method: :delete, class: "button is-light" %>
<% end %>
</div>

View File

@ -1,3 +1,4 @@
<div class="box">
<%= form_with(model: script) do |form| %>
<% if script.errors.any? %>
<div style="color: red">
@ -11,37 +12,58 @@
</div>
<% end %>
<div>
<%= form.label :name, style: "display: block" %>
<%= form.text_field :name %>
<div class="field">
<label class="label">Name</label>
<div class="control">
<%= form.text_field :name , { class: "input"} %>
</div>
</div>
<div>
<%= form.label :stage, style: "display: block" %>
<%= form.text_field :stage %>
<div class="field is-grouped">
<div class="field">
<label class="label">Stage</label>
<div class="control">
<%= form.text_field :stage , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">Lang</label>
<div class="control">
<%= form.text_field :lang , { class: "input"} %>
</div>
</div>
</div>
<div class="field">
<div>
<label class="label">Content</label>
<textarea class="textarea" name="script[content]" id="script_content" rows="15"><%= script.content %></textarea>
</div>
</div>
<div>
<%= form.label :lang, style: "display: block" %>
<%= form.text_field :lang %>
<div class="control">
<label class="checkbox">
<% if script.lock %>
<input type="checkbox" name="script[lock]", id="script_lock", checked>
<% else %>
<input type="checkbox" name="script[lock]", id="script_lock">
<% end %>
Lock
</label>
</div>
<div class="field">
<div>
<label class="label">Description</label>
<textarea class="textarea" name="script[description]" id="script_description" rows="2"><%= script.description %></textarea>
</div>
</div>
<div>
<%= form.label :content, style: "display: block" %>
<%= form.text_area :content %>
</div>
<div>
<%= form.label :lock, style: "display: block" %>
<%= form.check_box :lock %>
</div>
<div>
<%= form.label :description, style: "display: block" %>
<%= form.text_area :description %>
</div>
<div>
<%= form.submit %>
<div class="control">
<button class="button is-link">Submit</button>
<%= link_to "Return", "/scripts", class: "button is-success" %>
</div>
<% end %>
</div>
<%= button_to "Destroy", @script, method: :delete, class: "button is-danger" %>

View File

@ -0,0 +1,7 @@
<tr>
<td><%= script.name %></td>
<td><%= script.stage %></td>
<td><%= script.lang %></td>
<td> <%= button_to "Edit", edit_script_path(script), method: :get, class: "button is-small is-primary" %>
</tr>

View File

@ -1,10 +1,3 @@
<h1>Editing script</h1>
<h1 class="title">Editing Script: <%= @script.name %></h1>
<%= render "form", script: @script %>
<br>
<div>
<%= link_to "Show this script", @script %> |
<%= link_to "Back to scripts", scripts_path %>
</div>

View File

@ -1,14 +1,23 @@
<p style="color: green"><%= notice %></p>
<h1>Scripts</h1>
<div id="scripts">
<% @scripts.each do |script| %>
<%= render script %>
<p>
<%= link_to "Show this script", script %>
</p>
<% end %>
<h1 class="title">Scripts</h1>
<%= button_to "New Script", new_script_path, method: :get, class: "button is-small is-primary" %></tr>
<div class="box">
<table id="scripts" class="table">
<thead>
<tr>
<th colspan="1">Name</th>
<th colspan="1">Stage</th>
<th colspan="1">Lang</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @scripts.each do |script| %>
<%= render :partial => 'script_raw', :locals => { :script => script} %>
<% end %>
</tbody>
</table>
</div>
<%= link_to "New script", new_script_path %>

View File

@ -0,0 +1,117 @@
<%= form_with(model: site) do |form| %>
<div class="field">
<label class="label">Name</label>
<div class="control">
<%= form.text_field :name , { class: "input"} %>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<label class="label">Domain</label>
<div class="control">
<%= form.text_field :domain , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">Gateway</label>
<div class="control">
<%= form.text_field :gateway , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">Nameserver</label>
<div class="control">
<%= form.text_field :nameserver , { class: "input"} %>
</div>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<label class="label">Network</label>
<div class="control">
<%= form.text_field :network , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">Netmask</label>
<div class="control">
<%= form.text_field :netmask , { class: "input"} %>
</div>
</div>
</div>
<div class="field">
<%= form.label :apiurl, class: "label" %>
<div class="control">
<%= form.text_field :apiurl , { class: "input"} %>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<label class="label">Serveur IP</label>
<div class="control">
<%= form.text_field :server_ip , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">Serveur Port</label>
<div class="control">
<%= form.text_field :server_port , { class: "input"} %>
</div>
</div>
</div>
<div class="field is-grouped">
<div class="field">
<label class="label">File Server Ip</label>
<div class="control">
<%= form.text_field :fileserver_ip , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">File Server Port</label>
<div class="control">
<%= form.text_field :fileserver_port , { class: "input"} %>
</div>
</div>
<div class="field">
<label class="label">File Server Basepath</label>
<div class="control">
<%= form.text_field :fileserver_basepath , { class: "input"} %>
</div>
</div>
</div>
<div class="field">
<%= form.label :cfenginehub, class: "label" %>
<div class="control">
<%= form.text_field :cfenginehub , { class: "input"} %>
</div>
</div>
<% if not @site.cfenginehub.empty? -%>
<%= link_to "Goto cfengine hub", "http://#{@site.cfenginehub}", class: "button is-info", :target => "_blank" %>
<% end -%>
<div class="field">
<%= form.label :timezone, class: "label" %>
<div class="control">
<%= form.text_field :timezone , { class: "input"} %>
</div>
</div>
<div class="control">
<button class="button is-link">Submit In</button>
<%= link_to "Return to Site index", "/sites", class: "button is-success" %>
</div>
<% end %>

View File

@ -0,0 +1,37 @@
<div id="<%= dom_id site %>">
<p>
<strong>Name:</strong>
<%= site.name %>
</p>
<p>
<strong>Domain:</strong>
<%= site.domain %>
</p>
<p>
<strong>Gateway:</strong>
<%= site.gateway %>
</p>
<p>
<strong>Nameserver:</strong>
<%= site.nameserver %>
</p>
<p>
<strong>Network:</strong>
<%= site.network %>
</p>
<p>
<strong>Netmask:</strong>
<%= site.netmask %>
</p>
<p>
<strong>Server:</strong>
<%= site.server_ip %>:<%= site.server_port %>:
</p>
</div>

View File

@ -0,0 +1,2 @@
json.extract! site, :id, :name, :domain, :gateway, :nameserver, :network, :netmask, :created_at, :updated_at
json.url site_url(site, format: :json)

View File

@ -0,0 +1,5 @@
<tr>
<td><%= site.name %></td>
<td><%= site.description %></td>
<td> <%= button_to "Edit", edit_site_path(site), method: :get, class: "button is-small is-primary" %></tr>
</tr>

View File

@ -0,0 +1,24 @@
<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<table class="table table-striped table-bordered table-condensed sortable">
<thead>
<tr>
<th style="width: 200px;">Nom</th>
<th style="width: 40px;"></th>
</tr>
</thead>
<tbody>
<% @sites.each do |site| %>
<tr>
<td valign="top">
<%= link_to site.name, edit_site_path(site), :remote => true %>
</td>
<td valign="top">
<%= site.description %>
</td>
</tr>
<% end %>
</tbody>
</table>

View File

@ -0,0 +1,4 @@
<h1 class="title">Editing Site: <%= @site.name %></h1>
<%= render "form", site: @site %>

View File

@ -0,0 +1,22 @@
<p style="color: green"><%= notice %></p>
<h1 class="title">Sites</h1>
<%= button_to "New Site", new_site_path, method: :get, class: "button is-small is-primary" %></tr>
<div class="box">
<table id="sites" class="table">
<thead>
<tr>
<th colspan="1">Site Name</th>
<th colspan="1"></th>
</tr>
</thead>
<tbody>
<% @sites.each do |site| %>
<%= render :partial => 'siteraw', :locals => { :site => site} %>
<% end %>
</tbody>
</table>
</div>

View File

@ -0,0 +1 @@
json.array! @sites, partial: "sites/site", as: :site

View File

@ -0,0 +1,9 @@
<h1>New site</h1>
<%= render "form", site: @site %>
<br>
<div>
<%= link_to "Back to sites", sites_path %>
</div>

View File

@ -0,0 +1,10 @@
<p style="color: green"><%= notice %></p>
<%= render @site %>
<div>
<%= link_to "Edit this site", edit_site_path(@site) %> |
<%= link_to "Back to sites", sites_path %>
<%= button_to "Destroy this site", @site, method: :delete %>
</div>

View File

@ -0,0 +1 @@
json.partial! "sites/site", site: @site

View File

@ -1,7 +1,13 @@
Rails.application.routes.draw do
devise_for :users
resources :scripts
root 'home#index'
resources :sites
resources :accounts
resources :installtemplates
resources :hosts
resources :logs
root 'pages#index'
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
@ -10,4 +16,23 @@ Rails.application.routes.draw do
# Defines the root path route ("/")
# root "posts#index"
# Webui call
get '/host/ipxe', to: "hosts#generate_boot"
get '/host/install', to: "hosts#generate_install"
get '/host/postinstall', to: "hosts#generate_postinstall"
# Machine Call
get '/api/host/ipxe', to: "engine#generate_boot"
get '/api/host/install', to: "engine#generate_install"
get '/api/host/postinstall', to: "engine#generate_postinstall"
get '/api/host/installed', to: "engine#generate_installed", defaults: { format: 'text' }
get '/engine/global', to: "engine#generateglobal", defaults: { format: 'text' }
get '/api/host/cloudinit/:uuid/user-data', to: "engine#generate_install", defaults: { format: 'text' }
get '/api/host/cloudinit/:uuid/meta-data', to: "engine#generate_metadata", defaults: { format: 'text' }
get '/api/host/cloudinit/:uuid/vendor-data', to: "engine#generate_metadata", defaults: { format: 'text' }
end