Class: Pvectl::Repositories::Apt

Inherits:
Base
  • Object
show all
Defined in:
lib/pvectl/repositories/apt.rb

Overview

Repository for Proxmox APT package management on cluster nodes.

Wraps the ‘/nodes/node/apt/*` API endpoints. Provides:

  • listing pending package updates (GET /apt/update)

  • refreshing the package index (POST /apt/update — apt-get update)

  • reading per-package changelogs (GET /apt/changelog)

  • listing important Proxmox package versions (GET /apt/versions)

Examples:

Listing pending updates on a node

repo = Apt.new(connection)
updates = repo.pending("pve1")
updates.each { |p| puts "#{p.package}: #{p.old_version} -> #{p.version}" }

Triggering a package index refresh

upid = repo.refresh("pve1", notify: false, quiet: true)

See Also:

Instance Method Summary collapse

Methods inherited from Base

#get, #initialize, #list

Constructor Details

This class inherits a constructor from Pvectl::Repositories::Base

Instance Method Details

#changelog(node, package, version: nil) ⇒ String

Fetches the changelog for a package on a node.

Parameters:

  • node (String)

    node name

  • package (String)

    package name

  • version (String, nil) (defaults to: nil)

    specific package version (optional)

Returns:

  • (String)

    changelog text (empty string on error)



60
61
62
63
64
65
66
67
68
# File 'lib/pvectl/repositories/apt.rb', line 60

def changelog(node, package, version: nil)
  params = { name: package }
  params[:version] = version if version
  response = connection.client["nodes/#{node}/apt/changelog"].get(params: params)
  data = extract_data(response)
  data.is_a?(String) ? data : data.to_s
rescue StandardError
  ""
end

#pending(node) ⇒ Array<Models::AptPackage>

Lists pending APT updates available on a node.

Parameters:

  • node (String)

    node name

Returns:



29
30
31
32
33
34
35
# File 'lib/pvectl/repositories/apt.rb', line 29

def pending(node)
  response = connection.client["nodes/#{node}/apt/update"].get
  packages = unwrap(response)
  packages.map { |data| build_model(data.merge(node: node)) }
rescue StandardError
  []
end

#refresh(node, notify: false, quiet: false) ⇒ String

Refreshes the package index on a node (equivalent to apt-get update).

Returns the Proxmox task UPID — the operation runs asynchronously.

Parameters:

  • node (String)

    node name

  • notify (Boolean) (defaults to: false)

    whether to send a notification about new packages

  • quiet (Boolean) (defaults to: false)

    whether to suppress progress output

Returns:

  • (String)

    task UPID



45
46
47
48
49
50
51
52
# File 'lib/pvectl/repositories/apt.rb', line 45

def refresh(node, notify: false, quiet: false)
  params = {}
  params[:notify] = 1 if notify
  params[:quiet] = 1 if quiet
  response = connection.client["nodes/#{node}/apt/update"].post(params)
  data = extract_data(response)
  data.is_a?(String) ? data : data.to_s
end

#versions(node) ⇒ Array<Models::AptPackage>

Lists important Proxmox package versions installed on a node.

Parameters:

  • node (String)

    node name

Returns:



74
75
76
77
78
79
80
# File 'lib/pvectl/repositories/apt.rb', line 74

def versions(node)
  response = connection.client["nodes/#{node}/apt/versions"].get
  packages = unwrap(response)
  packages.map { |data| build_model(data.merge(node: node)) }
rescue StandardError
  []
end