class Chef::Knife::IonoscloudFirewallCreate

Attributes

description[R]
required_options[R]

Public Class Methods

new(args = []) click to toggle source
Calls superclass method
# File lib/chef/knife/ionoscloud_firewall_create.rb, line 76
def initialize(args = [])
  super(args)
  @description =
  'Creates a new firewall rule on an existing NIC.'
  @required_options = [:datacenter_id, :server_id, :nic_id, :ionoscloud_username, :ionoscloud_password]
end

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/ionoscloud_firewall_create.rb, line 83
def run
  $stdout.sync = true
  handle_extra_config
  validate_required_params(@required_options, config)

  print "#{ui.color('Creating firewall...', :magenta)}"

  params = {
    name: config[:name],
    protocol: config[:protocol],
    source_mac: config[:source_mac],
    source_ip: config[:source_ip],
    target_ip: config[:target_ip],
    port_range_start: config[:port_range_start],
    port_range_end: config[:port_range_end],
    icmp_type: config[:icmp_type],
    icmp_code: config[:icmp_code],
  }

  nic_api = Ionoscloud::NicApi.new(api_client)

  firewall, _, headers = nic_api.datacenters_servers_nics_firewallrules_post_with_http_info(
    config[:datacenter_id],
    config[:server_id],
    config[:nic_id],
    Ionoscloud::FirewallRule.new({ properties: Ionoscloud::FirewallruleProperties.new(params.compact) }),
  )

  dot = ui.color('.', :magenta)
  api_client.wait_for { print dot; is_done? get_request_id headers }

  firewall = nic_api.datacenters_servers_nics_firewallrules_find_by_id(
    config[:datacenter_id],
    config[:server_id],
    config[:nic_id],
    firewall.id,
  )

  puts "\n"
  puts "#{ui.color('ID', :cyan)}: #{firewall.id}"
  puts "#{ui.color('Name', :cyan)}: #{firewall.properties.name}"
  puts "#{ui.color('Protocol', :cyan)}: #{firewall.properties.protocol}"
  puts "#{ui.color('Source MAC', :cyan)}: #{firewall.properties.source_mac}"
  puts "#{ui.color('Source IP', :cyan)}: #{firewall.properties.source_ip}"
  puts "#{ui.color('Target IP', :cyan)}: #{firewall.properties.target_ip}"
  puts "#{ui.color('Port Range Start', :cyan)}: #{firewall.properties.port_range_start}"
  puts "#{ui.color('Port Range End', :cyan)}: #{firewall.properties.port_range_end}"
  puts "#{ui.color('ICMP Type', :cyan)}: #{firewall.properties.icmp_type}"
  puts "#{ui.color('ICMP Code', :cyan)}: #{firewall.properties.icmp_code}"
  puts 'done'
end