Class: Pvectl::Commands::EditDns

Inherits:
Object
  • Object
show all
Defined in:
lib/pvectl/commands/edit_dns.rb

Overview

Handler for the ‘pvectl edit dns` command.

Opens the DNS resolver configuration for a node in a YAML editor. On save, applies the changes via PUT /nodes/node/dns.

The node identifier may be supplied either as a positional argument (matching ‘pvectl edit node NAME` semantics) or via the –node flag.

Examples:

Basic usage

pvectl edit dns pve1
pvectl edit dns --node pve1

Dry-run mode

pvectl edit dns pve1 --dry-run

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args, options, global_options) ⇒ EditDns

Initializes the command.

Parameters:

  • args (Array<String>)

    command arguments

  • options (Hash)

    command options

  • global_options (Hash)

    global CLI options



36
37
38
39
40
# File 'lib/pvectl/commands/edit_dns.rb', line 36

def initialize(args, options, global_options)
  @args = args
  @options = options
  @global_options = global_options
end

Class Method Details

.execute(args, options, global_options) ⇒ Integer

Executes the edit dns command.

Parameters:

  • args (Array<String>)

    command arguments (positional NODE)

  • options (Hash)

    command options (:node, :editor, :“dry-run”)

  • global_options (Hash)

    global CLI options

Returns:

  • (Integer)

    exit code



27
28
29
# File 'lib/pvectl/commands/edit_dns.rb', line 27

def self.execute(args, options, global_options)
  new(args, options, global_options).execute
end

Instance Method Details

#executeInteger

Executes the edit flow.

Returns:

  • (Integer)

    exit code



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/pvectl/commands/edit_dns.rb', line 45

def execute
  node_name = @args.first || @options[:node]
  return usage_error("NODE is required (positional argument or --node flag)") unless node_name && !node_name.empty?

  load_config
  connection = Pvectl::Connection.new(@config)
  service = build_edit_service(connection)
  result = service.execute(node_name: node_name)

  if result.nil?
    $stdout.puts "Edit cancelled, no changes made."
    return ExitCodes::SUCCESS
  end

  if result.successful?
    display_diff(result)
    if @options[:"dry-run"]
      $stdout.puts "(dry-run mode — no changes applied)"
    else
      $stdout.puts "DNS configuration for node #{node_name} updated successfully."
    end
    ExitCodes::SUCCESS
  else
    $stderr.puts "Error: #{result.error}"
    ExitCodes::GENERAL_ERROR
  end
rescue Pvectl::Config::ConfigNotFoundError,
       Pvectl::Config::InvalidConfigError,
       Pvectl::Config::ContextNotFoundError,
       Pvectl::Config::ClusterNotFoundError,
       Pvectl::Config::UserNotFoundError
  raise
rescue StandardError => e
  $stderr.puts "Error: #{e.message}"
  ExitCodes::GENERAL_ERROR
end