blob: 4f0cbbd2f3de077444d05e357043964afa11f62f [file] [log] [blame]
Aleš Komárek41e82312017-04-11 13:37:44 +02001===============
2Neutron Formula
3===============
Filip Pytlouncd028e42015-10-06 16:28:32 +02004
Jakub Pavlik9ecf0262016-05-20 11:20:58 +02005Neutron is an OpenStack project to provide "networking as a service" between
6interface devices (e.g., vNICs) managed by other Openstack services (e.g.,
7nova).
Filip Pytlouncd028e42015-10-06 16:28:32 +02008
Jakub Pavlik9ecf0262016-05-20 11:20:58 +02009Starting in the Folsom release, Neutron is a core and supported part of the
10OpenStack platform (for Essex, we were an "incubated" project, which means use
11is suggested only for those who really know what they're doing with Neutron).
Filip Pytlouncd028e42015-10-06 16:28:32 +020012
Aleš Komárek41e82312017-04-11 13:37:44 +020013Sample Pillars
Filip Pytlouncd028e42015-10-06 16:28:32 +020014==============
15
16Neutron Server on the controller node
17
18.. code-block:: yaml
19
20 neutron:
21 server:
22 enabled: true
Jiri Broulik74f61112016-11-21 20:23:47 +010023 version: mitaka
Swann Croiset9407daf2017-02-02 15:27:56 +010024 allow_pagination: true
25 pagination_max_limit: 100
Filip Pytlouncd028e42015-10-06 16:28:32 +020026 bind:
27 address: 172.20.0.1
28 port: 9696
Filip Pytlouncd028e42015-10-06 16:28:32 +020029 database:
30 engine: mysql
31 host: 127.0.0.1
32 port: 3306
33 name: neutron
34 user: neutron
35 password: pwd
36 identity:
37 engine: keystone
38 host: 127.0.0.1
39 port: 35357
40 user: neutron
41 password: pwd
42 tenant: service
Dennis Dmitriev37114722017-03-06 16:52:26 +020043 endpoint_type: internal
Filip Pytlouncd028e42015-10-06 16:28:32 +020044 message_queue:
45 engine: rabbitmq
46 host: 127.0.0.1
47 port: 5672
48 user: openstack
49 password: pwd
50 virtual_host: '/openstack'
51 metadata:
52 host: 127.0.0.1
53 port: 8775
54 password: pass
Petr Michalec61f7ab22016-11-29 16:29:09 +010055 audit:
56 enabled: false
Filip Pytlouncd028e42015-10-06 16:28:32 +020057
Swann Croiset9407daf2017-02-02 15:27:56 +010058Note: The pagination is useful to retrieve a large bunch of resources,
59because a single request may fail (timeout). This is enabled with both
60parameters *allow_pagination* and *pagination_max_limit* as shown above.
61
Ondrej Smola314eee22017-03-08 21:21:16 +010062Neutron lbaas provides on the controller node
63
64.. code-block:: yaml
65
66 neutron:
67 server:
68 lbaas:
69 enabled: true
70 providers:
71 avi_adc:
72 enabled: true
73 engine: avinetworks
74 controller_address: 10.182.129.239
75 controller_user: admin
76 controller_password: Cloudlab2016
77 controller_cloud_name: Default-Cloud
78 avi_adc2:
79 engine: avinetworks
80 ...
81
Aleš Komárek41e82312017-04-11 13:37:44 +020082Note: If you want contrail lbaas then backend is only required. Lbaas in
83pillar should be define only if it should be disabled.
Ondrej Smola314eee22017-03-08 21:21:16 +010084
85.. code-block:: yaml
86
87 neutron:
88 server:
89 lbaas:
90 enabled: disabled
91
Aleš Komárek41e82312017-04-11 13:37:44 +020092Neutron VXLAN tenant networks with Network nodes
93------------------------------------------------
Swann Croiset9407daf2017-02-02 15:27:56 +010094
Aleš Komárek41e82312017-04-11 13:37:44 +020095With DVR for East-West and Network node for North-South.
Jiri Broulik74f61112016-11-21 20:23:47 +010096
97This use case describes a model utilising VxLAN overlay with DVR. The DVR
Aleš Komárek41e82312017-04-11 13:37:44 +020098routers will only be utilized for traffic that is router within the cloud
99infrastructure and that remains encapsulated. External traffic will be
100routed to via the network nodes.
Jiri Broulik74f61112016-11-21 20:23:47 +0100101
102The intention is that each tenant will require at least two (2) vrouters
103one to be utilised
104
Aleš Komárek41e82312017-04-11 13:37:44 +0200105Neutron Server
marcoa4428a32016-06-10 11:50:16 +0200106
107.. code-block:: yaml
108
109 neutron:
110 server:
Jiri Broulik74f61112016-11-21 20:23:47 +0100111 version: mitaka
112 plugin: ml2
113 bind:
114 address: 172.20.0.1
115 port: 9696
116 database:
117 engine: mysql
118 host: 127.0.0.1
119 port: 3306
120 name: neutron
121 user: neutron
122 password: pwd
123 identity:
124 engine: keystone
125 host: 127.0.0.1
126 port: 35357
127 user: neutron
128 password: pwd
129 tenant: service
Dennis Dmitriev37114722017-03-06 16:52:26 +0200130 endpoint_type: internal
Jiri Broulik74f61112016-11-21 20:23:47 +0100131 message_queue:
132 engine: rabbitmq
133 host: 127.0.0.1
134 port: 5672
135 user: openstack
136 password: pwd
137 virtual_host: '/openstack'
138 global_physnet_mtu: 9000
139 l3_ha: False # Which type of router will be created by default
140 dvr: True # disabled for non DVR use case
141 backend:
142 engine: ml2
143 tenant_network_types: "flat,vxlan"
144 external_mtu: 9000
145 mechanism:
146 ovs:
147 driver: openvswitch
148
Aleš Komárek41e82312017-04-11 13:37:44 +0200149Network Node
Jiri Broulik74f61112016-11-21 20:23:47 +0100150
151.. code-block:: yaml
152
153 neutron:
154 gateway:
155 enabled: True
156 version: mitaka
157 message_queue:
158 engine: rabbitmq
159 host: 127.0.0.1
160 port: 5672
161 user: openstack
162 password: pwd
163 virtual_host: '/openstack'
164 local_ip: 192.168.20.20 # br-mesh ip address
165 dvr: True # disabled for non DVR use case
166 agent_mode: dvr_snat
167 metadata:
168 host: 127.0.0.1
169 password: pass
170 backend:
171 engine: ml2
172 tenant_network_types: "flat,vxlan"
173 mechanism:
174 ovs:
175 driver: openvswitch
176
177Compute Node
Jiri Broulik74f61112016-11-21 20:23:47 +0100178
179.. code-block:: yaml
180
181 neutron:
182 compute:
183 enabled: True
184 version: mitaka
185 message_queue:
186 engine: rabbitmq
187 host: 127.0.0.1
188 port: 5672
189 user: openstack
190 password: pwd
191 virtual_host: '/openstack'
192 local_ip: 192.168.20.20 # br-mesh ip address
193 dvr: True # disabled for non DVR use case
194 agent_mode: dvr
195 external_access: false # Compute node with DVR for east-west only, Network Node has True as default
196 metadata:
197 host: 127.0.0.1
198 password: pass
199 backend:
200 engine: ml2
201 tenant_network_types: "flat,vxlan"
202 mechanism:
203 ovs:
204 driver: openvswitch
Petr Michalec61f7ab22016-11-29 16:29:09 +0100205 audit:
206 enabled: false
Jiri Broulik74f61112016-11-21 20:23:47 +0100207
Aleš Komárek41e82312017-04-11 13:37:44 +0200208
Jiri Broulik74f61112016-11-21 20:23:47 +0100209Neutron VXLAN tenant networks with Network Nodes (non DVR)
Aleš Komárek41e82312017-04-11 13:37:44 +0200210----------------------------------------------------------
Jiri Broulik74f61112016-11-21 20:23:47 +0100211
212This section describes a network solution that utilises VxLAN overlay
213 networks without DVR with all routers being managed on the network nodes.
214
Aleš Komárek41e82312017-04-11 13:37:44 +0200215Neutron Server
Jiri Broulik74f61112016-11-21 20:23:47 +0100216
217.. code-block:: yaml
218
219 neutron:
220 server:
221 version: mitaka
222 plugin: ml2
223 bind:
224 address: 172.20.0.1
225 port: 9696
226 database:
227 engine: mysql
228 host: 127.0.0.1
229 port: 3306
230 name: neutron
231 user: neutron
232 password: pwd
233 identity:
234 engine: keystone
235 host: 127.0.0.1
236 port: 35357
237 user: neutron
238 password: pwd
239 tenant: service
Dennis Dmitriev37114722017-03-06 16:52:26 +0200240 endpoint_type: internal
Jiri Broulik74f61112016-11-21 20:23:47 +0100241 message_queue:
242 engine: rabbitmq
243 host: 127.0.0.1
244 port: 5672
245 user: openstack
246 password: pwd
247 virtual_host: '/openstack'
248 global_physnet_mtu: 9000
249 l3_ha: True
250 dvr: False
251 backend:
252 engine: ml2
253 tenant_network_types= "flat,vxlan"
254 external_mtu: 9000
255 mechanism:
256 ovs:
257 driver: openvswitch
258
Aleš Komárek41e82312017-04-11 13:37:44 +0200259Network Node
Jiri Broulik74f61112016-11-21 20:23:47 +0100260
261.. code-block:: yaml
262
263 neutron:
264 gateway:
265 enabled: True
266 version: mitaka
267 message_queue:
268 engine: rabbitmq
269 host: 127.0.0.1
270 port: 5672
271 user: openstack
272 password: pwd
273 virtual_host: '/openstack'
274 local_ip: 192.168.20.20 # br-mesh ip address
275 dvr: False
276 agent_mode: legacy
Simon Pasquierc03af112017-04-10 10:35:14 +0200277 availability_zone: az1
Jiri Broulik74f61112016-11-21 20:23:47 +0100278 metadata:
279 host: 127.0.0.1
280 password: pass
281 backend:
282 engine: ml2
283 tenant_network_types: "flat,vxlan"
284 mechanism:
285 ovs:
286 driver: openvswitch
287
288Compute Node
Jiri Broulik74f61112016-11-21 20:23:47 +0100289
290.. code-block:: yaml
291
292 neutron:
293 compute:
294 enabled: True
295 version: mitaka
296 message_queue:
297 engine: rabbitmq
298 host: 127.0.0.1
299 port: 5672
300 user: openstack
301 password: pwd
302 virtual_host: '/openstack'
303 local_ip: 192.168.20.20 # br-mesh ip address
304 external_access: False
305 dvr: False
306 backend:
307 engine: ml2
308 tenant_network_types: "flat,vxlan"
309 mechanism:
310 ovs:
311 driver: openvswitch
312
Aleš Komárek41e82312017-04-11 13:37:44 +0200313Neutron VXLAN tenant networks with Network Nodes with DVR
314---------------------------------------------------------
315
316With DVR for East-West and North-South, DVR everywhere, Network node for SNAT.
Jiri Broulik74f61112016-11-21 20:23:47 +0100317
318This section describes a network solution that utilises VxLAN
319overlay networks with DVR with North-South and East-West. Network
320Node is used only for SNAT.
321
Aleš Komárek41e82312017-04-11 13:37:44 +0200322Neutron Server
Jiri Broulik74f61112016-11-21 20:23:47 +0100323
324.. code-block:: yaml
325
326 neutron:
327 server:
328 version: mitaka
329 plugin: ml2
330 bind:
331 address: 172.20.0.1
332 port: 9696
333 database:
334 engine: mysql
335 host: 127.0.0.1
336 port: 3306
337 name: neutron
338 user: neutron
339 password: pwd
340 identity:
341 engine: keystone
342 host: 127.0.0.1
343 port: 35357
344 user: neutron
345 password: pwd
346 tenant: service
Dennis Dmitriev37114722017-03-06 16:52:26 +0200347 endpoint_type: internal
Jiri Broulik74f61112016-11-21 20:23:47 +0100348 message_queue:
349 engine: rabbitmq
350 host: 127.0.0.1
351 port: 5672
352 user: openstack
353 password: pwd
354 virtual_host: '/openstack'
355 global_physnet_mtu: 9000
356 l3_ha: False
357 dvr: True
358 backend:
359 engine: ml2
360 tenant_network_types= "flat,vxlan"
361 external_mtu: 9000
362 mechanism:
363 ovs:
364 driver: openvswitch
365
Aleš Komárek41e82312017-04-11 13:37:44 +0200366Network Node
Jiri Broulik74f61112016-11-21 20:23:47 +0100367
368.. code-block:: yaml
369
370 neutron:
371 gateway:
372 enabled: True
373 version: mitaka
374 message_queue:
375 engine: rabbitmq
376 host: 127.0.0.1
377 port: 5672
378 user: openstack
379 password: pwd
380 virtual_host: '/openstack'
381 local_ip: 192.168.20.20 # br-mesh ip address
382 dvr: True
383 agent_mode: dvr_snat
Simon Pasquierc03af112017-04-10 10:35:14 +0200384 availability_zone: az1
Jiri Broulik74f61112016-11-21 20:23:47 +0100385 metadata:
386 host: 127.0.0.1
387 password: pass
388 backend:
389 engine: ml2
390 tenant_network_types: "flat,vxlan"
391 mechanism:
392 ovs:
393 driver: openvswitch
394
395Compute Node
Jiri Broulik74f61112016-11-21 20:23:47 +0100396
397.. code-block:: yaml
398
399 neutron:
400 compute:
401 enabled: True
402 version: mitaka
403 message_queue:
404 engine: rabbitmq
405 host: 127.0.0.1
406 port: 5672
407 user: openstack
408 password: pwd
409 virtual_host: '/openstack'
410 local_ip: 192.168.20.20 # br-mesh ip address
411 dvr: True
412 external_access: True
413 agent_mode: dvr
Simon Pasquierc03af112017-04-10 10:35:14 +0200414 availability_zone: az1
Jiri Broulik74f61112016-11-21 20:23:47 +0100415 metadata:
416 host: 127.0.0.1
417 password: pass
418 backend:
419 engine: ml2
420 tenant_network_types: "flat,vxlan"
421 mechanism:
422 ovs:
423 driver: openvswitch
424
425Sample Linux network configuration for DVR
Jiri Broulik74f61112016-11-21 20:23:47 +0100426
427.. code-block:: yaml
428
429 linux:
430 network:
431 bridge: openvswitch
432 interface:
433 eth1:
434 enabled: true
435 type: eth
436 mtu: 9000
437 proto: manual
438 eth2:
439 enabled: true
440 type: eth
441 mtu: 9000
442 proto: manual
443 eth3:
444 enabled: true
445 type: eth
446 mtu: 9000
447 proto: manual
448 br-int:
449 enabled: true
450 mtu: 9000
451 type: ovs_bridge
452 br-floating:
453 enabled: true
454 mtu: 9000
455 type: ovs_bridge
456 float-to-ex:
457 enabled: true
458 type: ovs_port
459 mtu: 65000
460 bridge: br-floating
461 br-mgmt:
462 enabled: true
463 type: bridge
464 mtu: 9000
465 address: ${_param:single_address}
466 netmask: 255.255.255.0
467 use_interfaces:
468 - eth1
469 br-mesh:
470 enabled: true
471 type: bridge
472 mtu: 9000
473 address: ${_param:tenant_address}
474 netmask: 255.255.255.0
475 use_interfaces:
476 - eth2
477 br-ex:
478 enabled: true
479 type: bridge
480 mtu: 9000
481 address: ${_param:external_address}
482 netmask: 255.255.255.0
483 use_interfaces:
484 - eth3
485 use_ovs_ports:
486 - float-to-ex
487
488Neutron VLAN tenant networks with Network Nodes
Aleš Komárek41e82312017-04-11 13:37:44 +0200489-----------------------------------------------
Jiri Broulik74f61112016-11-21 20:23:47 +0100490
491VLAN tenant provider
492
493Neutron Server only
Jiri Broulik74f61112016-11-21 20:23:47 +0100494
495.. code-block:: yaml
496
497 neutron:
498 server:
499 version: mitaka
500 plugin: ml2
501 ...
502 global_physnet_mtu: 9000
503 l3_ha: False
504 dvr: True
505 backend:
506 engine: ml2
507 tenant_network_types: "flat,vlan" # Can be mixed flat,vlan,vxlan
508 tenant_vlan_range: "1000:2000"
509 external_vlan_range: "100:200" # Does not have to be defined.
510 external_mtu: 9000
511 mechanism:
512 ovs:
513 driver: openvswitch
514
515Compute node
Jiri Broulik74f61112016-11-21 20:23:47 +0100516
517.. code-block:: yaml
518
519 neutron:
520 compute:
521 version: mitaka
522 plugin: ml2
523 ...
524 dvr: True
525 agent_mode: dvr
526 external_access: False
527 backend:
528 engine: ml2
529 tenant_network_types: "flat,vlan" # Can be mixed flat,vlan,vxlan
530 mechanism:
531 ovs:
532 driver: openvswitch
533
Aleš Komárek41e82312017-04-11 13:37:44 +0200534Advanced Neutron Features (DPDK, SR-IOV)
535
Jakub Pavlik8f83ccc2017-02-27 11:15:39 +0100536Neutron OVS DPDK
Jakub Pavlik8f83ccc2017-02-27 11:15:39 +0100537
538Enable datapath netdev for neutron openvswitch agent
539
540.. code-block:: yaml
541
542 neutron:
543 server:
544 version: mitaka
545 ...
546 dpdk: True
547 ...
548
549 neutron:
550 compute:
551 version: mitaka
552 plugin: ml2
553 dpdk: True
554 backend:
555 engine: ml2
556 ...
557 mechanism:
558 ovs:
559 driver: openvswitch
560
Jakub Pavlik70555cb2017-02-26 18:48:02 +0100561Neutron OVS SR-IOV
Jakub Pavlik70555cb2017-02-26 18:48:02 +0100562
563.. code-block:: yaml
564
565 neutron:
566 server:
567 version: mitaka
568 plugin: ml2
569 backend:
570 engine: ml2
571 ...
572 mechanism:
573 ovs:
574 driver: openvswitch
575 sriov:
576 driver: sriovnicswitch
577
578 neutron:
579 compute:
580 version: mitaka
581 plugin: ml2
582 ...
583 backend:
584 engine: ml2
585 tenant_network_types: "flat,vlan" # Can be mixed flat,vlan,vxlan
586 sriov:
587 nic_one:
588 devname: eth1
589 physical_network: physnet3
590 mechanism:
591 ovs:
592 driver: openvswitch
593
Aleš Komárek41e82312017-04-11 13:37:44 +0200594Neutron Server
595--------------
596
Jiri Broulik74f61112016-11-21 20:23:47 +0100597Neutron Server with OpenContrail
Jiri Broulik74f61112016-11-21 20:23:47 +0100598
599.. code-block:: yaml
600
601 neutron:
602 server:
603 plugin: contrail
marcoa4428a32016-06-10 11:50:16 +0200604 backend:
605 engine: contrail
606 host: contrail_discovery_host
607 port: 8082
608 user: admin
609 password: password
610 tenant: admin
611 token: token
612
613Neutron Server with Midonet
614
615.. code-block:: yaml
616
617 neutron:
618 server:
619 backend:
620 engine: midonet
621 host: midonet_api_host
622 port: 8181
623 user: admin
624 password: password
625
Filip Pytlouncd028e42015-10-06 16:28:32 +0200626
Jakub Pavlik6dd5c0a2016-03-09 14:18:15 +0100627Neutron Keystone region
628
629.. code-block:: yaml
630
631 neutron:
632 server:
633 enabled: true
634 version: kilo
635 ...
636 identity:
637 region: RegionTwo
638 ...
639 compute:
640 region: RegionTwo
641 ...
642
Jiri Konecny93b19992016-04-12 11:15:39 +0200643Client-side RabbitMQ HA setup
644
645.. code-block:: yaml
646
647 neutron:
648 server:
649 ....
650 message_queue:
651 engine: rabbitmq
652 members:
653 - host: 10.0.16.1
654 - host: 10.0.16.2
655 - host: 10.0.16.3
656 user: openstack
657 password: pwd
658 virtual_host: '/openstack'
659 ....
660
Petr Michalec61f7ab22016-11-29 16:29:09 +0100661Enable auditing filter, ie: CADF
662
663.. code-block:: yaml
664
665 neutron:
666 server:
667 audit:
668 enabled: true
669 ....
670 filter_factory: 'keystonemiddleware.audit:filter_factory'
671 map_file: '/etc/pycadf/neutron_api_audit_map.conf'
672 ....
673 compute:
674 audit:
675 enabled: true
676 ....
677 filter_factory: 'keystonemiddleware.audit:filter_factory'
678 map_file: '/etc/pycadf/neutron_api_audit_map.conf'
679 ....
Jiri Konecny93b19992016-04-12 11:15:39 +0200680
681
Aleš Komárek41e82312017-04-11 13:37:44 +0200682Neutron Client
683--------------
Jiri Broulik5368cc52017-02-08 18:53:59 +0100684
685Neutron networks
686
687.. code-block:: yaml
688
689 neutron:
690 client:
691 enabled: true
692 server:
693 identity:
Richard Felklaac256a2017-03-23 15:43:49 +0100694 endpoint_type: internalURL
Jiri Broulik5368cc52017-02-08 18:53:59 +0100695 network:
696 inet1:
697 tenant: demo
698 shared: False
699 admin_state_up: True
700 router_external: True
701 provider_physical_network: inet
702 provider_network_type: flat
703 provider_segmentation_id: 2
704 subnet:
705 inet1-subnet1:
706 cidr: 192.168.90.0/24
707 enable_dhcp: False
708 inet2:
709 tenant: admin
710 shared: False
711 router_external: True
712 provider_network_type: "vlan"
713 subnet:
714 inet2-subnet1:
715 cidr: 192.168.92.0/24
716 enable_dhcp: False
717 inet2-subnet2:
718 cidr: 192.168.94.0/24
719 enable_dhcp: True
720 identity1:
721 network:
722 ...
723
Jiri Broulik5368cc52017-02-08 18:53:59 +0100724Neutron routers
725
726.. code-block:: yaml
727
728 neutron:
729 client:
730 enabled: true
731 server:
732 identity:
Richard Felklaac256a2017-03-23 15:43:49 +0100733 endpoint_type: internalURL
Jiri Broulik5368cc52017-02-08 18:53:59 +0100734 router:
735 inet1-router:
736 tenant: demo
737 admin_state_up: True
738 gateway_network: inet
739 interfaces:
740 - inet1-subnet1
741 - inet1-subnet2
742 identity1:
743 router:
744 ...
745
746 TODO: implement adding new interfaces to a router while updating it
747
748
749Neutron security groups
750
751.. code-block:: yaml
752
753 neutron:
754 client:
755 enabled: true
756 server:
757 identity:
Richard Felklaac256a2017-03-23 15:43:49 +0100758 endpoint_type: internalURL
Jiri Broulik5368cc52017-02-08 18:53:59 +0100759 security_group:
760 security_group1:
761 tenant: demo
762 description: security group 1
763 rules:
764 - direction: ingress
765 ethertype: IPv4
766 protocol: TCP
767 port_range_min: 1
768 port_range_max: 65535
769 remote_ip_prefix: 0.0.0.0/0
770 - direction: ingress
771 ethertype: IPv4
772 protocol: UDP
773 port_range_min: 1
774 port_range_max: 65535
775 remote_ip_prefix: 0.0.0.0/0
776 - direction: ingress
777 protocol: ICMP
778 remote_ip_prefix: 0.0.0.0/0
779 identity1:
780 security_group:
781 ...
782
783 TODO: implement updating existing security rules (now it adds new rule if trying to update existing one)
784
Jiri Broulikde2e2902017-02-13 15:03:47 +0100785
786Floating IP addresses
787
788.. code-block:: yaml
789
790 neutron:
791 client:
792 enabled: true
793 server:
794 identity:
Richard Felklaac256a2017-03-23 15:43:49 +0100795 endpoint_type: internalURL
Jiri Broulikde2e2902017-02-13 15:03:47 +0100796 floating_ip:
797 prx01-instance:
798 server: prx01.mk22-lab-basic.local
799 subnet: private-subnet1
800 network: public-net1
801 tenant: demo
802 gtw01-instance:
803 ...
804
805.. note:: The network must have flag router:external set to True.
806 Instance port in the stated subnet will be associated with the dynamically generated floating IP.
807
808
Filip Pytloun20c0a442017-02-02 13:05:13 +0100809Documentation and Bugs
810======================
811
812To learn how to install and update salt-formulas, consult the documentation
813available online at:
814
815 http://salt-formulas.readthedocs.io/
816
817In the unfortunate event that bugs are discovered, they should be reported to
818the appropriate issue tracker. Use Github issue tracker for specific salt
819formula:
820
821 https://github.com/salt-formulas/salt-formula-neutron/issues
822
823For feature requests, bug reports or blueprints affecting entire ecosystem,
824use Launchpad salt-formulas project:
825
826 https://launchpad.net/salt-formulas
827
828You can also join salt-formulas-users team and subscribe to mailing list:
829
830 https://launchpad.net/~salt-formulas-users
831
832Developers wishing to work on the salt-formulas projects should always base
833their work on master branch and submit pull request against specific formula.
834
835 https://github.com/salt-formulas/salt-formula-neutron
836
837Any questions or feedback is always welcome so feel free to join our IRC
838channel:
839
840 #salt-formulas @ irc.freenode.net