From 72bf0f02a5cbd9cea81aa3ebac8ee9da63f04ca0 Mon Sep 17 00:00:00 2001 From: Andrei Shaidurov Date: Wed, 19 Apr 2017 14:12:41 +0200 Subject: [PATCH] Prevent deactivation of base product --- .rubocop.yml | 3 +++ lib/suse/connect/cli.rb | 5 ++++- lib/suse/connect/client.rb | 1 + lib/suse/connect/errors.rb | 1 + lib/suse/connect/status.rb | 4 ++-- lib/suse/connect/zypper.rb | 2 +- 6 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 92c62e51..3ade8cac 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,3 +1,6 @@ +ClassLength: + Max: 128 + HashSyntax: Enabled: false diff --git a/lib/suse/connect/cli.rb b/lib/suse/connect/cli.rb index 41b08a32..8488494f 100644 --- a/lib/suse/connect/cli.rb +++ b/lib/suse/connect/cli.rb @@ -75,11 +75,14 @@ def execute! # rubocop:disable MethodLength, CyclomaticComplexity # Zypper errors are in the range 1-7 and 100-105 (which connect will not cause) log.fatal "Error: zypper returned (#{e.exitstatus}) with '#{e.output}'" exit e.exitstatus - rescue SystemNotRegisteredError => e + rescue SystemNotRegisteredError log.fatal 'Deregistration failed. Check if the system has been '\ 'registered using the --status-text option or use the '\ '--regcode parameter to register it.' exit 69 + rescue BaseProductDeactivationError + log.fatal 'Can not deregister base product. Use SUSEConnect -d to deactivate the whole system.' + exit 70 end private diff --git a/lib/suse/connect/client.rb b/lib/suse/connect/client.rb index 6592d355..cc026741 100644 --- a/lib/suse/connect/client.rb +++ b/lib/suse/connect/client.rb @@ -37,6 +37,7 @@ def register! def deregister! raise SystemNotRegisteredError unless registered? if @config.product + raise BaseProductDeactivationError if @config.product == Zypper.base_product service = deactivate_product @config.product System.remove_service service Zypper.remove_release_package @config.product.identifier diff --git a/lib/suse/connect/errors.rb b/lib/suse/connect/errors.rb index f2fa6fbb..dd235a1a 100644 --- a/lib/suse/connect/errors.rb +++ b/lib/suse/connect/errors.rb @@ -11,6 +11,7 @@ class SystemCallError < StandardError; end class UnsupportedStatusFormat < StandardError; end class NetworkError < StandardError; end class SystemNotRegisteredError < StandardError; end + class BaseProductDeactivationError < StandardError; end # Basic error for API interactions. Collects HTTP response (which includes # status code and response body) for future showing to user via {Cli} diff --git a/lib/suse/connect/status.rb b/lib/suse/connect/status.rb index 1e17b71d..952ec64f 100644 --- a/lib/suse/connect/status.rb +++ b/lib/suse/connect/status.rb @@ -69,8 +69,8 @@ def extract_extensions(product) activation_code: build_product_activation_code(extension), name: extension.friendly_name, free: extension.free, - installed: installed_products.any? {|p| p.to_params == extension.to_params }, - activated: activated_products.any? {|p| p.to_params == extension.to_params }, + installed: installed_products.any? {|p| p == extension }, + activated: activated_products.any? {|p| p == extension }, extensions: extract_extensions(extension) } end if product.extensions diff --git a/lib/suse/connect/zypper.rb b/lib/suse/connect/zypper.rb index 97ba0afc..9751bdb2 100644 --- a/lib/suse/connect/zypper.rb +++ b/lib/suse/connect/zypper.rb @@ -152,7 +152,7 @@ def install_release_package(identifier) end def remove_release_package(identifier) - call("--no-refresh --non-interactive remove --no-recommends -t product #{identifier}") if identifier + call("--no-refresh --non-interactive remove -t product #{identifier}") if identifier end # rubocop:disable AccessorMethodName