class LinuxAdmin::SubscriptionManager

Constants

SATELLITE6_SERVER_CERT_PATH

Public Instance Methods

all_repos(options = nil) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 99
def all_repos(options = nil)
  cmd     = "subscription-manager repos"
  output  = run!(cmd).output

  parse_output(output)
end
available_subscriptions() click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 78
def available_subscriptions
  cmd     = "subscription-manager list --all --available"
  output  = run!(cmd).output
  parse_output(output).each_with_object({}) { |i, h| h[i[:pool_id]] = i }
end
disable_repo(repo, options = nil) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 92
def disable_repo(repo, options = nil)
  cmd     = "subscription-manager repos"
  params  = {"--disable=" => repo}

  run!(cmd, :params => params)
end
enable_repo(repo, options = nil) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 84
def enable_repo(repo, options = nil)
  cmd     = "subscription-manager repos"
  params  = {"--enable=" => repo}

  logger.info("#{self.class.name}##{__method__} Enabling repository: #{repo}")
  run!(cmd, :params => params)
end
enabled_repos() click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 106
def enabled_repos
  all_repos.select { |i| i[:enabled] }.collect { |r| r[:repo_id] }
end
organizations(options) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 28
def organizations(options)
  raise ArgumentError, "username and password are required" unless options[:username] && options[:password]

  install_server_certificate(options[:server_url], SATELLITE6_SERVER_CERT_PATH) if options[:server_url]

  cmd = "subscription-manager orgs"

  params = {"--username=" => options[:username], "--password=" => options[:password]}
  params.merge!(proxy_params(options))

  result = run!(cmd, :params => params)
  parse_output(result.output).each_with_object({}) { |i, h| h[i[:name]] = i }
end
refresh() click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 24
def refresh
  run!("subscription-manager refresh")
end
register(options) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 42
def register(options)
  raise ArgumentError, "username and password are required" unless options[:username] && options[:password]

  install_server_certificate(options[:server_url], SATELLITE6_SERVER_CERT_PATH) if options[:server_url]

  cmd = "subscription-manager register"

  params = {"--username=" => options[:username], "--password=" => options[:password]}
  params.merge!(proxy_params(options))
  params["--environment="] = options[:environment] if options[:environment]
  params["--org="]         = options[:org]         if options[:server_url] && options[:org]

  run!(cmd, :params => params)
end
registered?(options = nil) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 18
def registered?(options = nil)
  args = ["subscription-manager identity"]
  args << {:params => proxy_params(options)} if options
  Common.run(*args).exit_status.zero?
end
run!(cmd, options = {}) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 5
def run!(cmd, options = {})
  Common.run!(cmd, options)
rescue AwesomeSpawn::CommandResultError => err
  raise CredentialError.new(err.result) if err.result.error.downcase.include?("invalid username or password")
  raise SubscriptionManagerError.new(err.message, err.result)
end
subscribe(options) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 57
def subscribe(options)
  cmd    = "subscription-manager attach"
  params = proxy_params(options)

  if options[:pools].blank?
    params.merge!({"--auto" => nil})
  else
    pools  = options[:pools].collect {|pool| ["--pool", pool]}
    params = params.to_a + pools
  end

  run!(cmd, :params => params)
end
subscribed_products() click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 71
def subscribed_products
  cmd     = "subscription-manager list --installed"
  output  = run!(cmd).output

  parse_output(output).select {|p| p[:status].downcase == "subscribed"}.collect {|p| p[:product_id]}
end
validate_credentials(options) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 14
def validate_credentials(options)
  !!organizations(options)
end

Private Instance Methods

format_values(content_group) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 130
def format_values(content_group)
  content_group[:enabled] = content_group[:enabled].to_i == 1  if content_group[:enabled]
  content_group[:ends]    = Date.strptime(content_group[:ends], "%m/%d/%Y")   if content_group[:ends]
  content_group[:starts]  = Date.strptime(content_group[:starts], "%m/%d/%Y") if content_group[:starts]
  content_group
end
parse_content(content) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 118
def parse_content(content)
  # Break into content groupings by "\n\n" then process each grouping
  content.split("\n\n").each_with_object([]) do |group, group_array|
    group = group.split("\n").each_with_object({}) do |line, hash|
      next if line.blank?
      key, value = line.split(":", 2)
      hash[key.strip.downcase.tr(" -", "_").to_sym] = value.strip unless value.blank?
    end
    group_array.push(format_values(group))
  end
end
parse_output(output) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 112
def parse_output(output)
  # Strip the 3 line header off the top
  content = output.split("\n")[3..-1].join("\n")
  parse_content(content)
end
proxy_params(options) click to toggle source
# File lib/linux_admin/registration_system/subscription_manager.rb, line 137
def proxy_params(options)
  config = {}
  config["--proxy="]          = options[:proxy_address]   if options[:proxy_address]
  config["--proxyuser="]      = options[:proxy_username]  if options[:proxy_username]
  config["--proxypassword="]  = options[:proxy_password]  if options[:proxy_password]
  config
end