blob: 50e90cbff3d3035b8149f974320b9544d1ecc59d [file] [log] [blame]
Filip Pytloun4a72d792015-10-06 16:28:32 +02001
Aleš Komárek72152852017-04-11 13:48:48 +02002============
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03003Usage
Aleš Komárek72152852017-04-11 13:48:48 +02004============
Filip Pytloun4a72d792015-10-06 16:28:32 +02005
Jakub Pavlikfcf34f82016-05-20 09:35:51 +02006OpenStack Nova provides a cloud computing fabric controller, supporting a wide
7variety of virtualization technologies, including KVM, Xen, LXC, VMware, and
8more. In addition to its native API, it includes compatibility with the
9commonly encountered Amazon EC2 and S3 APIs.
Filip Pytloun4a72d792015-10-06 16:28:32 +020010
Aleš Komárek72152852017-04-11 13:48:48 +020011Sample Pillars
Filip Pytloun4a72d792015-10-06 16:28:32 +020012==============
13
14Controller nodes
15----------------
16
OlgaGusarenko9dd01c92018-07-31 00:49:30 +030017Nova services on the controller node:
Filip Pytloun4a72d792015-10-06 16:28:32 +020018
19.. code-block:: yaml
20
21 nova:
22 controller:
23 version: juno
24 enabled: true
25 security_group: true
Lachlan Evensonb72de502016-01-20 15:34:04 -080026 cpu_allocation_ratio: 8.0
27 ram_allocation_ratio: 1.0
Jiri Konecny9344a372016-03-21 19:25:48 +010028 disk_allocation_ratio: 1.0
Dmitry Stremkovskiy2bcba8d2017-07-30 21:43:59 +030029 cross_az_attach: false
Jiri Konecnyb5a80e42016-03-22 11:51:01 +010030 workers: 8
Jakub Pavlik617a8962016-09-04 18:50:06 +020031 report_interval: 60
Michel Nederlof8ff99332017-10-23 14:29:15 +020032 dhcp_domain: novalocal
Gleb Galkin32a54092018-10-02 17:16:40 +030033 consoleauth_token_ttl: 600
Filip Pytloun4a72d792015-10-06 16:28:32 +020034 bind:
35 public_address: 10.0.0.122
36 public_name: openstack.domain.com
37 novncproxy_port: 6080
38 database:
39 engine: mysql
40 host: 127.0.0.1
41 port: 3306
42 name: nova
43 user: nova
44 password: pwd
45 identity:
46 engine: keystone
47 host: 127.0.0.1
48 port: 35357
49 user: nova
50 password: pwd
51 tenant: service
52 message_queue:
53 engine: rabbitmq
54 host: 127.0.0.1
55 port: 5672
56 user: openstack
57 password: pwd
58 virtual_host: '/openstack'
59 network:
60 engine: neutron
61 host: 127.0.0.1
62 port: 9696
Jakub Pavlik617a8962016-09-04 18:50:06 +020063 extension_sync_interval: 600
Filip Pytloun4a72d792015-10-06 16:28:32 +020064 identity:
65 engine: keystone
66 host: 127.0.0.1
67 port: 35357
68 user: neutron
69 password: pwd
70 tenant: service
71 metadata:
72 password: password
Petr Michalecaa23dc02016-11-29 16:30:25 +010073 audit:
74 enabled: false
Simon Pasquier8683b7a2017-02-03 16:00:16 +010075 osapi_max_limit: 500
Oleg Iurchenko370c10d2017-10-19 14:03:37 +030076 barbican:
77 enabled: true
Filip Pytloun4a72d792015-10-06 16:28:32 +020078
OlgaGusarenko9dd01c92018-07-31 00:49:30 +030079Nova services from custom package repository:
Filip Pytloun4a72d792015-10-06 16:28:32 +020080
81.. code-block:: yaml
82
83 nova:
84 controller:
85 version: juno
86 source:
87 engine: pkg
88 address: http://...
89 ....
90
OlgaGusarenko9dd01c92018-07-31 00:49:30 +030091Client-side RabbitMQ HA setup:
Jiri Konecnye31f2c52016-04-14 17:16:02 +020092
93.. code-block:: yaml
94
95 nova:
96 controller:
97 ....
98 message_queue:
99 engine: rabbitmq
100 members:
101 - host: 10.0.16.1
102 - host: 10.0.16.2
103 - host: 10.0.16.3
104 user: openstack
105 password: pwd
106 virtual_host: '/openstack'
107 ....
108
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300109Enable auditing filter, i.e: CADF:
Petr Michalecaa23dc02016-11-29 16:30:25 +0100110
111.. code-block:: yaml
112
113 nova:
114 controller:
Simon Pasquier6a3c8f72016-12-19 15:37:24 +0100115 audit:
Petr Michalecaa23dc02016-11-29 16:30:25 +0100116 enabled: true
117 ....
118 filter_factory: 'keystonemiddleware.audit:filter_factory'
119 map_file: '/etc/pycadf/nova_api_audit_map.conf'
120 ....
121
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300122Enable CORS parameters:
Ondrej Smola25b53cb2017-04-28 10:56:19 +0200123
124.. code-block:: yaml
125
126 nova:
127 controller:
128 cors:
129 allowed_origin: https:localhost.local,http:localhost.local
130 expose_headers: X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
131 allow_methods: GET,PUT,POST,DELETE,PATCH
132 allow_headers: X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
133 allow_credentials: True
134 max_age: 86400
135
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300136Configuration of the ``policy.json`` file:
Dmitry Ukov3562a082017-05-04 00:00:48 +0400137
138.. code-block:: yaml
139
140 nova:
141 controller:
142 ....
143 policy:
144 context_is_admin: 'role:admin or role:administrator'
145 'compute:create': 'rule:admin_or_owner'
146 # Add key without value to remove line from policy.json
147 'compute:create:attach_network':
Ondrej Smola25b53cb2017-04-28 10:56:19 +0200148
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300149Enable Barbican integration:
Oleg Iurchenko370c10d2017-10-19 14:03:37 +0300150
151.. code-block:: yaml
152
153 nova:
154 controller:
155 ....
156 barbican:
157 enabled: true
158
Jiri Broulik789179a2018-02-13 16:16:46 +0100159Enable cells update:
160
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300161.. note:: Useful when upgrading Openstack. To update cells to test
162 sync db agains duplicated production database.
Jiri Broulik789179a2018-02-13 16:16:46 +0100163
164.. code-block:: yaml
165
166 nova:
167 controller:
168 update_cells: true
169
Kirill Bespalov64617172017-07-11 14:43:14 +0300170
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300171Configuring TLS communications
172------------------------------
Kirill Bespalov64617172017-07-11 14:43:14 +0300173
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300174.. note:: By default system wide installed CA certs are used,
175 so ``cacert_file`` param is optional, as well as ``cacert``.
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300176
177- **RabbitMQ TLS**
Kirill Bespalov64617172017-07-11 14:43:14 +0300178
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300179 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300180
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300181 nova:
182 compute:
183 message_queue:
184 port: 5671
185 ssl:
186 enabled: True
187 (optional) cacert: cert body if the cacert_file does not exists
188 (optional) cacert_file: /etc/openstack/rabbitmq-ca.pem
189 (optional) version: TLSv1_2
Kirill Bespalov64617172017-07-11 14:43:14 +0300190
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300191- **MySQL TLS**
Kirill Bespalov64617172017-07-11 14:43:14 +0300192
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300193 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300194
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300195 nova:
196 controller:
197 database:
198 ssl:
199 enabled: True
200 (optional) cacert: cert body if the cacert_file does not exists
201 (optional) cacert_file: /etc/openstack/mysql-ca.pem
Kirill Bespalov64617172017-07-11 14:43:14 +0300202
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300203- **Openstack HTTPS API**
204
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300205 Set the ``https`` as protocol at ``nova:compute`` and
206 ``nova:controller`` sections :
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300207
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300208 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300209
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300210 nova:
211 controller :
212 identity:
213 protocol: https
214 (optional) cacert_file: /etc/openstack/proxy.pem
215 network:
216 protocol: https
217 (optional) cacert_file: /etc/openstack/proxy.pem
218 glance:
219 protocol: https
220 (optional) cacert_file: /etc/openstack/proxy.pem
Kirill Bespalov64617172017-07-11 14:43:14 +0300221
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300222 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300223
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300224 nova:
225 compute:
226 identity:
227 protocol: https
228 (optional) cacert_file: /etc/openstack/proxy.pem
229 network:
230 protocol: https
231 (optional) cacert_file: /etc/openstack/proxy.pem
232 image:
233 protocol: https
234 (optional) cacert_file: /etc/openstack/proxy.pem
235 ironic:
236 protocol: https
237 (optional) cacert_file: /etc/openstack/proxy.pem
Kirill Bespalov64617172017-07-11 14:43:14 +0300238
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300239.. note:: Barbican, Cinder, and placement url endpoints are discovering
240 using service catalog.
Kirill Bespalov64617172017-07-11 14:43:14 +0300241
Filip Pytloun4a72d792015-10-06 16:28:32 +0200242Compute nodes
243-------------
244
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300245Nova controller services on compute node:
Filip Pytloun4a72d792015-10-06 16:28:32 +0200246
247.. code-block:: yaml
248
249 nova:
250 compute:
251 version: juno
252 enabled: true
Dmitry Stremkovskiy2bcba8d2017-07-30 21:43:59 +0300253 cross_az_attach: false
Dmitry Stremkovskiy35e53b72017-07-29 12:50:39 +0300254 disk_cachemodes: network=writeback,block=none
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100255 availability_zone: availability_zone_01
Damian Szelugae1922412017-04-18 16:36:46 +0200256 aggregates:
257 - hosts_with_fc
258 - hosts_with_ssd
Filip Pytloun4a72d792015-10-06 16:28:32 +0200259 security_group: true
Petr Michalecf03e4882017-04-10 10:26:18 +0200260 resume_guests_state_on_host_boot: False
Michael Polenchuk159c2542018-06-09 15:31:51 +0400261 preallocate_images: space # Default is 'none'
Dmitry Stremkovskiy8a0ff512017-07-25 20:54:13 +0300262 my_ip: 10.1.0.16
Filip Pytloun4a72d792015-10-06 16:28:32 +0200263 bind:
264 vnc_address: 172.20.0.100
265 vnc_port: 6080
266 vnc_name: openstack.domain.com
267 vnc_protocol: http
268 database:
269 engine: mysql
270 host: 127.0.0.1
271 port: 3306
272 name: nova
273 user: nova
274 password: pwd
275 identity:
276 engine: keystone
277 host: 127.0.0.1
278 port: 35357
279 user: nova
280 password: pwd
281 tenant: service
282 message_queue:
283 engine: rabbitmq
284 host: 127.0.0.1
285 port: 5672
286 user: openstack
287 password: pwd
288 virtual_host: '/openstack'
289 image:
290 engine: glance
291 host: 127.0.0.1
292 port: 9292
293 network:
294 engine: neutron
295 host: 127.0.0.1
296 port: 9696
297 identity:
298 engine: keystone
299 host: 127.0.0.1
300 port: 35357
301 user: neutron
302 password: pwd
303 tenant: service
304 qemu:
305 max_files: 4096
306 max_processes: 4096
Dmitry Stremkovskiy96281f52017-07-26 00:39:22 +0300307 host: node-12.domain.tld
Filip Pytloun4a72d792015-10-06 16:28:32 +0200308
Vasyl Saienkocab3a902018-07-12 13:17:17 +0300309Compute with vmware driver. Each vmware cluster requires a separate process of nova-compute.
310Each process should have uniq host identifier. However multiple computes might be running on
311single host. It is not recommended to have multiple computes running on different hosts that
312manage the same vmware cluster. To achive this pacemaker/corosync or keepalived might be used.
313
314.. code-block:: yaml
315
316 nova:
317 compute:
318 compute_driver: vmwareapi.VMwareVCDriver
319 vmware:
320 host_username: vmware
321 host_password: vmware
322 cluster_name: vmware_cluster01
323 host_ip: 1.2.3.4
324
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300325Group and user to be used for QEMU processes run by the system instance:
kkalynovskyif50f0c02017-12-12 17:52:57 +0200326
327.. code-block:: yaml
328
329 nova:
330 compute:
331 enabled: true
332 ...
333 qemu:
334 user: nova
335 group: cinder
336 dynamic_ownership: 1
337
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300338Group membership for user nova (upgrade related):
Dmitry Stremkovskiy3cd6ba82017-07-25 17:15:36 +0300339
340.. code-block:: yaml
341
342 nova:
343 compute:
344 enabled: true
345 ...
346 user:
347 groups:
348 - libvirt
Filip Pytloun4a72d792015-10-06 16:28:32 +0200349
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300350Nova services on compute node with OpenContrail:
Filip Pytloun4a72d792015-10-06 16:28:32 +0200351
352.. code-block:: yaml
353
354 nova:
355 compute:
356 enabled: true
357 ...
358 networking: contrail
359
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300360Nova services on compute node with memcached caching:
Filip Pytloun4a72d792015-10-06 16:28:32 +0200361
362.. code-block:: yaml
363
364 nova:
365 compute:
366 enabled: true
367 ...
368 cache:
369 engine: memcached
370 members:
371 - host: 127.0.0.1
372 port: 11211
373 - host: 127.0.0.1
374 port: 11211
375
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300376Client-side RabbitMQ HA setup:
Jiri Konecnye31f2c52016-04-14 17:16:02 +0200377
378.. code-block:: yaml
379
380 nova:
Kirill Bespalov64617172017-07-11 14:43:14 +0300381 compute:
Jiri Konecnye31f2c52016-04-14 17:16:02 +0200382 ....
383 message_queue:
384 engine: rabbitmq
385 members:
386 - host: 10.0.16.1
387 - host: 10.0.16.2
388 - host: 10.0.16.3
389 user: openstack
390 password: pwd
391 virtual_host: '/openstack'
392 ....
393
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300394Nova with ephemeral configured with Ceph:
maxstack39e6aca2016-05-04 13:50:13 +0000395
396.. code-block:: yaml
397
398 nova:
399 compute:
400 enabled: true
401 ...
402 ceph:
403 ephemeral: yes
404 rbd_pool: nova
405 rbd_user: nova
406 secret_uuid: 03006edd-d957-40a3-ac4c-26cd254b3731
Kalynovskyi0bc79692017-07-21 16:22:09 +0300407 ....
maxstack39e6aca2016-05-04 13:50:13 +0000408
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300409Nova with ephemeral configured with LVM:
Kalynovskyi0bc79692017-07-21 16:22:09 +0300410
411.. code-block:: yaml
412
413 nova:
414 compute:
415 enabled: true
416 ...
417 lvm:
418 ephemeral: yes
419 images_volume_group: nova_vg
420
421 linux:
422 storage:
423 lvm:
424 nova_vg:
425 name: nova_vg
426 devices:
427 - /dev/sdf
428 - /dev/sdd
429 - /dev/sdg
430 - /dev/sde
431 - /dev/sdc
432 - /dev/sdj
433 - /dev/sdh
maxstack39e6aca2016-05-04 13:50:13 +0000434
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300435Enable Barbican integration:
Oleg Iurchenko370c10d2017-10-19 14:03:37 +0300436
437.. code-block:: yaml
438
439 nova:
440 compute:
441 ....
442 barbican:
443 enabled: true
444
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300445Nova metadata custom bindings:
Vasyl Saienko2d591282018-02-05 14:19:02 +0200446
447.. code-block:: yaml
448
449 nova:
450 controller:
451 enabled: true
452 ...
453 metadata:
454 bind:
455 address: 1.2.3.4
456 port: 8776
457
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100458Client role
459-----------
460
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300461Nova configured with NFS:
Dmitry Stremkovskiy665c7282017-07-05 17:36:27 +0300462
463.. code-block:: yaml
464
465 nova:
466 compute:
467 instances_path: /mnt/nova/instances
468
469 linux:
470 storage:
471 enabled: true
472 mount:
473 nfs_nova:
474 enabled: true
475 path: ${nova:compute:instances_path}
476 device: 172.31.35.145:/data
477 file_system: nfs
478 opts: rw,vers=3
479
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300480Nova flavors:
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100481
482.. code-block:: yaml
483
484 nova:
485 client:
486 enabled: true
487 server:
488 identity:
489 flavor:
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100490 flavor1:
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100491 flavor_id: 10
492 ram: 4096
493 disk: 10
494 vcpus: 1
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100495 flavor2:
496 flavor_id: auto
497 ram: 4096
498 disk: 20
499 vcpus: 2
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100500 identity1:
501 flavor:
502 ...
503
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300504Availability zones:
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100505
506.. code-block:: yaml
507
508 nova:
509 client:
510 enabled: true
511 server:
512 identity:
513 availability_zones:
514 - availability_zone_01
515 - availability_zone_02
516
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300517Aggregates:
Damian Szeluga5dca0f02017-04-13 17:27:15 +0200518
519.. code-block:: yaml
520
521 nova:
522 client:
523 enabled: true
524 server:
525 identity:
526 aggregates:
527 - aggregate1
528 - aggregate2
529
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300530Upgrade levels:
Dmitry Stremkovskiy91f45852017-07-18 16:22:31 +0300531
532.. code-block:: yaml
533
534 nova:
535 controller:
536 upgrade_levels:
537 compute: juno
538
539 nova:
540 compute:
541 upgrade_levels:
542 compute: juno
543
Petr Jedinýd855ef22017-03-06 22:24:33 +0100544SR-IOV
Jakub Pavlik39a05942017-02-13 23:03:08 +0100545------
546
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300547Add ``PciPassthroughFilter`` into scheduler filters and NICs on
548specific compute nodes:
Jakub Pavlik39a05942017-02-13 23:03:08 +0100549
550.. code-block:: yaml
551
552 nova:
553 controller:
554 sriov: true
sandriichenko4fe321d2018-01-22 17:34:06 +0000555 scheduler_default_filters: "DifferentHostFilter,SameHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter"
Jakub Pavlik39a05942017-02-13 23:03:08 +0100556
557 nova:
558 compute:
559 sriov:
560 nic_one:
561 devname: eth1
562 physical_network: physnet1
563
Jakub Pavlik26fb85c2017-02-16 22:29:22 +0100564CPU pinning & Hugepages
565-----------------------
566
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300567CPU pinning of virtual machine instances to dedicated physical
568CPU cores. Hugepages mount point for libvirt.
Jakub Pavlik26fb85c2017-02-16 22:29:22 +0100569
570.. code-block:: yaml
571
572 nova:
573 controller:
sandriichenko4fe321d2018-01-22 17:34:06 +0000574 scheduler_default_filters: "DifferentHostFilter,SameHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,NUMATopologyFilter,AggregateInstanceExtraSpecsFilter"
Jakub Pavlik26fb85c2017-02-16 22:29:22 +0100575
576 nova:
577 compute:
578 vcpu_pin_set: 2,3,4,5
579 hugepages:
580 mount_points:
581 - path: /mnt/hugepages_1GB
582 - path: /mnt/hugepages_2MB
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100583
Michel Nederlof171c7ac2017-04-13 12:54:14 +0200584Custom Scheduler filters
585------------------------
586
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300587If you have a custom filter, that needs to be included in the
588scheduler, then you can include it like so:
Michel Nederlof171c7ac2017-04-13 12:54:14 +0200589
590.. code-block:: yaml
591
592 nova:
593 controller:
594 scheduler_custom_filters:
595 - my_custom_driver.nova.scheduler.filters.my_custom_filter.MyCustomFilter
596
597 # Then add your custom filter on the end (make sure to include all other ones that you need as well)
sandriichenko4fe321d2018-01-22 17:34:06 +0000598 scheduler_default_filters: "DifferentHostFilter,SameHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter,MyCustomFilter"
Michel Nederlof171c7ac2017-04-13 12:54:14 +0200599
Michel Nederlofeb566f62017-04-21 15:37:47 +0200600Hardware Trip/Unmap Support
601---------------------------
602
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300603To enable TRIM support for ephemeral images (thru nova managed
604images), libvirt has this option:
Michel Nederlofeb566f62017-04-21 15:37:47 +0200605
606.. code-block:: yaml
607
608 nova:
609 compute:
610 libvirt:
611 hw_disk_discard: unmap
612
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300613To actually utilize this feature, the following metadata must be
614set on the image as well, so the SCSI unmap is supported:
Michel Nederlofeb566f62017-04-21 15:37:47 +0200615
616.. code-block:: bash
617
618 glance image-update --property hw_scsi_model=virtio-scsi <image>
619 glance image-update --property hw_disk_bus=scsi <image>
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +0100620
Thom Gerdesf582f1e2017-05-02 18:05:50 +0000621Scheduler Host Manager
622----------------------
623
624Specify a custom host manager.
625
Thom Gerdesec00afd2017-04-07 18:06:59 +0000626libvirt CPU mode
627----------------
628
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300629Allow setting the model of CPU that is exposed to a VM. This
630allows for better support live migration between hypervisors with
631different hardware, among other things. Defaults to host-passthrough.
Jakub Pavlik7046b9c2017-09-19 12:04:19 +0200632
Thom Gerdesf582f1e2017-05-02 18:05:50 +0000633.. code-block:: yaml
634
635 nova:
636 controller:
637 scheduler_host_manager: ironic_host_manager
638
Thom Gerdesec00afd2017-04-07 18:06:59 +0000639 compute:
640 cpu_mode: host-model
641
Dzmitry Stremkouski7da9bf12018-04-25 22:30:37 +0200642Nova compute cpu model
643----------------------
644
645.. code-block:: yaml
646
647 nova:
648 compute:
649 cpu_mode: custom
650 libvirt:
651 cpu_model: IvyBridge
652
653
Michel Nederloff7eefb22017-07-10 11:14:33 +0200654Nova compute workarounds
655------------------------
656
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300657Live snapshotting is disabled by default in nova. To enable
658this, it needs a manual switch.
Michel Nederloff7eefb22017-07-10 11:14:33 +0200659
660From manual:
661
662.. code-block:: yaml
663
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300664 When using libvirt 1.2.2 live snapshots fail intermittently under load
665 (likely related to concurrent libvirt/qemu operations). This config
666 option provides a mechanism to disable live snapshot, in favor of cold
667 snapshot, while this is resolved. Cold snapshot causes an instance
668 outage while the guest is going through the snapshotting process.
669
670 For more information, refer to the bug report:
671
672 https://bugs.launchpad.net/nova/+bug/1334398
Michel Nederloff7eefb22017-07-10 11:14:33 +0200673
674Configurable pillar data:
675
676.. code-block:: yaml
677
678 nova:
679 compute:
Michel Nederlofe322ebb2017-07-10 12:29:21 +0200680 workaround:
Michel Nederloff7eefb22017-07-10 11:14:33 +0200681 disable_libvirt_livesnapshot: False
682
Michel Nederlofb51a5142017-06-27 08:31:35 +0200683Config drive options
684--------------------
685
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300686See example below on how to configure the options for the
687config drive:
Michel Nederlofb51a5142017-06-27 08:31:35 +0200688
689.. code-block:: yaml
690
691 nova:
692 compute:
693 config_drive:
694 forced: True # Default: True
695 cdrom: True # Default: False
696 format: iso9660 # Default: vfat
697 inject_password: False # Default: False
698
Michel Nederloff81919b2017-11-20 09:37:07 +0100699Number of concurrent live migrates
700----------------------------------
701
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300702Default is to have no concurrent live migrations (so 1
703live-migration at a time).
Michel Nederloff81919b2017-11-20 09:37:07 +0100704
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300705Excerpt from config options page
706https://docs.openstack.org/ocata/config-reference/compute/config-options.html:
Michel Nederloff81919b2017-11-20 09:37:07 +0100707
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300708Maximum number of live migrations to run concurrently. This limit is
709enforced to avoid outbound live migrations overwhelming the host/network
710and causing failures. It is not recommended that you change this unless
711you are very sure that doing so is safe and stable in your environment.
Michel Nederloff81919b2017-11-20 09:37:07 +0100712
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300713Possible values:
Michel Nederloff81919b2017-11-20 09:37:07 +0100714
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300715- 0 : treated as unlimited.
716- Negative value defaults to 0.
717- Any positive integer representing maximum number of live migrations
718 to run concurrently.
Michel Nederloff81919b2017-11-20 09:37:07 +0100719
720To configure this option:
721
722.. code-block:: yaml
723
724 nova:
725 compute:
726 max_concurrent_live_migrations: 1 # (1 is the default)
727
Sergio Lystopad9d31cba2018-05-15 11:29:11 +0300728Live migration with auto converge
729----------------------------------
730
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300731Auto converge throttles down CPU if a progress of on-going live
732migration is slow
733https://docs.openstack.org/ocata/config-reference/compute/config-options.html:
Sergio Lystopad9d31cba2018-05-15 11:29:11 +0300734
735.. code-block:: yaml
736
737 nova:
738 compute:
739 libvirt:
740 live_migration_permit_auto_converge: False # (False is the default)
741
742.. code-block:: yaml
743
744 nova:
745 controller:
746 libvirt:
747 live_migration_permit_auto_converge: False # (False is the default)
748
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400749Enhanced logging with logging.conf
750----------------------------------
751
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300752By default ``logging.conf`` is disabled.
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400753
754That is possible to enable per-binary logging.conf with new variables:
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400755
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300756* ``openstack_log_appender``
757 Set to true to enable log_config_append for all OpenStack services
758
759* ``openstack_fluentd_handler_enabled``
760 Set to true to enable FluentHandler for all Openstack services
761
762* ``openstack_ossyslog_handler_enabled``
763 Set to true to enable OSSysLogHandler for all Openstack services
764
765Only ``WatchedFileHandler``, ``OSSysLogHandler``, and ``FluentHandler``
766are available.
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400767
Dmitry Kalashnik8da249c2018-01-16 17:58:00 +0400768Also it is possible to configure this with pillar:
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400769
770.. code-block:: yaml
771
772 nova:
773 controller:
774 logging:
775 log_appender: true
776 log_handlers:
777 watchedfile:
778 enabled: true
779 fluentd:
780 enabled: true
Oleksii Chupryn99e35032018-02-06 01:59:40 +0200781 ossyslog:
782 enabled: true
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400783
784 compute:
785 logging:
786 log_appender: true
787 log_handlers:
788 watchedfile:
789 enabled: true
790 fluentd:
791 enabled: true
Oleksii Chupryn99e35032018-02-06 01:59:40 +0200792 ossyslog:
793 enabled: true
Thom Gerdesf582f1e2017-05-02 18:05:50 +0000794
Vasyl Saienko7243a952018-05-11 21:26:54 +0300795The log level might be configured per logger by using the
796following pillar structure:
797
798.. code-block:: yaml
799
800 nova:
801 compute:
802 logging:
803 loggers:
804 <logger_name>:
805 level: WARNING
806
807 nova:
808 compute:
809 logging:
810 loggers:
811 <logger_name>:
812 level: WARNING
813
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000814Configure syslog parameters for libvirtd
815----------------------------------------
816
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300817To configure syslog parameters for libvirtd the below pillar
818structure should be used with values which are supported
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000819by libvirtd. These values might be known from the documentation.
820
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300821.. code-block:: yaml
822
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000823 nova:
824 compute:
825 libvirt:
826 logging:
827 level: 3
828 filters: '3:remote 4:event'
829 outputs: '3:syslog:libvirtd'
830 buffer_size: 64
831
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300832Logging controls:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000833
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300834Logging level: 4 errors, 3 warnings, 2 information, 1 debug
835basically 1 will log everything possible ``log_level = 3``
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000836
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300837Logging filters:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000838
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300839A filter allows to select a different logging level for a given category
840of logs.
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000841
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300842The format for a filter is one of:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000843
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300844* ``x:name``
845* ``x:+name``
846 where name is a string which is matched against source file name,
847 e.g., ``remote``, ``qemu``, or ``util/json``, the optional ``+`` prefix
848 tells libvirt to log stack trace for each message matching name,
849 and x is the minimal level where matching messages should be logged:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000850
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300851* ``1: DEBUG``
852* ``2: INFO``
853* ``3: WARNING``
854* ``4: ERROR``
855
856Multiple filter can be defined in a single @filters, they just
857need to be separated by spaces.
858
859For example, to only get warning or errors from the remote layer
860and only errors from the event layer: ``log_filters="3:remote 4:event``
861
862Logging outputs:
863
864An output is one of the places to save logging information
865The format for an output can be:
866
867* ``x:stderr``
868 Output goes to stderr
869
870* ``x:syslog:name``
871 Use syslog for the output and use the given name as the ident
872
873* ``x:file:file_path``
874 output to a file, with the given filepath
875
876 In all case the x prefix is the minimal level, acting as a filter
877
878* ``1: DEBUG``
879* ``2: INFO``
880* ``3: WARNING``
881* ``4: ERROR``
882
883Multiple output can be defined, they just need to be separated by spaces.
884For example, to log all warnings and errors to syslog under the libvirt
885dident: ``log_outputs="3:syslog:libvirtd``
886
887Log debug buffer size: default 64
888The daemon keeps an internal debug log buffer which will be dumped
889in case of crash or upon receiving a ``SIGUSR2`` signal. This setting
890allows to override the default buffer size in kilobytes.
891If value is ``0`` or less the debug log buffer is deactivated
892``log_buffer_size = 64``
893
894To configure the logging parameters for QEMU, the below pillar
895structure and logging parameters should be used:
896
897.. code-block:: yaml
898
899 nova:
900 compute:
901 qemu:
902 logging:
903 handler: logd
904 virtlog:
905 enabled: true
906 level: 4
907 filters: '3:remote 3:event'
908 outputs: '4:syslog:virtlogd'
909 max_clients: 512
910 max_size: 2097100
911 max_backups: 2
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000912
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300913Inject password to VM
914---------------------
915
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300916By default nova blocks up any inject to VM because
917``inject_partition`` param is equal to ``-2``.
918If you want to inject password to VM, you will need to
919define ``inject_partition`` greater or equal to ``-1`` and
920define ``inject_password`` to ``True``
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300921
922For example:
923
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300924.. code-block:: yaml
925
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300926 nova:
927 compute:
928 inject_partition: '-1'
929 inject_password: True
930
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300931Allow the injection of an admin password for instance only at
932``create`` and ``rebuild`` process.
933
934There is no agent needed within the image to do this. If *libguestfs* is
935available on the host, it will be used. Otherwise *nbd* is used. The file
936system of the image will be mounted and the admin password, which is provided
937in the REST API call will be injected as password for the root user. If no
938root user is available, the instance won't be launched and an error is thrown.
939Be aware that the injection is *not* possible when the instance gets launched
940from a volume.
941
942Possible values:
943
944* ``True``
945 Allows the injection
946
947* ``False`` (default)
948 Disallows the injection. Any via the REST API provided
949 admin password will be silently ignored.
950
951Related options:
952
953* ``inject_partition``
954 Decides about the discovery and usage of the file system.
955 It also can disable the injection at all.
956 (boolean value)
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300957
958You can read more about injecting the administrator password here:
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300959https://docs.openstack.org/nova/queens/admin/admin-password-injection.html
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300960
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +0300961Enable libvirt control channel over TLS
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300962---------------------------------------
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +0300963
964By default TLS is disabled.
965
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300966Enable TLS transport:
967
968.. code-block:: yaml
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +0300969
970 compute:
971 libvirt:
972 tls:
973 enabled: True
974
975You able to set custom certificates in pillar:
976
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300977.. code-block:: yaml
978
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +0300979 nova:
980 compute:
981 libvirt:
982 tls:
983 key: (certificate content)
984 cert: (certificate content)
985 cacert: (certificate content)
986 client:
987 key: (certificate content)
988 cert: (certificate content)
989
Vasyl Saienko11ac9732018-10-02 17:04:33 +0000990Controlling access by `tls_allowed_dn_list`.
991Enable an access control list of client certificate Distinguished Names (DNs)
992which can connect to the TLS port on this server. The default is that DNs are
993not checked. This list may contain wildcards such as
994"C=GB,ST=London,L=London,O=Libvirt Project,CN=*" See the POSIX fnmatch function
995for the format of the wildcards.
996Note that if this is an empty list, no client can connect.
997Note also that GnuTLS returns DNs without spaces after commas between
998the fields (and this is what we check against), but the openssl x509 tool
999shows spaces.
1000
1001.. code-block:: yaml
1002
1003 nova:
1004 compute:
1005 libvirt:
1006 tls:
1007 tls_allowed_dn_list:
1008 host1:
1009 enabled: true
1010 value: 'C=foo,CN=cmp1'
1011 host2:
1012 enabled: true
1013 value: 'C=foo,CN=cmp2'
1014
1015
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +03001016You can read more about live migration over TLS here:
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001017https://wiki.libvirt.org/page/TLSCreateServerCerts
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +03001018
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001019Enable transport + authentication for VNC over TLS
1020---------------------
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001021# Only for Queens. Communication between noVNC proxy service and QEMU
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001022
1023By default communication between nova-novncproxy and qemu service is unsecure.
1024
1025compute:
1026 qemu:
1027 vnc:
1028 tls:
1029 enabled: True
1030
1031controller:
1032 novncproxy:
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001033 # This section responsible for communication between noVNC proxy and client machine
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001034 tls:
1035 enabled: True
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001036 # This section responsible for communication between nova-novncproxy and qemu service
1037 vencrypt:
1038 tls:
1039 enabled: True
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001040
1041You able to set custom certificates in pillar:
1042
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001043nova:
1044 compute:
1045 qemu:
1046 vnc:
1047 tls:
1048 cacert (certificate content)
1049 cert (certificate content)
1050 key (certificate content)
1051
1052nova:
1053 controller:
1054 novncproxy:
1055 tls:
1056 server:
1057 cert (certificate content)
1058 key (certificate content)
1059 vencrypt:
1060 tls:
1061 cacert (certificate content)
1062 cert (certificate content)
1063 key (certificate content)
1064
1065
1066You can read more about it here:
1067 https://docs.openstack.org/nova/queens/admin/remote-console-access.html
1068
1069Enable communication between noVNC proxy and client machine over TLS
1070---------------------
1071
1072By default communication between noVNC proxy and client machine is unsecure.
1073
1074 controller:
1075 novncproxy:
1076 tls:
1077 enabled: True
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001078
1079 nova:
1080 controller:
1081 novncproxy:
1082 tls:
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001083 server:
1084 cert (certificate content)
1085 key (certificate content)
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001086
1087You can read more about it here:
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001088 https://docs.openstack.org/mitaka/config-reference/dashboard/configure.html
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001089
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001090Enable x509 and ssl communication between Nova and Galera cluster.
1091---------------------
1092By default communication between Nova and Galera is unsecure.
1093
Oleksandr Shyshkocbe87352018-09-07 13:42:57 +03001094nova:
1095 controller:
1096 database:
1097 x509:
1098 enabled: True
1099
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001100You able to set custom certificates in pillar:
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001101
1102nova:
1103 controller:
1104 database:
1105 x509:
Oleksandr Shyshkocbe87352018-09-07 13:42:57 +03001106 cacert: (certificate content)
1107 cert: (certificate content)
1108 key: (certificate content)
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001109
1110You can read more about it here:
1111 https://docs.openstack.org/security-guide/databases/database-access-control.html
1112
Oleh Hryhorov63ee8452018-08-14 09:16:02 +00001113Upgrades
1114========
1115
1116Each openstack formula provide set of phases (logical bloks) that will help to
1117build flexible upgrade orchestration logic for particular components. The list
1118of phases might and theirs descriptions are listed in table below:
1119
1120+-------------------------------+------------------------------------------------------+
1121| State | Description |
1122+===============================+======================================================+
1123| <app>.upgrade.service_running | Ensure that all services for particular application |
1124| | are enabled for autostart and running |
1125+-------------------------------+------------------------------------------------------+
1126| <app>.upgrade.service_stopped | Ensure that all services for particular application |
1127| | disabled for autostart and dead |
1128+-------------------------------+------------------------------------------------------+
1129| <app>.upgrade.pkgs_latest | Ensure that packages used by particular application |
1130| | are installed to latest available version. |
1131| | This will not upgrade data plane packages like qemu |
1132| | and openvswitch as usually minimal required version |
1133| | in openstack services is really old. The data plane |
1134| | packages should be upgraded separately by `apt-get |
1135| | upgrade` or `apt-get dist-upgrade` |
1136| | Applying this state will not autostart service. |
1137+-------------------------------+------------------------------------------------------+
1138| <app>.upgrade.render_config | Ensure configuration is rendered actual version. +
1139+-------------------------------+------------------------------------------------------+
1140| <app>.upgrade.pre | We assume this state is applied on all nodes in the |
1141| | cloud before running upgrade. |
1142| | Only non destructive actions will be applied during |
1143| | this phase. Perform service built in service check |
1144| | like (keystone-manage doctor and nova-status upgrade)|
1145+-------------------------------+------------------------------------------------------+
1146| <app>.upgrade.upgrade.pre | Mostly applicable for data plane nodes. During this |
1147| | phase resources will be gracefully removed from |
1148| | current node if it is allowed. Services for upgraded |
1149| | application will be set to admin disabled state to |
1150| | make sure node will not participate in resources |
1151| | scheduling. For example on gtw nodes this will set |
1152| | all agents to admin disable state and will move all |
1153| | routers to other agents. |
1154+-------------------------------+------------------------------------------------------+
1155| <app>.upgrade.upgrade | This state will basically upgrade application on |
1156| | particular target. Stop services, render |
1157| | configuration, install new packages, run offline |
1158| | dbsync (for ctl), start services. Data plane should |
1159| | not be affected, only OpenStack python services. |
1160+-------------------------------+------------------------------------------------------+
1161| <app>.upgrade.upgrade.post | Add services back to scheduling. |
1162+-------------------------------+------------------------------------------------------+
1163| <app>.upgrade.post | This phase should be launched only when upgrade of |
1164| | the cloud is completed. Cleanup temporary files, |
1165| | perform other post upgrade tasks. |
1166+-------------------------------+------------------------------------------------------+
1167| <app>.upgrade.verify | Here we will do basic health checks (API CRUD |
1168| | operations, verify do not have dead network |
1169| | agents/compute services) |
1170+-------------------------------+------------------------------------------------------+
1171
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001172Documentation and Bugs
1173======================
1174
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001175* http://salt-formulas.readthedocs.io/
1176 Learn how to install and update salt-formulas
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001177
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001178* https://github.com/salt-formulas/salt-formula-nova/issues
1179 In the unfortunate event that bugs are discovered, report the issue to the
1180 appropriate issue tracker. Use the Github issue tracker for a specific salt
1181 formula
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001182
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001183* https://launchpad.net/salt-formulas
1184 For feature requests, bug reports, or blueprints affecting the entire
1185 ecosystem, use the Launchpad salt-formulas project
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001186
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001187* https://launchpad.net/~salt-formulas-users
1188 Join the salt-formulas-users team and subscribe to mailing list if required
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001189
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001190* https://github.com/salt-formulas/salt-formula-nova
1191 Develop the salt-formulas projects in the master branch and then submit pull
1192 requests against a specific formula
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001193
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001194* #salt-formulas @ irc.freenode.net
1195 Use this IRC channel in case of any questions or feedback which is always
1196 welcome