ref: refs/heads/master
commit d82a40afe72eb739966fcc14bce1ebda997327c3
Author: Jiri Suchomel
Date: Wed Aug 12 10:56:23 2009 +0200
removed old code (may be usable some other time)
reduced to simple start/stop service tasks
added model for accessing YaPI
---
.../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, 113 insertions(+), 210 deletions(-)
diff --git a/plugins/services/app/controllers/commands_controller.rb b/plugins/services/app/controllers/commands_controller.rb
deleted file mode 100644
index 0e6abf2..0000000
--- a/plugins/services/app/controllers/commands_controller.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-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
deleted file mode 100644
index 3ef934f..0000000
--- a/plugins/services/app/controllers/config_ntp_controller.rb
+++ /dev/null
@@ -1,131 +0,0 @@
-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 dceed81..e10ba20 100644
--- a/plugins/services/app/controllers/services_controller.rb
+++ b/plugins/services/app/controllers/services_controller.rb
@@ -1,29 +1,58 @@
+require 'service'
+
class ServicesController < ApplicationController
before_filter :login_required
def index
- unless permission_check( "org.opensuse.yast.system.services.read")
+ unless permission_check("org.opensuse.yast.modules.yapi.services.read")
render ErrorResult.error(403, 1, "no permission") and return
end
-
- lservices = Lsbservice.all
- lservices = lservices.sort unless params[:sort] == "0"
- @services = lservices.map {|svc| {:link => svc} }
+ @services = Service.find_all
end
- # show the svc including the commands
+ # Shows service status. Requires read permission for services YaPI.
def show
- unless permission_check( "org.opensuse.yast.system.services.read")
- render ErrorResult.error(403, 1, "no permission") and return
+ unless permission_check("org.opensuse.yast.modules.yapi.services.get")
+ render ErrorResult.error( 403, 1, "no permission" ) and return
end
- id = params[:id]
+ id = params[:id]
begin
- @service = Lsbservice.new id
+ @service = Service.find 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
deleted file mode 100644
index 901b82f..0000000
--- a/plugins/services/app/models/config_ntp.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-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
new file mode 100644
index 0000000..4a75584
--- /dev/null
+++ b/plugins/services/app/models/service.rb
@@ -0,0 +1,72 @@
+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
deleted file mode 100644
index d26d152..0000000
--- a/plugins/services/app/views/commands/show.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @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
deleted file mode 100644
index d26d152..0000000
--- a/plugins/services/app/views/commands/show.json.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @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
deleted file mode 100644
index d26d152..0000000
--- a/plugins/services/app/views/commands/show.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @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
deleted file mode 100644
index 1eb4136..0000000
--- a/plugins/services/app/views/config_ntp/show.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @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
deleted file mode 100644
index 1eb4136..0000000
--- a/plugins/services/app/views/config_ntp/show.json.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @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
deleted file mode 100644
index 1eb4136..0000000
--- a/plugins/services/app/views/config_ntp/show.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @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 734dd0e..a3d3486 100644
--- a/plugins/services/config/resources/services.yml
+++ b/plugins/services/config/resources/services.yml
@@ -1,2 +1,3 @@
-interface: org.opensuse.yast.system.services
+interface: org.opensuse.yast.modules.yapi.services
controller: services
+nested: permissions
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org