ref: refs/heads/master
commit d7f81ecc8fa970e8d833f80143d18d24506797e1
Author: Martin Vidner
Date: Fri Aug 14 13:22:16 2009 +0200
Revert "removed old code (may be usable some other time)"
This reverts commit d82a40afe72eb739966fcc14bce1ebda997327c3.
---
.../app/controllers/commands_controller.rb | 33 +++++
.../app/controllers/config_ntp_controller.rb | 131 ++++++++++++++++++++
.../app/controllers/services_controller.rb | 49 ++------
plugins/services/app/models/config_ntp.rb | 29 +++++
plugins/services/app/models/service.rb | 72 -----------
plugins/services/app/views/commands/show.html.erb | 1 +
plugins/services/app/views/commands/show.json.erb | 1 +
plugins/services/app/views/commands/show.xml.erb | 1 +
.../services/app/views/config_ntp/show.html.erb | 1 +
.../services/app/views/config_ntp/show.json.erb | 1 +
plugins/services/app/views/config_ntp/show.xml.erb | 1 +
plugins/services/config/resources/services.yml | 3 +-
12 files changed, 210 insertions(+), 113 deletions(-)
diff --git a/plugins/services/app/controllers/commands_controller.rb b/plugins/services/app/controllers/commands_controller.rb
new file mode 100644
index 0000000..0e6abf2
--- /dev/null
+++ b/plugins/services/app/controllers/commands_controller.rb
@@ -0,0 +1,33 @@
+require "scr"
+
+include ApplicationHelper
+
+class CommandsController < ApplicationController
+
+ before_filter :login_required
+
+ #FIXME: index requires parameter, but system_check does not expect that and breaks
+ def index
+ redirect_to service_path(params[:service_id])
+ end
+
+ def update
+ id = params[:id]
+ sid = params[:service_id]
+ logger.debug "calling services/#{sid}/command #{id}"
+
+ unless permission_check( "org.opensuse.yast.system.services.execute")
+ render ErrorResult.error(403, 1, "no permission") and return
+ end
+
+ cmd = "/etc/init.d/#{sid}"
+ logger.debug "Service cmd #{cmd} #{id}"
+ ret = Scr.instance.execute([cmd, id])
+ if !ret
+ # or 503 service unavailable
+ render ErrorResult.error(404, "2", "SCR call failed") and return
+ end
+ render :xml => ret
+ end
+
+end
diff --git a/plugins/services/app/controllers/config_ntp_controller.rb b/plugins/services/app/controllers/config_ntp_controller.rb
new file mode 100644
index 0000000..3ef934f
--- /dev/null
+++ b/plugins/services/app/controllers/config_ntp_controller.rb
@@ -0,0 +1,131 @@
+include ApplicationHelper
+
+class ConfigNtpController < ApplicationController
+ before_filter :login_required
+
+ require "scr"
+
+ def initialize
+ @scr = Scr.instance
+ end
+#
+#local functions
+#
+ def get_manual_server
+
+ manual_server = ""
+ ret = @scr.execute(["/sbin/yast2", "ntp-client", "list"])
+ if ret
+ servers = ret[:stderr].split "\n"
+ servers.each do |s|
+ column = s.split(" ")
+ if column.size == 2 && column[0] == "Server"
+ if column[1] != "0.pool.ntp.org" && column[1] != "1.pool.ntp.org" && column[1] != "2.pool.ntp.org"
+ if manual_server == ""
+ # Thats one user defined ntp-server
+ manual_server = column[1]
+ else
+ #There are more than one user defined server --> do not use it
+ manual_server = "No single configured ntp server"
+ end
+ end
+ end
+ end
+ end
+ return manual_server
+ end
+
+ def enabled
+
+ ret = @scr.execute(["/sbin/yast2", "ntp-client", "status"])
+ return (ret[:stderr]=="NTP daemon is enabled.\n") if ret
+ return false
+ end
+
+ def write_ntp_conf (requested_servers)
+ update_required = false
+ #remove evtl.old server if requested
+ servers = []
+ ret = @scr.execute(["/sbin/yast2", "ntp-client", "list"])
+ servers_line = ret[:stderr].split "\n"
+ servers_line.each do |s|
+ column = s.split " "
+ if column.size == 2 && column[0] == "Server"
+ servers << column[1]
+ end
+ end
+ update_required = true
+ requested_servers.each do |req_server|
+ servers.each do |server|
+ if server==req_server
+ update_required = false
+ break
+ end
+ end
+ end
+
+ #update required
+ if update_required
+ servers.each do |server|
+ @scr.execute(["/sbin/yast2", "ntp-client", "delete", server])
+ end
+ requested_servers.each do |req_server|
+ @scr.execute(["/sbin/yast2", "ntp-client", "add", req_server])
+ end
+ end
+ end
+
+ def enable (enabled)
+ @scr.execute(["/sbin/yast2", "ntp-client", enabled ? "enable" : "disable" ])
+ end
+
+#
+#actions
+#
+
+ def show
+ unless permission_check( "org.opensuse.yast.system.services.read")
+ render ErrorResult.error(403, 1, "no permission") and return
+ end
+
+ @ntp = ConfigNtp.new
+ @ntp.manual_server = ""
+ @ntp.use_random_server = true
+ @ntp.manual_server = get_manual_server
+ @ntp.enabled = enabled
+ if @ntp.manual_server == ""
+ @ntp.use_random_server = true
+ else
+ @ntp.use_random_server = false
+ end
+ end
+
+ def update
+
+ unless permission_check( "org.opensuse.yast.system.services.write")
+ render ErrorResult.error(403, 1, "no permission") and return
+ end
+ @ntp = ConfigNtp.new
+ if params[:config_ntp] != nil
+ @ntp.use_random_server = params[:config_ntp][:use_random_server]
+ @ntp.enabled = params[:config_ntp][:enabled]
+ @ntp.manual_server = params[:config_ntp][:manual_server]
+ logger.debug "UPDATED: #{@ntp.inspect}"
+
+ requested_servers = []
+ if @ntp.use_random_server == false
+ requested_servers << @ntp.manual_server
+ else
+ requested_servers = ["0.pool.ntp.org", "1.pool.ntp.org", "2.pool.ntp.org"]
+ end
+ write_ntp_conf(requested_servers)
+ enable(@ntp.enabled)
+ else
+ render ErrorResult.error(404, 2, "format or internal error") and return
+ end
+ render :show
+
+ end
+
+
+end
diff --git a/plugins/services/app/controllers/services_controller.rb b/plugins/services/app/controllers/services_controller.rb
index e10ba20..dceed81 100644
--- a/plugins/services/app/controllers/services_controller.rb
+++ b/plugins/services/app/controllers/services_controller.rb
@@ -1,58 +1,29 @@
-require 'service'
-
class ServicesController < ApplicationController
before_filter :login_required
def index
- unless permission_check("org.opensuse.yast.modules.yapi.services.read")
+ unless permission_check( "org.opensuse.yast.system.services.read")
render ErrorResult.error(403, 1, "no permission") and return
end
- @services = Service.find_all
+
+ lservices = Lsbservice.all
+ lservices = lservices.sort unless params[:sort] == "0"
+ @services = lservices.map {|svc| {:link => svc} }
end
- # Shows service status. Requires read permission for services YaPI.
+ # show the svc including the commands
def show
- unless permission_check("org.opensuse.yast.modules.yapi.services.get")
- render ErrorResult.error( 403, 1, "no permission" ) and return
+ unless permission_check( "org.opensuse.yast.system.services.read")
+ render ErrorResult.error(403, 1, "no permission") and return
end
-
id = params[:id]
+
begin
- @service = Service.find id
+ @service = Lsbservice.new id
rescue Exception => e # Don't fail on non-existing service. Should be more specific.
logger.debug e
render ErrorResult.error(404, 106, "no such service") and return
end
logger.debug "show@service #{@service.inspect}"
end
-
- # Change the service status. Requires write permissions for services YaPI.
- # POST /services
- def create
-
- unless permission_check( "org.opensuse.yast.modules.yapi.services.execute")
- render ErrorResult.error(403, 1, "no permission") and return
- end
-
- services = params[:services]
- id = services[:name]
- begin
- @service = Service.find id
- rescue Exception => e
- logger.debug e
- render ErrorResult.error(404, 106, "no such service") and return
- end
-
- @service.execute = services[:execute]
-
- begin
- @service.save
- rescue Exception => e
- logger.debug e
- render ErrorResult.error(404, @error_id, @error_string) and return
- end
-
- render :show
- end
-
end
diff --git a/plugins/services/app/models/config_ntp.rb b/plugins/services/app/models/config_ntp.rb
new file mode 100644
index 0000000..901b82f
--- /dev/null
+++ b/plugins/services/app/models/config_ntp.rb
@@ -0,0 +1,29 @@
+class ConfigNtp
+
+ attr_accessor :enabled,
+ :use_random_server,
+ :manual_server
+
+ def initialize
+ @enabled = false
+ @use_random_server = false
+ @manual_server = ""
+ end
+
+ def to_xml( options = {} )
+ xml = options[:builder] ||= Builder::XmlMarkup.new(options)
+ xml.instruct! unless options[:skip_instruct]
+
+ xml.config_ntp do
+ xml.tag!(:manual_server, @manual_server )
+ xml.tag!(:enabled, @enabled, {:type => "boolean"} )
+ xml.tag!(:use_random_server, @use_random_server, {:type => "boolean"} )
+ end
+ end
+
+ def to_json( options = {} )
+ hash = Hash.from_xml(to_xml())
+ return hash.to_json
+ end
+
+end
diff --git a/plugins/services/app/models/service.rb b/plugins/services/app/models/service.rb
deleted file mode 100644
index 4a75584..0000000
--- a/plugins/services/app/models/service.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require 'yast_service'
-
-class Service
-
- attr_accessor :name
- attr_accessor :status
- attr_accessor :execute
-
- def initialize
- end
-
- # services = Service.find_all
- def self.find_all
-
- services = []
- yapi_ret = YastService.Call("YaPI::SERVICES::Read")
-
- if yapi_ret.nil?
- raise "Can't get services list"
- else
- yapi_ret.each do |s|
- service = Service.new
- service.name = s["name"]
- service.status = s["status"]
- Rails.logger.debug "service: #{service.inspect}"
- services << service
- end
- end
- services
- end
-
- # load the status of the service
- def self.find(id)
- yapi_ret = YastService.Call("YaPI::SERVICES::Get", id)
-
- raise "Got no data while loading service" if yapi_ret.empty?
-
- service = Service.new
- service.name = yapi_ret["name"]
- service.status = yapi_ret["status"]
-
- Rails.logger.debug service.inspect
- service
- end
-
-
- def save
- ret = YastService.Call("YaPI::SERVICES::Execute", self.name, self.execute)
-
- Rails.logger.debug "Command returns: #{ret.inspect}"
- raise ret["stdout"] + ret["stderr"] if ret["exit"] != "0"
- true
- end
-
-
- def to_xml( options = {} )
- xml = options[:builder] ||= Builder::XmlMarkup.new(options)
- xml.instruct! unless options[:skip_instruct]
-
- xml.service do
- xml.tag!(:name, name )
- xml.tag!(:status, status, {:type => "integer"} )
- xml.tag!(:execute, execute )
- end
- end
-
- def to_json( options = {} )
- hash = Hash.from_xml(to_xml())
- return hash.to_json
- end
-
-end
diff --git a/plugins/services/app/views/commands/show.html.erb b/plugins/services/app/views/commands/show.html.erb
new file mode 100644
index 0000000..d26d152
--- /dev/null
+++ b/plugins/services/app/views/commands/show.html.erb
@@ -0,0 +1 @@
+<%= @service.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/commands/show.json.erb b/plugins/services/app/views/commands/show.json.erb
new file mode 100644
index 0000000..d26d152
--- /dev/null
+++ b/plugins/services/app/views/commands/show.json.erb
@@ -0,0 +1 @@
+<%= @service.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/commands/show.xml.erb b/plugins/services/app/views/commands/show.xml.erb
new file mode 100644
index 0000000..d26d152
--- /dev/null
+++ b/plugins/services/app/views/commands/show.xml.erb
@@ -0,0 +1 @@
+<%= @service.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/config_ntp/show.html.erb b/plugins/services/app/views/config_ntp/show.html.erb
new file mode 100644
index 0000000..1eb4136
--- /dev/null
+++ b/plugins/services/app/views/config_ntp/show.html.erb
@@ -0,0 +1 @@
+<%= @ntp.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/config_ntp/show.json.erb b/plugins/services/app/views/config_ntp/show.json.erb
new file mode 100644
index 0000000..1eb4136
--- /dev/null
+++ b/plugins/services/app/views/config_ntp/show.json.erb
@@ -0,0 +1 @@
+<%= @ntp.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/app/views/config_ntp/show.xml.erb b/plugins/services/app/views/config_ntp/show.xml.erb
new file mode 100644
index 0000000..1eb4136
--- /dev/null
+++ b/plugins/services/app/views/config_ntp/show.xml.erb
@@ -0,0 +1 @@
+<%= @ntp.to_xml -%>
\ No newline at end of file
diff --git a/plugins/services/config/resources/services.yml b/plugins/services/config/resources/services.yml
index a3d3486..734dd0e 100644
--- a/plugins/services/config/resources/services.yml
+++ b/plugins/services/config/resources/services.yml
@@ -1,3 +1,2 @@
-interface: org.opensuse.yast.modules.yapi.services
+interface: org.opensuse.yast.system.services
controller: services
-nested: permissions
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org