blob: 1d4595ce52888c0ef7a55b3472d045bd481d3093 [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'
Oleh Hryhorovf5093b82018-10-17 11:16:08 +000059 pci:
60 alias:
61 alias1:
62 device_type: "type-PF"
63 name: "a1"
64 product_id: "154d"
65 vendor_id: "8086"
Filip Pytloun4a72d792015-10-06 16:28:32 +020066 network:
67 engine: neutron
68 host: 127.0.0.1
69 port: 9696
Jakub Pavlik617a8962016-09-04 18:50:06 +020070 extension_sync_interval: 600
Filip Pytloun4a72d792015-10-06 16:28:32 +020071 identity:
72 engine: keystone
73 host: 127.0.0.1
74 port: 35357
75 user: neutron
76 password: pwd
77 tenant: service
78 metadata:
79 password: password
Petr Michalecaa23dc02016-11-29 16:30:25 +010080 audit:
81 enabled: false
Simon Pasquier8683b7a2017-02-03 16:00:16 +010082 osapi_max_limit: 500
Oleg Iurchenko370c10d2017-10-19 14:03:37 +030083 barbican:
84 enabled: true
Filip Pytloun4a72d792015-10-06 16:28:32 +020085
OlgaGusarenko9dd01c92018-07-31 00:49:30 +030086Nova services from custom package repository:
Filip Pytloun4a72d792015-10-06 16:28:32 +020087
88.. code-block:: yaml
89
90 nova:
91 controller:
92 version: juno
93 source:
94 engine: pkg
95 address: http://...
96 ....
97
OlgaGusarenko9dd01c92018-07-31 00:49:30 +030098Client-side RabbitMQ HA setup:
Jiri Konecnye31f2c52016-04-14 17:16:02 +020099
100.. code-block:: yaml
101
102 nova:
103 controller:
104 ....
105 message_queue:
106 engine: rabbitmq
107 members:
108 - host: 10.0.16.1
109 - host: 10.0.16.2
110 - host: 10.0.16.3
111 user: openstack
112 password: pwd
113 virtual_host: '/openstack'
114 ....
115
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300116Enable auditing filter, i.e: CADF:
Petr Michalecaa23dc02016-11-29 16:30:25 +0100117
118.. code-block:: yaml
119
120 nova:
121 controller:
Simon Pasquier6a3c8f72016-12-19 15:37:24 +0100122 audit:
Petr Michalecaa23dc02016-11-29 16:30:25 +0100123 enabled: true
124 ....
125 filter_factory: 'keystonemiddleware.audit:filter_factory'
126 map_file: '/etc/pycadf/nova_api_audit_map.conf'
127 ....
128
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300129Enable CORS parameters:
Ondrej Smola25b53cb2017-04-28 10:56:19 +0200130
131.. code-block:: yaml
132
133 nova:
134 controller:
135 cors:
136 allowed_origin: https:localhost.local,http:localhost.local
137 expose_headers: X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
138 allow_methods: GET,PUT,POST,DELETE,PATCH
139 allow_headers: X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
140 allow_credentials: True
141 max_age: 86400
142
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300143Configuration of the ``policy.json`` file:
Dmitry Ukov3562a082017-05-04 00:00:48 +0400144
145.. code-block:: yaml
146
147 nova:
148 controller:
149 ....
150 policy:
151 context_is_admin: 'role:admin or role:administrator'
152 'compute:create': 'rule:admin_or_owner'
153 # Add key without value to remove line from policy.json
154 'compute:create:attach_network':
Ondrej Smola25b53cb2017-04-28 10:56:19 +0200155
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300156Enable Barbican integration:
Oleg Iurchenko370c10d2017-10-19 14:03:37 +0300157
158.. code-block:: yaml
159
160 nova:
161 controller:
162 ....
163 barbican:
164 enabled: true
165
Oleh Hryhorovf5093b82018-10-17 11:16:08 +0000166Define aliases for PCI devices:
167.. code-block:: yaml
168
169 nova:
170 controller:
171 ...
172 pci:
173 alias:
174 alias1:
175 device_type: "type-PF"
176 name: "a1"
177 product_id: "154d"
178 vendor_id: "8086"
179
Jiri Broulik789179a2018-02-13 16:16:46 +0100180Enable cells update:
181
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300182.. note:: Useful when upgrading Openstack. To update cells to test
183 sync db agains duplicated production database.
Jiri Broulik789179a2018-02-13 16:16:46 +0100184
185.. code-block:: yaml
186
187 nova:
188 controller:
189 update_cells: true
190
Kirill Bespalov64617172017-07-11 14:43:14 +0300191
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300192Configuring TLS communications
193------------------------------
Kirill Bespalov64617172017-07-11 14:43:14 +0300194
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300195.. note:: By default system wide installed CA certs are used,
196 so ``cacert_file`` param is optional, as well as ``cacert``.
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300197
198- **RabbitMQ TLS**
Kirill Bespalov64617172017-07-11 14:43:14 +0300199
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300200 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300201
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300202 nova:
203 compute:
204 message_queue:
205 port: 5671
206 ssl:
207 enabled: True
208 (optional) cacert: cert body if the cacert_file does not exists
209 (optional) cacert_file: /etc/openstack/rabbitmq-ca.pem
210 (optional) version: TLSv1_2
Kirill Bespalov64617172017-07-11 14:43:14 +0300211
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300212- **MySQL TLS**
Kirill Bespalov64617172017-07-11 14:43:14 +0300213
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300214 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300215
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300216 nova:
217 controller:
218 database:
219 ssl:
220 enabled: True
221 (optional) cacert: cert body if the cacert_file does not exists
222 (optional) cacert_file: /etc/openstack/mysql-ca.pem
Kirill Bespalov64617172017-07-11 14:43:14 +0300223
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300224- **Openstack HTTPS API**
225
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300226 Set the ``https`` as protocol at ``nova:compute`` and
227 ``nova:controller`` sections :
Kirill Bespalova0eaca72017-11-20 13:40:42 +0300228
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300229 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300230
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300231 nova:
232 controller :
233 identity:
234 protocol: https
235 (optional) cacert_file: /etc/openstack/proxy.pem
236 network:
237 protocol: https
238 (optional) cacert_file: /etc/openstack/proxy.pem
239 glance:
240 protocol: https
241 (optional) cacert_file: /etc/openstack/proxy.pem
Kirill Bespalov64617172017-07-11 14:43:14 +0300242
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300243 .. code-block:: yaml
Kirill Bespalov64617172017-07-11 14:43:14 +0300244
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300245 nova:
246 compute:
247 identity:
248 protocol: https
249 (optional) cacert_file: /etc/openstack/proxy.pem
250 network:
251 protocol: https
252 (optional) cacert_file: /etc/openstack/proxy.pem
253 image:
254 protocol: https
255 (optional) cacert_file: /etc/openstack/proxy.pem
256 ironic:
257 protocol: https
258 (optional) cacert_file: /etc/openstack/proxy.pem
Kirill Bespalov64617172017-07-11 14:43:14 +0300259
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300260.. note:: Barbican, Cinder, and placement url endpoints are discovering
261 using service catalog.
Kirill Bespalov64617172017-07-11 14:43:14 +0300262
Filip Pytloun4a72d792015-10-06 16:28:32 +0200263Compute nodes
264-------------
265
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300266Nova controller services on compute node:
Filip Pytloun4a72d792015-10-06 16:28:32 +0200267
268.. code-block:: yaml
269
270 nova:
271 compute:
272 version: juno
273 enabled: true
Dmitry Stremkovskiy2bcba8d2017-07-30 21:43:59 +0300274 cross_az_attach: false
Dmitry Stremkovskiy35e53b72017-07-29 12:50:39 +0300275 disk_cachemodes: network=writeback,block=none
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100276 availability_zone: availability_zone_01
Damian Szelugae1922412017-04-18 16:36:46 +0200277 aggregates:
278 - hosts_with_fc
279 - hosts_with_ssd
Filip Pytloun4a72d792015-10-06 16:28:32 +0200280 security_group: true
Petr Michalecf03e4882017-04-10 10:26:18 +0200281 resume_guests_state_on_host_boot: False
Michael Polenchuk159c2542018-06-09 15:31:51 +0400282 preallocate_images: space # Default is 'none'
Dmitry Stremkovskiy8a0ff512017-07-25 20:54:13 +0300283 my_ip: 10.1.0.16
Filip Pytloun4a72d792015-10-06 16:28:32 +0200284 bind:
285 vnc_address: 172.20.0.100
286 vnc_port: 6080
287 vnc_name: openstack.domain.com
288 vnc_protocol: http
289 database:
290 engine: mysql
291 host: 127.0.0.1
292 port: 3306
293 name: nova
294 user: nova
295 password: pwd
296 identity:
297 engine: keystone
298 host: 127.0.0.1
299 port: 35357
300 user: nova
301 password: pwd
302 tenant: service
303 message_queue:
304 engine: rabbitmq
305 host: 127.0.0.1
306 port: 5672
307 user: openstack
308 password: pwd
309 virtual_host: '/openstack'
310 image:
311 engine: glance
312 host: 127.0.0.1
313 port: 9292
Oleh Hryhorovf5093b82018-10-17 11:16:08 +0000314 pci:
315 alias:
316 alias1:
317 device_type: "type-PF"
318 name: "a1"
319 product_id: "154d"
320 vendor_id: "8086"
Filip Pytloun4a72d792015-10-06 16:28:32 +0200321 network:
322 engine: neutron
323 host: 127.0.0.1
324 port: 9696
325 identity:
326 engine: keystone
327 host: 127.0.0.1
328 port: 35357
329 user: neutron
330 password: pwd
331 tenant: service
332 qemu:
333 max_files: 4096
334 max_processes: 4096
Dmitry Stremkovskiy96281f52017-07-26 00:39:22 +0300335 host: node-12.domain.tld
Filip Pytloun4a72d792015-10-06 16:28:32 +0200336
Vasyl Saienkocab3a902018-07-12 13:17:17 +0300337Compute with vmware driver. Each vmware cluster requires a separate process of nova-compute.
338Each process should have uniq host identifier. However multiple computes might be running on
339single host. It is not recommended to have multiple computes running on different hosts that
340manage the same vmware cluster. To achive this pacemaker/corosync or keepalived might be used.
341
342.. code-block:: yaml
343
344 nova:
345 compute:
346 compute_driver: vmwareapi.VMwareVCDriver
347 vmware:
348 host_username: vmware
349 host_password: vmware
350 cluster_name: vmware_cluster01
351 host_ip: 1.2.3.4
352
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300353Group and user to be used for QEMU processes run by the system instance:
kkalynovskyif50f0c02017-12-12 17:52:57 +0200354
355.. code-block:: yaml
356
357 nova:
358 compute:
359 enabled: true
360 ...
361 qemu:
362 user: nova
363 group: cinder
364 dynamic_ownership: 1
365
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300366Group membership for user nova (upgrade related):
Dmitry Stremkovskiy3cd6ba82017-07-25 17:15:36 +0300367
368.. code-block:: yaml
369
370 nova:
371 compute:
372 enabled: true
373 ...
374 user:
375 groups:
376 - libvirt
Filip Pytloun4a72d792015-10-06 16:28:32 +0200377
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300378Nova services on compute node with OpenContrail:
Filip Pytloun4a72d792015-10-06 16:28:32 +0200379
380.. code-block:: yaml
381
382 nova:
383 compute:
384 enabled: true
385 ...
386 networking: contrail
387
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300388Nova services on compute node with memcached caching:
Filip Pytloun4a72d792015-10-06 16:28:32 +0200389
390.. code-block:: yaml
391
392 nova:
393 compute:
394 enabled: true
395 ...
396 cache:
397 engine: memcached
398 members:
399 - host: 127.0.0.1
400 port: 11211
401 - host: 127.0.0.1
402 port: 11211
403
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300404Client-side RabbitMQ HA setup:
Jiri Konecnye31f2c52016-04-14 17:16:02 +0200405
406.. code-block:: yaml
407
408 nova:
Kirill Bespalov64617172017-07-11 14:43:14 +0300409 compute:
Jiri Konecnye31f2c52016-04-14 17:16:02 +0200410 ....
411 message_queue:
412 engine: rabbitmq
413 members:
414 - host: 10.0.16.1
415 - host: 10.0.16.2
416 - host: 10.0.16.3
417 user: openstack
418 password: pwd
419 virtual_host: '/openstack'
420 ....
421
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300422Nova with ephemeral configured with Ceph:
maxstack39e6aca2016-05-04 13:50:13 +0000423
424.. code-block:: yaml
425
426 nova:
427 compute:
428 enabled: true
429 ...
430 ceph:
431 ephemeral: yes
432 rbd_pool: nova
433 rbd_user: nova
434 secret_uuid: 03006edd-d957-40a3-ac4c-26cd254b3731
Kalynovskyi0bc79692017-07-21 16:22:09 +0300435 ....
maxstack39e6aca2016-05-04 13:50:13 +0000436
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300437Nova with ephemeral configured with LVM:
Kalynovskyi0bc79692017-07-21 16:22:09 +0300438
439.. code-block:: yaml
440
441 nova:
442 compute:
443 enabled: true
444 ...
445 lvm:
446 ephemeral: yes
447 images_volume_group: nova_vg
448
449 linux:
450 storage:
451 lvm:
452 nova_vg:
453 name: nova_vg
454 devices:
455 - /dev/sdf
456 - /dev/sdd
457 - /dev/sdg
458 - /dev/sde
459 - /dev/sdc
460 - /dev/sdj
461 - /dev/sdh
maxstack39e6aca2016-05-04 13:50:13 +0000462
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300463Enable Barbican integration:
Oleg Iurchenko370c10d2017-10-19 14:03:37 +0300464
465.. code-block:: yaml
466
467 nova:
468 compute:
469 ....
470 barbican:
471 enabled: true
472
Oleh Hryhorovf5093b82018-10-17 11:16:08 +0000473Define aliases for PCI devices:
474.. code-block:: yaml
475
476 nova:
477 compute:
478 ...
479 pci:
480 alias:
481 alias1:
482 device_type: "type-PF"
483 name: "a1"
484 product_id: "154d"
485 vendor_id: "8086"
486
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300487Nova metadata custom bindings:
Vasyl Saienko2d591282018-02-05 14:19:02 +0200488
489.. code-block:: yaml
490
491 nova:
492 controller:
493 enabled: true
494 ...
495 metadata:
496 bind:
497 address: 1.2.3.4
498 port: 8776
499
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100500Client role
501-----------
502
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300503Nova configured with NFS:
Dmitry Stremkovskiy665c7282017-07-05 17:36:27 +0300504
505.. code-block:: yaml
506
507 nova:
508 compute:
509 instances_path: /mnt/nova/instances
510
511 linux:
512 storage:
513 enabled: true
514 mount:
515 nfs_nova:
516 enabled: true
517 path: ${nova:compute:instances_path}
518 device: 172.31.35.145:/data
519 file_system: nfs
520 opts: rw,vers=3
521
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300522Nova flavors:
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100523
524.. code-block:: yaml
525
526 nova:
527 client:
528 enabled: true
529 server:
530 identity:
531 flavor:
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100532 flavor1:
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100533 flavor_id: 10
534 ram: 4096
535 disk: 10
536 vcpus: 1
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100537 flavor2:
538 flavor_id: auto
539 ram: 4096
540 disk: 20
541 vcpus: 2
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100542 identity1:
543 flavor:
544 ...
545
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300546Availability zones:
Jiri Broulik70d9e3f2017-02-15 18:37:13 +0100547
548.. code-block:: yaml
549
550 nova:
551 client:
552 enabled: true
553 server:
554 identity:
555 availability_zones:
556 - availability_zone_01
557 - availability_zone_02
558
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300559Aggregates:
Damian Szeluga5dca0f02017-04-13 17:27:15 +0200560
561.. code-block:: yaml
562
563 nova:
564 client:
565 enabled: true
566 server:
567 identity:
568 aggregates:
569 - aggregate1
570 - aggregate2
571
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300572Upgrade levels:
Dmitry Stremkovskiy91f45852017-07-18 16:22:31 +0300573
574.. code-block:: yaml
575
576 nova:
577 controller:
578 upgrade_levels:
579 compute: juno
580
581 nova:
582 compute:
583 upgrade_levels:
584 compute: juno
585
Petr Jedinýd855ef22017-03-06 22:24:33 +0100586SR-IOV
Jakub Pavlik39a05942017-02-13 23:03:08 +0100587------
588
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300589Add ``PciPassthroughFilter`` into scheduler filters and NICs on
590specific compute nodes:
Jakub Pavlik39a05942017-02-13 23:03:08 +0100591
592.. code-block:: yaml
593
594 nova:
595 controller:
596 sriov: true
sandriichenko4fe321d2018-01-22 17:34:06 +0000597 scheduler_default_filters: "DifferentHostFilter,SameHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter"
Jakub Pavlik39a05942017-02-13 23:03:08 +0100598
599 nova:
600 compute:
601 sriov:
602 nic_one:
603 devname: eth1
604 physical_network: physnet1
605
Oleh Hryhorovf5093b82018-10-17 11:16:08 +0000606.. note:: Parameters located under nova:compute:sriov:<nic_name> are copied to passthrough_whitelist parameter into
607 nova.conf file in appropriate format.
608
Jakub Pavlik26fb85c2017-02-16 22:29:22 +0100609CPU pinning & Hugepages
610-----------------------
611
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300612CPU pinning of virtual machine instances to dedicated physical
613CPU cores. Hugepages mount point for libvirt.
Jakub Pavlik26fb85c2017-02-16 22:29:22 +0100614
615.. code-block:: yaml
616
617 nova:
618 controller:
sandriichenko4fe321d2018-01-22 17:34:06 +0000619 scheduler_default_filters: "DifferentHostFilter,SameHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,NUMATopologyFilter,AggregateInstanceExtraSpecsFilter"
Jakub Pavlik26fb85c2017-02-16 22:29:22 +0100620
621 nova:
622 compute:
623 vcpu_pin_set: 2,3,4,5
624 hugepages:
625 mount_points:
626 - path: /mnt/hugepages_1GB
627 - path: /mnt/hugepages_2MB
Jiri Broulik0ce9fc92017-02-01 23:10:40 +0100628
Michel Nederlof171c7ac2017-04-13 12:54:14 +0200629Custom Scheduler filters
630------------------------
631
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300632If you have a custom filter, that needs to be included in the
633scheduler, then you can include it like so:
Michel Nederlof171c7ac2017-04-13 12:54:14 +0200634
635.. code-block:: yaml
636
637 nova:
638 controller:
639 scheduler_custom_filters:
640 - my_custom_driver.nova.scheduler.filters.my_custom_filter.MyCustomFilter
641
642 # 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 +0000643 scheduler_default_filters: "DifferentHostFilter,SameHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter,MyCustomFilter"
Michel Nederlof171c7ac2017-04-13 12:54:14 +0200644
Michel Nederlofeb566f62017-04-21 15:37:47 +0200645Hardware Trip/Unmap Support
646---------------------------
647
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300648To enable TRIM support for ephemeral images (thru nova managed
649images), libvirt has this option:
Michel Nederlofeb566f62017-04-21 15:37:47 +0200650
651.. code-block:: yaml
652
653 nova:
654 compute:
655 libvirt:
656 hw_disk_discard: unmap
657
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300658To actually utilize this feature, the following metadata must be
659set on the image as well, so the SCSI unmap is supported:
Michel Nederlofeb566f62017-04-21 15:37:47 +0200660
661.. code-block:: bash
662
663 glance image-update --property hw_scsi_model=virtio-scsi <image>
664 glance image-update --property hw_disk_bus=scsi <image>
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +0100665
Thom Gerdesf582f1e2017-05-02 18:05:50 +0000666Scheduler Host Manager
667----------------------
668
669Specify a custom host manager.
670
Thom Gerdesec00afd2017-04-07 18:06:59 +0000671libvirt CPU mode
672----------------
673
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300674Allow setting the model of CPU that is exposed to a VM. This
675allows for better support live migration between hypervisors with
676different hardware, among other things. Defaults to host-passthrough.
Jakub Pavlik7046b9c2017-09-19 12:04:19 +0200677
Thom Gerdesf582f1e2017-05-02 18:05:50 +0000678.. code-block:: yaml
679
680 nova:
681 controller:
682 scheduler_host_manager: ironic_host_manager
683
Thom Gerdesec00afd2017-04-07 18:06:59 +0000684 compute:
685 cpu_mode: host-model
686
Dzmitry Stremkouski7da9bf12018-04-25 22:30:37 +0200687Nova compute cpu model
688----------------------
689
690.. code-block:: yaml
691
692 nova:
693 compute:
694 cpu_mode: custom
695 libvirt:
696 cpu_model: IvyBridge
697
698
Michel Nederloff7eefb22017-07-10 11:14:33 +0200699Nova compute workarounds
700------------------------
701
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300702Live snapshotting is disabled by default in nova. To enable
703this, it needs a manual switch.
Michel Nederloff7eefb22017-07-10 11:14:33 +0200704
705From manual:
706
707.. code-block:: yaml
708
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300709 When using libvirt 1.2.2 live snapshots fail intermittently under load
710 (likely related to concurrent libvirt/qemu operations). This config
711 option provides a mechanism to disable live snapshot, in favor of cold
712 snapshot, while this is resolved. Cold snapshot causes an instance
713 outage while the guest is going through the snapshotting process.
714
715 For more information, refer to the bug report:
716
717 https://bugs.launchpad.net/nova/+bug/1334398
Michel Nederloff7eefb22017-07-10 11:14:33 +0200718
719Configurable pillar data:
720
721.. code-block:: yaml
722
723 nova:
724 compute:
Michel Nederlofe322ebb2017-07-10 12:29:21 +0200725 workaround:
Michel Nederloff7eefb22017-07-10 11:14:33 +0200726 disable_libvirt_livesnapshot: False
727
Michel Nederlofb51a5142017-06-27 08:31:35 +0200728Config drive options
729--------------------
730
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300731See example below on how to configure the options for the
732config drive:
Michel Nederlofb51a5142017-06-27 08:31:35 +0200733
734.. code-block:: yaml
735
736 nova:
737 compute:
738 config_drive:
739 forced: True # Default: True
740 cdrom: True # Default: False
741 format: iso9660 # Default: vfat
742 inject_password: False # Default: False
743
Michel Nederloff81919b2017-11-20 09:37:07 +0100744Number of concurrent live migrates
745----------------------------------
746
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300747Default is to have no concurrent live migrations (so 1
748live-migration at a time).
Michel Nederloff81919b2017-11-20 09:37:07 +0100749
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300750Excerpt from config options page
751https://docs.openstack.org/ocata/config-reference/compute/config-options.html:
Michel Nederloff81919b2017-11-20 09:37:07 +0100752
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300753Maximum number of live migrations to run concurrently. This limit is
754enforced to avoid outbound live migrations overwhelming the host/network
755and causing failures. It is not recommended that you change this unless
756you are very sure that doing so is safe and stable in your environment.
Michel Nederloff81919b2017-11-20 09:37:07 +0100757
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300758Possible values:
Michel Nederloff81919b2017-11-20 09:37:07 +0100759
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300760- 0 : treated as unlimited.
761- Negative value defaults to 0.
762- Any positive integer representing maximum number of live migrations
763 to run concurrently.
Michel Nederloff81919b2017-11-20 09:37:07 +0100764
765To configure this option:
766
767.. code-block:: yaml
768
769 nova:
770 compute:
771 max_concurrent_live_migrations: 1 # (1 is the default)
772
Sergio Lystopad9d31cba2018-05-15 11:29:11 +0300773Live migration with auto converge
774----------------------------------
775
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300776Auto converge throttles down CPU if a progress of on-going live
777migration is slow
778https://docs.openstack.org/ocata/config-reference/compute/config-options.html:
Sergio Lystopad9d31cba2018-05-15 11:29:11 +0300779
780.. code-block:: yaml
781
782 nova:
783 compute:
784 libvirt:
785 live_migration_permit_auto_converge: False # (False is the default)
786
787.. code-block:: yaml
788
789 nova:
790 controller:
791 libvirt:
792 live_migration_permit_auto_converge: False # (False is the default)
793
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400794Enhanced logging with logging.conf
795----------------------------------
796
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300797By default ``logging.conf`` is disabled.
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400798
799That is possible to enable per-binary logging.conf with new variables:
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400800
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300801* ``openstack_log_appender``
802 Set to true to enable log_config_append for all OpenStack services
803
804* ``openstack_fluentd_handler_enabled``
805 Set to true to enable FluentHandler for all Openstack services
806
807* ``openstack_ossyslog_handler_enabled``
808 Set to true to enable OSSysLogHandler for all Openstack services
809
810Only ``WatchedFileHandler``, ``OSSysLogHandler``, and ``FluentHandler``
811are available.
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400812
Dmitry Kalashnik8da249c2018-01-16 17:58:00 +0400813Also it is possible to configure this with pillar:
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400814
815.. code-block:: yaml
816
817 nova:
818 controller:
819 logging:
820 log_appender: true
821 log_handlers:
822 watchedfile:
823 enabled: true
824 fluentd:
825 enabled: true
Oleksii Chupryn99e35032018-02-06 01:59:40 +0200826 ossyslog:
827 enabled: true
Dmitry Kalashnike58fe082017-12-01 16:31:14 +0400828
829 compute:
830 logging:
831 log_appender: true
832 log_handlers:
833 watchedfile:
834 enabled: true
835 fluentd:
836 enabled: true
Oleksii Chupryn99e35032018-02-06 01:59:40 +0200837 ossyslog:
838 enabled: true
Thom Gerdesf582f1e2017-05-02 18:05:50 +0000839
Vasyl Saienko7243a952018-05-11 21:26:54 +0300840The log level might be configured per logger by using the
841following pillar structure:
842
843.. code-block:: yaml
844
845 nova:
846 compute:
847 logging:
848 loggers:
849 <logger_name>:
850 level: WARNING
851
852 nova:
853 compute:
854 logging:
855 loggers:
856 <logger_name>:
857 level: WARNING
858
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000859Configure syslog parameters for libvirtd
860----------------------------------------
861
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300862To configure syslog parameters for libvirtd the below pillar
863structure should be used with values which are supported
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000864by libvirtd. These values might be known from the documentation.
865
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300866.. code-block:: yaml
867
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000868 nova:
869 compute:
870 libvirt:
871 logging:
872 level: 3
873 filters: '3:remote 4:event'
874 outputs: '3:syslog:libvirtd'
875 buffer_size: 64
876
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300877Logging controls:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000878
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300879Logging level: 4 errors, 3 warnings, 2 information, 1 debug
880basically 1 will log everything possible ``log_level = 3``
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000881
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300882Logging filters:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000883
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300884A filter allows to select a different logging level for a given category
885of logs.
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000886
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300887The format for a filter is one of:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000888
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300889* ``x:name``
890* ``x:+name``
891 where name is a string which is matched against source file name,
892 e.g., ``remote``, ``qemu``, or ``util/json``, the optional ``+`` prefix
893 tells libvirt to log stack trace for each message matching name,
894 and x is the minimal level where matching messages should be logged:
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000895
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300896* ``1: DEBUG``
897* ``2: INFO``
898* ``3: WARNING``
899* ``4: ERROR``
900
901Multiple filter can be defined in a single @filters, they just
902need to be separated by spaces.
903
904For example, to only get warning or errors from the remote layer
905and only errors from the event layer: ``log_filters="3:remote 4:event``
906
907Logging outputs:
908
909An output is one of the places to save logging information
910The format for an output can be:
911
912* ``x:stderr``
913 Output goes to stderr
914
915* ``x:syslog:name``
916 Use syslog for the output and use the given name as the ident
917
918* ``x:file:file_path``
919 output to a file, with the given filepath
920
921 In all case the x prefix is the minimal level, acting as a filter
922
923* ``1: DEBUG``
924* ``2: INFO``
925* ``3: WARNING``
926* ``4: ERROR``
927
928Multiple output can be defined, they just need to be separated by spaces.
929For example, to log all warnings and errors to syslog under the libvirt
930dident: ``log_outputs="3:syslog:libvirtd``
931
932Log debug buffer size: default 64
933The daemon keeps an internal debug log buffer which will be dumped
934in case of crash or upon receiving a ``SIGUSR2`` signal. This setting
935allows to override the default buffer size in kilobytes.
936If value is ``0`` or less the debug log buffer is deactivated
937``log_buffer_size = 64``
938
939To configure the logging parameters for QEMU, the below pillar
940structure and logging parameters should be used:
941
942.. code-block:: yaml
943
944 nova:
945 compute:
946 qemu:
947 logging:
948 handler: logd
949 virtlog:
950 enabled: true
951 level: 4
952 filters: '3:remote 3:event'
953 outputs: '4:syslog:virtlogd'
954 max_clients: 512
955 max_size: 2097100
956 max_backups: 2
Oleh Hryhorove38525d2018-05-15 08:58:59 +0000957
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300958Inject password to VM
959---------------------
960
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300961By default nova blocks up any inject to VM because
962``inject_partition`` param is equal to ``-2``.
963If you want to inject password to VM, you will need to
964define ``inject_partition`` greater or equal to ``-1`` and
965define ``inject_password`` to ``True``
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300966
967For example:
968
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300969.. code-block:: yaml
970
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +0300971 nova:
972 compute:
973 inject_partition: '-1'
974 inject_password: True
975
OlgaGusarenko9dd01c92018-07-31 00:49:30 +0300976Allow the injection of an admin password for instance only at
977``create`` and ``rebuild`` process.
978
979There is no agent needed within the image to do this. If *libguestfs* is
980available on the host, it will be used. Otherwise *nbd* is used. The file
981system of the image will be mounted and the admin password, which is provided
982in the REST API call will be injected as password for the root user. If no
983root user is available, the instance won't be launched and an error is thrown.
984Be aware that the injection is *not* possible when the instance gets launched
985from a volume.
986
987Possible values:
988
989* ``True``
990 Allows the injection
991
992* ``False`` (default)
993 Disallows the injection. Any via the REST API provided
994 admin password will be silently ignored.
995
996Related options:
997
998* ``inject_partition``
999 Decides about the discovery and usage of the file system.
1000 It also can disable the injection at all.
1001 (boolean value)
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +03001002
1003You can read more about injecting the administrator password here:
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001004https://docs.openstack.org/nova/queens/admin/admin-password-injection.html
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +03001005
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +03001006Enable libvirt control channel over TLS
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001007---------------------------------------
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +03001008
1009By default TLS is disabled.
1010
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001011Enable TLS transport:
1012
1013.. code-block:: yaml
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +03001014
1015 compute:
1016 libvirt:
1017 tls:
1018 enabled: True
1019
1020You able to set custom certificates in pillar:
1021
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001022.. code-block:: yaml
1023
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +03001024 nova:
1025 compute:
1026 libvirt:
1027 tls:
1028 key: (certificate content)
1029 cert: (certificate content)
1030 cacert: (certificate content)
1031 client:
1032 key: (certificate content)
1033 cert: (certificate content)
1034
Vasyl Saienko11ac9732018-10-02 17:04:33 +00001035Controlling access by `tls_allowed_dn_list`.
1036Enable an access control list of client certificate Distinguished Names (DNs)
1037which can connect to the TLS port on this server. The default is that DNs are
1038not checked. This list may contain wildcards such as
1039"C=GB,ST=London,L=London,O=Libvirt Project,CN=*" See the POSIX fnmatch function
1040for the format of the wildcards.
1041Note that if this is an empty list, no client can connect.
1042Note also that GnuTLS returns DNs without spaces after commas between
1043the fields (and this is what we check against), but the openssl x509 tool
1044shows spaces.
1045
1046.. code-block:: yaml
1047
1048 nova:
1049 compute:
1050 libvirt:
1051 tls:
1052 tls_allowed_dn_list:
1053 host1:
1054 enabled: true
1055 value: 'C=foo,CN=cmp1'
1056 host2:
1057 enabled: true
1058 value: 'C=foo,CN=cmp2'
1059
1060
Oleksandr Shyshko1c020d12018-05-24 12:47:08 +03001061You can read more about live migration over TLS here:
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001062https://wiki.libvirt.org/page/TLSCreateServerCerts
Oleksandr Shyshko981b4fa2018-05-02 15:39:30 +03001063
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001064Enable transport + authentication for VNC over TLS
1065---------------------
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001066# Only for Queens. Communication between noVNC proxy service and QEMU
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001067
1068By default communication between nova-novncproxy and qemu service is unsecure.
1069
1070compute:
1071 qemu:
1072 vnc:
1073 tls:
1074 enabled: True
1075
1076controller:
1077 novncproxy:
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001078 # This section responsible for communication between noVNC proxy and client machine
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001079 tls:
1080 enabled: True
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001081 # This section responsible for communication between nova-novncproxy and qemu service
1082 vencrypt:
1083 tls:
1084 enabled: True
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001085
1086You able to set custom certificates in pillar:
1087
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001088nova:
1089 compute:
1090 qemu:
1091 vnc:
1092 tls:
1093 cacert (certificate content)
1094 cert (certificate content)
1095 key (certificate content)
1096
1097nova:
1098 controller:
1099 novncproxy:
1100 tls:
1101 server:
1102 cert (certificate content)
1103 key (certificate content)
1104 vencrypt:
1105 tls:
1106 cacert (certificate content)
1107 cert (certificate content)
1108 key (certificate content)
1109
1110
1111You can read more about it here:
1112 https://docs.openstack.org/nova/queens/admin/remote-console-access.html
1113
1114Enable communication between noVNC proxy and client machine over TLS
1115---------------------
1116
1117By default communication between noVNC proxy and client machine is unsecure.
1118
1119 controller:
1120 novncproxy:
1121 tls:
1122 enabled: True
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001123
1124 nova:
1125 controller:
1126 novncproxy:
1127 tls:
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001128 server:
1129 cert (certificate content)
1130 key (certificate content)
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001131
1132You can read more about it here:
Oleksandr Shyshkod8337cf2018-07-11 17:55:58 +03001133 https://docs.openstack.org/mitaka/config-reference/dashboard/configure.html
Oleksandr Shyshko1195fca2018-07-09 18:22:59 +03001134
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001135Enable x509 and ssl communication between Nova and Galera cluster.
1136---------------------
1137By default communication between Nova and Galera is unsecure.
1138
Oleksandr Shyshkocbe87352018-09-07 13:42:57 +03001139nova:
1140 controller:
1141 database:
1142 x509:
1143 enabled: True
1144
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001145You able to set custom certificates in pillar:
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001146
1147nova:
1148 controller:
1149 database:
1150 x509:
Oleksandr Shyshkocbe87352018-09-07 13:42:57 +03001151 cacert: (certificate content)
1152 cert: (certificate content)
1153 key: (certificate content)
Oleksandr Shyshko55eeac72018-08-03 18:23:28 +03001154
1155You can read more about it here:
1156 https://docs.openstack.org/security-guide/databases/database-access-control.html
1157
Oleh Hryhorov63ee8452018-08-14 09:16:02 +00001158Upgrades
1159========
1160
1161Each openstack formula provide set of phases (logical bloks) that will help to
1162build flexible upgrade orchestration logic for particular components. The list
1163of phases might and theirs descriptions are listed in table below:
1164
1165+-------------------------------+------------------------------------------------------+
1166| State | Description |
1167+===============================+======================================================+
1168| <app>.upgrade.service_running | Ensure that all services for particular application |
1169| | are enabled for autostart and running |
1170+-------------------------------+------------------------------------------------------+
1171| <app>.upgrade.service_stopped | Ensure that all services for particular application |
1172| | disabled for autostart and dead |
1173+-------------------------------+------------------------------------------------------+
1174| <app>.upgrade.pkgs_latest | Ensure that packages used by particular application |
1175| | are installed to latest available version. |
1176| | This will not upgrade data plane packages like qemu |
1177| | and openvswitch as usually minimal required version |
1178| | in openstack services is really old. The data plane |
1179| | packages should be upgraded separately by `apt-get |
1180| | upgrade` or `apt-get dist-upgrade` |
1181| | Applying this state will not autostart service. |
1182+-------------------------------+------------------------------------------------------+
1183| <app>.upgrade.render_config | Ensure configuration is rendered actual version. +
1184+-------------------------------+------------------------------------------------------+
1185| <app>.upgrade.pre | We assume this state is applied on all nodes in the |
1186| | cloud before running upgrade. |
1187| | Only non destructive actions will be applied during |
1188| | this phase. Perform service built in service check |
1189| | like (keystone-manage doctor and nova-status upgrade)|
1190+-------------------------------+------------------------------------------------------+
1191| <app>.upgrade.upgrade.pre | Mostly applicable for data plane nodes. During this |
1192| | phase resources will be gracefully removed from |
1193| | current node if it is allowed. Services for upgraded |
1194| | application will be set to admin disabled state to |
1195| | make sure node will not participate in resources |
1196| | scheduling. For example on gtw nodes this will set |
1197| | all agents to admin disable state and will move all |
1198| | routers to other agents. |
1199+-------------------------------+------------------------------------------------------+
1200| <app>.upgrade.upgrade | This state will basically upgrade application on |
1201| | particular target. Stop services, render |
1202| | configuration, install new packages, run offline |
1203| | dbsync (for ctl), start services. Data plane should |
1204| | not be affected, only OpenStack python services. |
1205+-------------------------------+------------------------------------------------------+
1206| <app>.upgrade.upgrade.post | Add services back to scheduling. |
1207+-------------------------------+------------------------------------------------------+
1208| <app>.upgrade.post | This phase should be launched only when upgrade of |
1209| | the cloud is completed. Cleanup temporary files, |
1210| | perform other post upgrade tasks. |
1211+-------------------------------+------------------------------------------------------+
1212| <app>.upgrade.verify | Here we will do basic health checks (API CRUD |
1213| | operations, verify do not have dead network |
1214| | agents/compute services) |
1215+-------------------------------+------------------------------------------------------+
1216
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001217Documentation and Bugs
1218======================
1219
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001220* http://salt-formulas.readthedocs.io/
1221 Learn how to install and update salt-formulas
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001222
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001223* https://github.com/salt-formulas/salt-formula-nova/issues
1224 In the unfortunate event that bugs are discovered, report the issue to the
1225 appropriate issue tracker. Use the Github issue tracker for a specific salt
1226 formula
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001227
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001228* https://launchpad.net/salt-formulas
1229 For feature requests, bug reports, or blueprints affecting the entire
1230 ecosystem, use the Launchpad salt-formulas project
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001231
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001232* https://launchpad.net/~salt-formulas-users
1233 Join the salt-formulas-users team and subscribe to mailing list if required
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001234
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001235* https://github.com/salt-formulas/salt-formula-nova
1236 Develop the salt-formulas projects in the master branch and then submit pull
1237 requests against a specific formula
Filip Pytloun5bc9e9f2017-02-02 13:05:40 +01001238
OlgaGusarenko9dd01c92018-07-31 00:49:30 +03001239* #salt-formulas @ irc.freenode.net
1240 Use this IRC channel in case of any questions or feedback which is always
1241 welcome