Class: VagrantDockerNetworksManager::NetworkBuilder
- Inherits:
-
Object
- Object
- VagrantDockerNetworksManager::NetworkBuilder
- Defined in:
- lib/vagrant-docker-networks-manager/network_builder.rb
Constant Summary collapse
- PLUGIN_LABEL =
"com.vagrant.plugin"- PLUGIN_NAME =
"docker_networks_manager"
Class Method Summary collapse
-
.create_args(name:, driver: nil, labels: {}, ipam: [], ipv6: false, attachable: false, parent: nil) ⇒ Array<String>
Builds arguments for
docker network create. - .present?(val) ⇒ Boolean
Instance Method Summary collapse
- #build_create_command ⇒ Object
-
#build_create_command_args ⇒ Array<String>
Builds docker network create arguments from plugin configuration.
-
#initialize(config, machine_id: nil) ⇒ NetworkBuilder
constructor
A new instance of NetworkBuilder.
Constructor Details
#initialize(config, machine_id: nil) ⇒ NetworkBuilder
Returns a new instance of NetworkBuilder.
10 11 12 13 |
# File 'lib/vagrant-docker-networks-manager/network_builder.rb', line 10 def initialize(config, machine_id: nil) @config = config @machine_id = machine_id end |
Class Method Details
.create_args(name:, driver: nil, labels: {}, ipam: [], ipv6: false, attachable: false, parent: nil) ⇒ Array<String>
Builds arguments for docker network create.
Accepts both plugin config keys and Docker inspect-style IPAM keys so callers can create fresh networks or recreate existing networks from inspected state.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/vagrant-docker-networks-manager/network_builder.rb', line 55 def self.create_args(name:, driver: nil, labels: {}, ipam: [], ipv6: false, attachable: false, parent: nil) args = ["network", "create"] labels.each { |k, v| args += ["--label", "#{k}=#{v}"] if k && v } args += ["--driver", driver] if present?(driver) Array(ipam).each do |c| subnet = c[:subnet] || c["Subnet"] gateway = c[:gateway] || c["Gateway"] ip_range = c[:ip_range] || c["IPRange"] args += ["--subnet", subnet] if present?(subnet) args += ["--gateway", gateway] if present?(gateway) args += ["--ip-range", ip_range] if present?(ip_range) end args << "--ipv6" if ipv6 args << "--attachable" if attachable args += ["--opt", "parent=#{parent}"] if %w[macvlan ipvlan].include?(driver.to_s) && present?(parent) args << name.to_s args end |
.present?(val) ⇒ Boolean
79 80 81 |
# File 'lib/vagrant-docker-networks-manager/network_builder.rb', line 79 def self.present?(val) !val.nil? && !(val.respond_to?(:empty?) && val.empty?) end |
Instance Method Details
#build_create_command ⇒ Object
37 38 39 |
# File 'lib/vagrant-docker-networks-manager/network_builder.rb', line 37 def build_create_command build_create_command_args.shelljoin end |
#build_create_command_args ⇒ Array<String>
Builds docker network create arguments from plugin configuration.
Labels are the ownership contract used later for safe adoption and cleanup.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/vagrant-docker-networks-manager/network_builder.rb', line 20 def build_create_command_args labels = { PLUGIN_LABEL => PLUGIN_NAME } labels["com.vagrant.machine_id"] = @machine_id if @machine_id self.class.create_args( name: @config.network_name.to_s, driver: @config.network_type, labels: labels, ipam: [{ subnet: @config.network_subnet, gateway: @config.network_gateway, ip_range: @config.ip_range }], ipv6: truthy?(@config.enable_ipv6), attachable: truthy?(@config.network_attachable), parent: @config.network_parent ) end |