Class: Pvectl::Repositories::Hosts

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

Overview

Repository for per-node /etc/hosts file contents.

Uses the ‘/nodes/node/hosts` endpoint to fetch and update the raw contents of /etc/hosts on a single node.

The Proxmox API returns a digest pair. The digest is used for optimistic concurrency control — the same digest must be sent back with the POST update.

Examples:

Fetching hosts file

repo = Hosts.new(connection)
hosts = repo.fetch("pve1")
hosts.data   #=> "127.0.0.1 localhost\n..."
hosts.digest #=> "abc123def..."

Updating hosts file with digest

repo.update("pve1", "127.0.0.1 localhost\n", "abc123def...")

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

#fetch(node_name) ⇒ Models::HostsFile

Fetches the /etc/hosts contents for a node.

Parameters:

  • node_name (String)

    node name

Returns:



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

def fetch(node_name)
  response = connection.client["nodes/#{node_name}/hosts"].get
  data = extract_data(response) || {}
  build_model(data.merge(node: node_name))
end

#update(node_name, data, digest = nil) ⇒ void

This method returns an undefined value.

Updates the /etc/hosts contents for a node.

The Proxmox POST endpoint requires ‘data` and optionally accepts `digest` for optimistic locking. If the on-server digest no longer matches, Proxmox returns an error which is propagated verbatim.

Parameters:

  • node_name (String)

    node name

  • data (String)

    new /etc/hosts content

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

    digest from prior fetch (optional but recommended)



46
47
48
49
50
# File 'lib/pvectl/repositories/hosts.rb', line 46

def update(node_name, data, digest = nil)
  params = { data: data }
  params[:digest] = digest if digest && !digest.empty?
  connection.client["nodes/#{node_name}/hosts"].post(params)
end