2022-07-06 06:08:45 +00:00
< page-header title = "'Create network'" breadcrumbs = "[{label:'Networks', link:'docker.networks'}, 'Add network']" > < / page-header >
2016-08-17 05:25:42 +00:00
< div class = "row" >
< div class = "col-lg-12 col-md-12 col-xs-12" >
< rd-widget >
< rd-widget-body >
2018-08-16 10:29:15 +00:00
< form class = "form-horizontal" name = "networkCreationForm" >
2016-08-17 05:25:42 +00:00
<!-- name - input -->
< div class = "form-group" >
2018-08-16 10:29:15 +00:00
< label for = "network_name" class = "col-sm-2 col-lg-1 control-label text-left" > Name< / label >
< div class = "col-sm-10 col-lg-11" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "config.Name" id = "network_name" placeholder = "e.g. myNetwork" / >
2016-08-17 05:25:42 +00:00
< / div >
< / div >
<!-- !name - input -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Driver configuration < / div >
2016-08-17 05:25:42 +00:00
<!-- driver - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "network_driver" class = "col-sm-2 col-lg-1 control-label text-left" > Driver< / label >
2018-08-16 10:29:15 +00:00
< div class = "col-sm-10 col-lg-11" >
2017-09-06 13:11:38 +00:00
< select class = "form-control" ng-options = "driver for driver in availableNetworkDrivers" ng-model = "config.Driver" ng-if = "availableNetworkDrivers.length > 0" >
< option disabled hidden value = "" > Select a driver< / option >
< / select >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "config.Driver" id = "network_driver" placeholder = "e.g. driverName" ng-if = "availableNetworkDrivers.length === 0" / >
2016-08-17 05:25:42 +00:00
< / div >
< / div >
<!-- !driver - input -->
<!-- driver - options -->
< div class = "form-group" >
2022-07-14 13:35:37 +00:00
< div class = "col-sm-12 mt-1" >
2017-03-27 12:44:39 +00:00
< label class = "control-label text-left" >
Driver options
2022-07-03 23:21:25 +00:00
< portainer-tooltip message = "'Driver options are specific to the selected driver. Please refer to the selected driver documentation.'" > < / portainer-tooltip >
2017-03-27 12:44:39 +00:00
< / label >
2016-08-17 05:25:42 +00:00
< / div >
<!-- driver - options - input - list -->
2022-07-14 13:35:37 +00:00
< div class = "col-sm-12 form-inline mt-2" >
< div ng-repeat = "option in formValues.DriverOptions" class = "mt-1" >
2016-08-17 05:25:42 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > name< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "option.name" placeholder = "e.g. com.docker.network.bridge.enable_icc" / >
2016-08-17 05:25:42 +00:00
< / div >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "option.value" placeholder = "e.g. true" / >
2016-08-17 05:25:42 +00:00
< / div >
2022-07-14 13:35:37 +00:00
< button class = "btn btn-sm btn-light" type = "button" ng-click = "removeDriverOption($index)" >
2022-07-24 23:57:18 +00:00
< pr-icon icon = "'trash-2'" feather = "true" class-name = "'icon-secondary icon-md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
2016-08-17 05:25:42 +00:00
< / div >
2022-07-14 13:35:37 +00:00
< div class = "small interactive text-muted vertical-center mt-1" ng-click = "addDriverOption()" >
< pr-icon icon = "'plus'" size = "'md'" feather = "true" > < / pr-icon > Add driver option
< / div >
2016-08-17 05:25:42 +00:00
< / div >
<!-- !driver - options - input - list -->
< / div >
<!-- !driver - options -->
2018-08-16 10:29:15 +00:00
<!-- macvlan - management -->
< network-macvlan-form ng-show = "config.Driver === 'macvlan'" data = "formValues.Macvlan" application-state = "applicationState" > < / network-macvlan-form >
<!-- !macvlan - management -->
< div ng-hide = "config.Driver === 'macvlan' && formValues.Macvlan.Scope === 'swarm'" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > IPV4 Network configuration < / div >
2018-08-16 10:29:15 +00:00
<!-- subnet - gateway - inputs -->
< div class = "form-group" >
2020-04-28 00:34:54 +00:00
< label for = "ipv4_network_subnet" class = "col-sm-2 col-lg-1 control-label text-left" > Subnet< / label >
2018-08-16 10:29:15 +00:00
< div class = "col-sm-4 col-lg-5" >
2020-04-28 00:34:54 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.IPV4.Subnet" id = "ipv4_network_subnet" placeholder = "e.g. 172.20.0.0/16" / >
2018-08-16 10:29:15 +00:00
< / div >
2020-04-28 00:34:54 +00:00
< label for = "ipv4_network_gateway" class = "col-sm-2 col-lg-1 control-label text-left" > Gateway< / label >
2018-08-16 10:29:15 +00:00
< div class = "col-sm-4 col-lg-5" >
2020-04-28 00:34:54 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.IPV4.Gateway" id = "ipv4_network_gateway" placeholder = "e.g. 172.20.10.11" / >
2018-08-16 10:29:15 +00:00
< / div >
< / div >
<!-- !subnet - gateway - inputs -->
<!-- iprange - auxaddr - inputs -->
< div class = "form-group" >
2020-04-28 00:34:54 +00:00
< label for = "ipv4_network_iprange" class = "col-sm-2 col-lg-1 control-label text-left" > IP range< / label >
2018-08-16 10:29:15 +00:00
< div class = "col-sm-4 col-lg-5" >
2020-04-28 00:34:54 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.IPV4.IPRange" id = "ipv4_network_iprange" placeholder = "e.g. 172.20.10.128/25" / >
2018-08-16 10:29:15 +00:00
< / div >
2020-07-08 01:35:52 +00:00
< / div >
< div ng-repeat = "auxAddress in formValues.IPV4.AuxiliaryAddresses track by $index" class = "form-group" >
< label for = "ipv4_network_auxaddr_{{ $index }}" class = "col-sm-2 col-lg-1 control-label text-left" > Exclude IP< / label >
2018-08-16 10:29:15 +00:00
< div class = "col-sm-4 col-lg-5" >
2020-07-08 01:35:52 +00:00
< input
type="text"
class="form-control"
ng-model="formValues.IPV4.AuxiliaryAddresses[$index]"
ng-change="checkIPV4AuxiliaryAddress($index)"
id="ipv4_network_auxaddr_{{ $index }}"
placeholder="e.g. my-router=172.20.10.129"
/>
< / div >
2022-07-14 13:35:37 +00:00
< button class = "btn btn-md btn-light" type = "button" ng-click = "removeIPV4AuxAddress($index)" >
2022-07-24 23:57:18 +00:00
< pr-icon icon = "'trash-2'" feather = "true" class-name = "'icon-secondary icon-md'" > < / pr-icon >
2020-07-08 01:35:52 +00:00
< / button >
2022-07-14 13:35:37 +00:00
< div class = "col-sm-12 small text-warning" ng-if = "state.IPV4AuxiliaryAddressesError[$index]" >
< p class = "vertical-center" > < pr-icon icon = "'alert-triangle'" mode = "'warning'" feather = "true" > < / pr-icon > Exclude ip cannot be the same as gateway.< / p >
2020-04-28 00:34:54 +00:00
< / div >
< / div >
<!-- !iprange - auxaddr - inputs -->
2020-07-08 01:35:52 +00:00
< div class = "form-group" >
2022-07-14 13:35:37 +00:00
< div class = "col-sm-12 small interactive text-muted vertical-center" ng-click = "addIPV4AuxAddress()" >
< pr-icon icon = "'plus'" size = "'md'" feather = "true" > < / pr-icon > Add excluded IP
< / div >
2020-07-08 01:35:52 +00:00
< / div >
2020-04-28 00:34:54 +00:00
< / div >
< div ng-show = "config.Driver === 'bridge' || (config.Driver === 'macvlan' && formValues.Macvlan.Scope !== 'swarm')" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > IPV6 Network configuration < / div >
2020-04-28 00:34:54 +00:00
<!-- subnet - gateway - inputs -->
< div class = "form-group" >
< label for = "ipv6_network_subnet" class = "col-sm-2 col-lg-1 control-label text-left" > Subnet< / label >
< div class = "col-sm-4 col-lg-5" >
< input type = "text" class = "form-control" ng-model = "formValues.IPV6.Subnet" id = "ipv6_network_subnet" placeholder = "e.g. 2001:db8::/48" / >
< / div >
< label for = "ipv6_network_gateway" class = "col-sm-2 col-lg-1 control-label text-left" > Gateway< / label >
< div class = "col-sm-4 col-lg-5" >
< input type = "text" class = "form-control" ng-model = "formValues.IPV6.Gateway" id = "ipv6_network_gateway" placeholder = "e.g. 2001:db8::1" / >
< / div >
< / div >
<!-- !subnet - gateway - inputs -->
<!-- iprange - auxaddr - inputs -->
< div class = "form-group" >
< label for = "ipv6_network_iprange" class = "col-sm-2 col-lg-1 control-label text-left" > IP range< / label >
< div class = "col-sm-4 col-lg-5" >
< input type = "text" class = "form-control" ng-model = "formValues.IPV6.IPRange" id = "ipv6_network_iprange" placeholder = "e.g. 2001:db8::/64" / >
< / div >
2020-07-08 01:35:52 +00:00
< / div >
< div ng-repeat = "auxAddress in formValues.IPV6.AuxiliaryAddresses track by $index" class = "form-group" >
< label for = "ipv6_network_auxaddr_{{ $index }}" class = "col-sm-2 col-lg-1 control-label text-left" > Exclude IP< / label >
2020-04-28 00:34:54 +00:00
< div class = "col-sm-4 col-lg-5" >
2020-07-08 01:35:52 +00:00
< input
type="text"
class="form-control"
ng-model="formValues.IPV6.AuxiliaryAddresses[$index]"
ng-change="checkIPV6AuxiliaryAddress($index)"
id="ipv6_network_auxaddr_{{ $index }}"
placeholder="e.g. my-router=2001:db8::1"
/>
< / div >
2022-07-14 13:35:37 +00:00
< button class = "btn btn-md btn-light" type = "button" ng-click = "removeIPV6AuxAddress($index)" >
2022-07-24 23:57:18 +00:00
< pr-icon icon = "'trash-2'" feather = "true" class-name = "'icon-secondary icon-md'" > < / pr-icon >
2020-07-08 01:35:52 +00:00
< / button >
< div class = "col-sm-12 small text-warning" ng-show = "state.IPV6AuxiliaryAddressesError[$index]" >
2022-07-14 13:35:37 +00:00
< p class = "vertical-center" > < pr-icon icon = "'alert-triangle'" mode = "'warning'" feather = "true" > < / pr-icon > Exclude ip cannot be the same as gateway.< / p >
2018-08-16 10:29:15 +00:00
< / div >
< / div >
<!-- !iprange - auxaddr - inputs -->
2020-07-08 01:35:52 +00:00
< div class = "form-group" >
2022-07-14 13:35:37 +00:00
< div class = "col-sm-12 small interactive text-muted vertical-center" ng-click = "addIPV6AuxAddress()" >
< pr-icon icon = "'plus'" size = "'md'" feather = "true" > < / pr-icon > Add excluded IP
< / div >
2020-07-08 01:35:52 +00:00
< / div >
2018-08-16 10:29:15 +00:00
< / div >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Advanced configuration < / div >
2016-12-25 20:32:17 +00:00
<!-- labels -->
< div class = "form-group" >
<!-- labels - input - list -->
2022-07-14 13:35:37 +00:00
< div class = "col-sm-12 form-inline" >
< div ng-repeat = "label in formValues.Labels" class = "mt-1" >
2016-12-25 20:32:17 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > name< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "label.key" placeholder = "e.g. com.example.foo" / >
2016-12-25 20:32:17 +00:00
< / div >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "label.value" placeholder = "e.g. bar" / >
2016-12-25 20:32:17 +00:00
< / div >
2022-07-14 13:35:37 +00:00
< button class = "btn btn-sm btn-light" type = "button" ng-click = "removeLabel($index)" >
2022-07-24 23:57:18 +00:00
< pr-icon icon = "'trash-2'" feather = "true" class-name = "'icon-secondary icon-md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
2016-12-25 20:32:17 +00:00
< / div >
2022-07-14 13:35:37 +00:00
< div class = "form-group" >
< div class = "col-sm-12 small interactive text-muted vertical-center mt-1" ng-click = "addLabel()" >
< pr-icon icon = "'plus'" size = "'md'" feather = "true" > < / pr-icon > Add label
< / div >
< / div >
2016-12-25 20:32:17 +00:00
< / div >
<!-- !labels - input - list -->
< / div >
<!-- !labels -->
2017-03-27 12:44:39 +00:00
<!-- internal -->
2018-08-16 10:29:15 +00:00
< div class = "form-group" ng-hide = "config.Driver === 'macvlan' && formValues.Macvlan.Scope === 'local'" >
2017-03-27 12:44:39 +00:00
< div class = "col-sm-12" >
2022-07-14 13:35:37 +00:00
< por-switch-field
label-class="'col-sm-2'"
checked="config.Internal"
label="'Isolated network'"
tooltip="'An isolated network has no inbound or outbound communications.'"
on-change="(onChangeInternal)"
>< / por-switch-field >
2017-03-27 12:44:39 +00:00
< / div >
< / div >
<!-- !internal -->
2018-08-16 10:29:15 +00:00
<!-- attachable -->
< div class = "form-group" ng-hide = "config.Driver === 'macvlan' && formValues.Macvlan.Scope === 'local'" >
< div class = "col-sm-12" >
2022-07-14 13:35:37 +00:00
< por-switch-field
label-class="'col-sm-2'"
checked="config.Attachable"
label="'Enable manual container attachment'"
on-change="(onChangeAttachable)"
>< / por-switch-field >
2018-08-16 10:29:15 +00:00
< / div >
< / div >
<!-- !attachable -->
2020-04-10 21:54:53 +00:00
< div
ng-if="
applicationState.endpoint.mode.agentProxy & &
applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE' & &
config.Driver !== 'overlay' & &
config.Driver !== 'macvlan'
"
>
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Deployment < / div >
2018-05-06 07:15:57 +00:00
<!-- node - selection -->
2020-04-10 21:54:53 +00:00
< node-selector model = "formValues.NodeName" > < / node-selector >
2018-05-06 07:15:57 +00:00
<!-- !node - selection -->
< / div >
2017-09-19 14:58:30 +00:00
<!-- access - control -->
2020-06-09 09:55:36 +00:00
< por-access-control-form form-data = "formValues.AccessControlData" > < / por-access-control-form >
2017-09-19 14:58:30 +00:00
<!-- !access - control -->
2017-03-27 12:44:39 +00:00
<!-- actions -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Actions < / div >
2017-03-27 12:44:39 +00:00
< div class = "form-group" >
< div class = "col-sm-12" >
2020-04-10 21:54:53 +00:00
< button
type="button"
class="btn btn-primary btn-sm"
2020-07-08 01:35:52 +00:00
ng-disabled="state.actionInProgress || !config.Name || (config.Driver === 'macvlan' & & networkCreationForm.$invalid) || !isValid()"
2020-04-10 21:54:53 +00:00
ng-click="create()"
button-spinner="state.actionInProgress"
>
2017-11-12 21:39:12 +00:00
< span ng-hide = "state.actionInProgress" > Create the network< / span >
< span ng-show = "state.actionInProgress" > Creating network...< / span >
2017-11-12 19:27:28 +00:00
< / button >
2022-07-14 13:35:37 +00:00
< span class = "text-danger space-left" ng-if = "state.formValidationError" > {{ state.formValidationError }}< / span >
2017-03-27 12:44:39 +00:00
< / div >
< / div >
<!-- !actions -->
2016-08-17 05:25:42 +00:00
< / form >
< / rd-widget-body >
< / rd-widget >
< / div >
2020-04-10 21:54:53 +00:00
< / div >