Files @ 956d7705c012
Branch filter:

Location: majic-ansible-roles/docs/releasenotes.rst

956d7705c012 39.4 KiB text/prs.fallenstein.rst Show Annotation Show as Raw Download as Raw
branko
MAR-234: Use the pipreqcheck user when checking the Python version and prompt:

- Using the root account can result in incorrect permissions being set
on the Python cache (__pycache__) directories, which can further
cause permission issues for the pirpeqcheck user itself.
- The prompt also makes more sense to check in context of the virtual
environment user (since that's the one that will normally get used
with the virtual environment itself).
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
Release notes
=============


x.y.z
-----

* ``common`` role

  * Fixed permission errors with Python cache directories in the pip
    requirements upgrade checks virtual environment that can happen if
    the initial virtual environment set-up fails.


8.0.0
-----

Dropped support for Python 2.7 and Debian 10 Buster. Added support for
Debian 12 Bookworm. Numerous minor improvements and fixes.

**Breaking changes:**

* All roles

  * Dropped support for Debian 10 (Buster).
  * Added support for Debian 12 (Bookworm).
  * ``netaddr`` Python package is now required for using the roles.
  * ``dnspython`` Python package is no longer required for using the
    roles.

* ``backup_client`` role

  * Previously the backup would run even if pre-backup scripts would
    fail. This is no longer the case, and all pre-backup scripts must
    exit with non-zero exit code in order for backup process to
    kick-in.
  * Old backups are now automatically purged after successful
    backup. This could lead to longer runtimes for entire backup
    process, as well as higher CPU usage.

* ``common`` role

  * Dropped support for Python 2.7 pip requirements upgrade
    checks. Only Python 3 is supported now.

    Requirements (input) files for Python 3 are now put under the
    ``/etc/pip_check_requirements_upgrades`` directory instead of
    ``/etc/pip_check_requirements_upgrades-py3``.

    The ``pip_check_requirements_py3`` /
    ``pip_check_requirements_py3_in`` role parameters have been
    renamed to ``pip_check_requirements`` /
    ``pip_check_requirements_in``.

  * Parameter ``maintenance_allowed_hosts`` has been dropped and
    replaced with parameter ``maintenance_allowed_sources``. The new
    parameter expects a list of IPv4 and IPv6 addresses (or
    subnets). Resolvable names can no longer be specified.

  * NTP server configuration is now based on use of pools instead of
    servers. Parameter ``ntp_servers`` has been deprecated and
    replaced with parameter ``ntp_pools``.

* ``ldap_server`` role

  * Starting with Debian 12 Bookworm, the role no longer deploys
    *rsyslog* and *logrotate* configuration for writing and rotating
    the LDAP servers logs under ``/var/log/slapd.log``. Primary
    reason is that Debian 12 Bookworm no longer installs *rsyslog* by
    default, and it is considered to be deprecated at this point. The
    LDAP server logs can be read via ``journalctl -u slapd`` when
    necessary.

* ``mail_forwarder`` role

  * Firewall rules for incoming connections from the SMTP relay server
    are now based on relay's IPv4 and IPv6 addresses as resolved on
    managed machine during deployment time.

    In case the SMTP relay server's IP addresses change, the role
    needs to get reapplied against managed machines for those changes
    to take place.

    This change in behaviour was introduced to avoid firewall-related
    errors due to inability to resolve names via DNS servers during
    boot time.

* ``mail_server`` role

  * Parameter ``mail_server_tls_protocols`` has been dropped and
    replaced with parameter ``mail_server_minimum_tls_protocol``. Full
    list of TLS protocols can no longer be specified, only the minimum
    one.

* ``wsgi_website`` role

  * Dropped support for Python 2.7. Only Python 3 is supported now.

    The ``python_version`` role parameter has been dropped. The
    ``python_interpreter`` parameter is still available, but it
    defaults to Python 3 binary.

    Python (input) requirements files are now placed under the
    ``/etc/pip_check_requirements_upgrades`` path, in accordance to
    changes made in this release to the ``common`` role.

  * Dropped the ``proxy_headers`` parameter, and replaced it with the
    ``http_header_overrides`` parameter. The new parameter has similar
    function, but the values should no longer include double
    quotes. Main goal is ease of use and consistency between the PHP
    and WSGI website roles.

**New features/improvements**

* ``php_website`` role

  * Environment indicator can now be collapsed by clicking on the
    arrows on the left side.
  * Added parameter ``http_header_overrides`` which can be used to
    set/override request's HTTP headers before passing it on to the
    PHP application.

* ``mail_server`` role

  * Protection against forging of sender addresses has been
    implemented, preventing logged-in users from using arbitrary
    sender mail addresses, even if authenticated. Authenticated users
    can use either their own login as sender, or one of the aliases
    that are associated with their mail account.

* ``web_server`` role

  * Added parameter ``environment_indicator`` which is used on the
    default page to indicate what environment the web server belongs
    to. Useful for distinguishing between test, staging, and
    production environments (similar to what is already available in
    the ``php_website`` and ``wsgi_website`` roles). Indicator can be
    collapsed by clicking on the arrows on the left side.

* ``wsgi_website`` role

  * Environment indicator can now be collapsed by clicking on the
    arrows on the left side.

**Bug fixes:**

* ``common`` role

  * Fix deprecation warnings for Python requirements upgrade checks
    when using pip-tools 7.3.0. This would result in unnecessary
    notifications being sent out to server administrator.


7.1.0
-----

Added support for Debian 11 (Bullseye), with some smaller bug fixes.

**New features/improvements**

* All roles

  * Added support for Debian 11 (Bullseye).

**Bug fixes:**

* ``xmpp_server`` role

  * Make sure to take care of deprecation-related package and
    configuration removals prior to running the rest of the tasks to
    avoid errors related to deprecated elements being invalid (like
    repository URLs for Prosody).


7.0.0
-----

Dropped support for Debian 9 (Stretch), moved away from using
non-Debian project repositories (like Prosody ones).

**Breaking changes:**

* All roles

  * Dropped support for Debian 9 (Stretch).

* ``xmpp_server`` role

  * Parameter ``xmpp_prosody_package`` has been dropped.

**New features/improvements**

* ``common`` role

  * Added parameters ``pip_check_requirements_in`` and
    ``pip_check_requirements_py3_in`` that can be used for specifying
    input requirements when checking for available package upgrades
    for Python virtual environments that are used for the checks
    themselves. This is particularly helpful in cases where Python
    version gets deprecated and some packages do not correctly declare
    the minimum version required, allowing to be more specific to
    avoid unnecessary warning mails being sent out.

  * Updated default package pins for virtual environments used to
    check for available pip package upgrades.

* ``mail_server`` role

  * Added parameter ``mail_server_smtp_additional_configuration`` that
    provides ability to include additional configuration directives
    for the SMTP server.

* ``xmpp_server`` role

  * Drop dependency on the external (Prosody) package
    repository. Install everything using official Debian
    repositories. This should help avoid future issues with Prosody
    project removing older versions of packages or dropping entire
    repository archives for older Debian releases.

  * Prosody package and some of its dependencies are installed from
    Debian backports to get more featureful release installed.

  * Role no longer depends on fetching external Prosody modules from
    project code repository, and instead relies on the prosody-modules
    package for LDAP authentication module.


6.0.0
-----

Added support for Debian 10 (Buster), alongside a couple of minor
changes and features/improvements.

**Breaking changes:**

* ``ldap_server`` role

  * Use 2048-bit Diffie-Hellman parameters for relevant TLS
    ciphers. This could introduce incompatibility with older
    clients/servers trying to connect to the LDAP server. This change
    is applicable only under Debian Buster.

**New features/improvements:**

* All roles

  * Added support for Debian 10 (Buster).

* ``common`` role

  * Added parameters ``maintenance`` and ``maintenance_allowed_hosts``
    for enabling maintenance mode. In maintenance mode only the listed
    hosts are allowed to connect to the server.

**Bug fixes:**

* ``ldap_server`` role

  * Allow use of DHE TLS ciphers by generating the necessary
    Diffie-Hellman parameters. This bug fix is applicable only under
    Debian Buster.

* ``wsgi_website_`` role

  * When the virtual environment is created, the ``setuptools`` and
    ``pip`` packages will not get pinned to any specific version,
    allowing roles that are based on ``wsgi_website`` to easily
    install preferred versions, and avoid idempotence problems in the
    process.


5.0.0
-----

Upgrade to Ansible 2.9.x, dropping support for Debian 8 Jessie,
upgrade to Python 3.x, dropping support for Python 2.7. A number of
parameters have been made mandatory or deprecated. Security has been
slightly improved in a number of roles, and there is plenty of
bug-fixes and minor improvements throughout as well.

**Breaking changes:**

* Switched to Ansible 2.9.x, removing support for older versions. All
  documentation has been updated.
* Switched to using Python 3 on both controller and managed server
  side. Python 2.7 can no longer be used for this purpose. Support for
  WSGI applications running on Python 2.7 remains.

* All roles

  * Support for Debian 8 Jessie has been dropped.
  * Common parameters ``tls_private_key_dir`` and
    ``tls_certificate_dir`` are no longer used.
  * TLS private key and certificate parameters are now mandatory.

* ``bootstrap`` role

  * Parameter ``ansible_key`` is now mandatory.

* ``common`` role``

  * Minimum version of ``pip-tools`` in the ``pip_check_requirements``
    and ``pip_check_requirements_py3`` is now 5.3.0. This change was
    required in order to fix the deprecation warnings being sent out
    when the ``pip_check_requirements_upgrades.sh`` script is run.

* ``database_server`` role

  * Parameter ``db_root_password`` has been deprecated. The root user
    can now login into the database (as the root database user) via
    unix socket authentication.

  * Role will drop the use of Debian system maintenance user
    (``debian-sys-maint``) in favour of using the root account with
    UNIX socket authentication if the database server has not already
    been set-up in that manner. This is the default behaviour starting
    from Debian Stretch, and the ``debian-sys-main`` will be present
    only if the server has been upgraded from older releases.

* ``ldap_server`` role

  * Parameter ``ldap_server_domain`` is now mandatory.

  * Updated default set of TLS ciphers used by server
    (``ldap_tls_ciphers`` parameter). All CBC ciphers have been
    dropped. This could introduce incompatibility with older clients
    trying to connect to the LDAP server.

* ``mail_forwarder`` role

  * Use 2048-bit Diffie-Hellman parameters for relevant TLS
    ciphers. This could introduce incompatibility with older
    clients/servers trying to connect to the SMTP server.

* ``mail_server`` role

  * Use 2048-bit Diffie-Hellman parameters for relevant TLS
    ciphers. This could introduce incompatibility with older
    clients/servers trying to connect to the SMTP/IMAP server.

  * Updated default set of TLS ciphers used by IMAP/SMTP servers
    (``mail_server_tls_ciphers`` parameter). All CBC ciphers have been
    dropped. This could introduce incompatibility with older clients
    trying to connect to the IMAP/SMTP server.

  * Dropped the use of ``procmail`` for local mail deliveries.

* ``php_website`` role

  * Parameter ``enforce_https`` has been deprecated and
    removed. HTTPS is now mandatory in all cases.

* ``preseed`` role

  * Parameter ``ansible_key`` is now mandatory.

  * Parameter ``preseed_directory`` is now mandatory.

* ``web_server`` role

  * Use 2048-bit Diffie-Hellman parameters for relevant TLS
    ciphers. This could introduce incompatibility with older clients
    trying to connect to the web server.

  * Updated default set of TLS ciphers used by the server
    (``web_server_tls_ciphers`` parameter). All CBC ciphers have been
    dropped. This could introduce incompatibility with older clients
    trying to connect to the server.

  * Parameter ``default_enforce_https`` has been deprecated and
    removed. HTTPS is now mandatory in all cases.

* ``wsgi_website`` role

  * Parameters ``gunicorn_version`` and ``futures_version`` have been
    deprecated and removed. Existing roles should be updated to
    utilise the ``wsgi_requirements`` parameter instead.

  * Parameter ``enforce_https`` has been deprecated and
    removed. HTTPS is now mandatory in all cases.

  * Added parameter ``wsgi_requirements_in`` for listing top-level
    packages for performing pip requirements upgrade checks for
    Gunicorn requirements (listed via existing ``wsgi_requirements``
    parameter).

* ``xmpp_server`` role

  * Parameter ``xmpp_domains`` is now mandatory.

  * Use 2048-bit Diffie-Hellman parameters for relevant TLS
    ciphers. This could introduce incompatibility with older
    clients/servers trying to connect to the XMPP server.

  * TLS hardening is now applied to the *c2s* (client) connections on
    both the standard (``5222``) and legacy (``5223``) ports. Protocol
    version and ciphers are configurable via new
    ``xmpp_server_tls_protocol`` and ``xmpp_server_tls_ciphers``
    parameters with defaults enforcing TLSv1.2+ and PFS (perfect
    forward secrecy) ciphers.

  * Support for older Prosody versions (``0.9.x``) has been
    dropped. Only Prosody ``0.10.x`` is supported at the moment (due
    to missing Lua LDAP bindings in Debian 9 Stretch).

  * Support for running Prosody 0.11.x has been added. This is also
    the new default version of Prosody that gets deployed to the
    target system.

**Bug fixes:**

* ``common`` role

  * Run apticron at least once during initial installation to avoid
    accidental locking later on during the same playbook run.

* ``mail_server`` role

  * Fixed the problem with the SMTP server (Postfix) not using TLS at
    all for outgoing SMTP connections. The server will now default to
    using opportunistic TLS (using TLS where available).

* ``wsgi_website`` role

  * Deploy the requirement files used for upgrade checks to correct
    location when using Python 3. Previously the files would get
    deployed to directory dedicated to Python 2 version, which means
    the checks would be performed using Python 2 instead of Python 3.

**New features/improvements:**

* Tests have been updated to work with latest Molecule/Testinfra as
  part of the Ansible upgrade process.
* X.509 artefacts used during testing are now generated on the fly
  using `Gimmecert <https://gimmecert.readthedocs.io/>`_.

* ``mail_forwader`` role

  * The role now supports specifying the maximum mail message size
    limit for the SMTP server to accept via
    ``mail_message_size_limit`` role parameter.

  * Mail server configuration has been slightly updated to better
    match what is currently the defaults in Debian Stretch.

* ``mail_server`` role

  * The role now supports specifying the maximum mail message size
    limit for the SMTP server to accept via
    ``mail_message_size_limit`` role parameter.

  * Mail server configuration has been slightly updated to better
    match what is currently the defaults in Debian Stretch.

* ``xmpp_server`` role

  * Server now supports blocking users via `XEP-0191: Blocking Command
    <https://xmpp.org/extensions/xep-0191.html>`_.
  * Server now supports `XEP-0280: Message Carbons
    <http://xmpp.org/extensions/xep-0280.html>`_, letting multiple
    online XMPP clients receive/store the same message.
  * Server now supports `XEP-0313: Message Archive Management
    <https://xmpp.org/extensions/xep-0313.html>`_, storing copies of
    received messages server-side. Message expiration is configurable
    via parameter ``xmpp_server_archive_expiration``.
  * XMPP server certificate is checked on daily basis using the
    ``prosodyctl check certs`` command. This helps catch issues where
    issued certificate does not include all the necessary subject
    alternative names (this has also been documented in the role
    reference documentation).

**Deprecations:**

* ``backup_server`` and ``backup_client`` role

  * Officially dropped support for DSA keys (this was mainly remnant
    from Debian 8 Jessie support, on Debian 9 Stretch and upwards the
    DSA keys were not supported at all).


4.0.0
-----

A couple of smaller bug-fixes, and introduction of (minor) breaking
change related to handling of pip requirements upgrade checks in the
``common`` role (see below).

Breaking changes:

* ``common`` role:

  * Added separate parameter (``pip_check_requirements_py3``) for
    specifying dedicated Python 3 virtual environment package
    requirements used for package upgrade checks on (other
    user-provided) Python 3 virtual environments. If the existing
    ``pip_check_requirements`` parameter has been overridden, the new
    parameter will most likely need to be overridden in your site
    configuration as well. Take note that the new requirements will
    differ between Debian Jessie and Debian Stretch due to differnece
    in Python 3 minor version releases.

Bug fixes:

* ``backup_client`` role

  * Avoid errors related to lack of ``tty`` when invoking the GnuPG
    utility by using the ``--no-tty`` option.

* ``common`` role

  * Fixed problem with pip requirements upgrades checks outputting
    package list to stderr, causing the cron job to report outdated
    packages to administrator even though nothing is outdated (cron
    job treats anything output to stderr as worthy of notification).


3.1.0
-----

Minor improvements and fixes.

Breaking changes:

* ``common`` role:

   * Default values for the ``pip_check_requirements`` have changed to
     include ``pip`` and ``setuptools`` (and a couple more). It might
     be necessary to update any customised values of this parameter to
     match the default set of packages.

Bug fixes:

* ``common`` role

  * Use Python 3 in Python virtual environment used for checking if
    upgrades are available for Python requirements files. Fixes
    possibly incorrect package resolution due to wrong version of
    Python (for packages that have different dependencies based on
    Python version).

New features/improvements:

* ``common`` role

  * Changed how the packages are installed in Python virtual
    environments used for performing pip requirements upgrade checks,
    making the process more reliable. The packages in those dedicated
    environments are now fully pinned, including system packages such
    as ``setuptools`` and ``pip`` itself.

  * Changed the pip requirements checks to now take into account
    unsafe packages as well (such as ``setuptools`` and ``pip``) if
    listed.


3.0.0
-----

Upgrade to Ansible 2.7.x and full support for Debian 9 (Stretch).

Breaking changes:

* Switched to Ansible 2.7.x, removing support for older versions. All
  documentation has been updated.

* All roles

  * In order to avoid collision with reserved name, the variable for
    running the handlers explicitly has been changed from ``handlers``
    to ``run_handlers``. E.g. to run all handlers a command similar to
    ``ansible-playbook -t handlers -e run_handlers=true
    playbooks/site.yml`` should be used.

* ``ldap_server`` role

  * Custom LDAP module ``m_ldap_entry`` has been removed. Role uses
    the official ``ldap_entry`` and ``ldap_attr`` modules.

  * The ``ldap_entries`` parameter now supports only the states
    supported by ``ldap_entry`` module (e.g. ``append`` is not
    supported any longer - since it came with custom LDAP module).

* ``xmpp_server`` role

  * Installs Prosody nightly builds (default version 0.10) instead of
    latest stable. Change made to improve reproducability, and to
    avoid future breakages after new major/minor releases of
    Prosody. Prosody package name can be specified through the
    ``xmpp_prosody_package`` variable.

    This should most likely not break anything, but is included as
    possibly breaking change nevertheless since it is a big change in
    how Prosody is installed.

    This change had to be done because LDAP integration broke with
    Prosody 0.11 due to missing LDAP bindings for Lua 5.2. See
    `MAR-137: XMPP server LDAP integration not working for Prosody
    0.11.x
    <https://projects.majic.rs/majic-ansible-roles/issues/MAR-137>`_
    for more details.

New features/improvements:

* Tests have been updated to work with latest Molecule/Testinfra as
  part of the Ansible upgrade process.

* All roles

  * Full support for Debian 9 (Stretch) has been added to all roles.

* ``common`` role

  * The ``pip`` requirements upgrade checks are now performed once per
    day instead of once per hour.
  * The ``pip`` requirements upgrade checks now do not output warning
    in case deployed ``.in`` file does not have a matching ``.txt``
    file.
  * Certificate expiration check is less verbose. No mails are sent
    out any longer in case no certificates have been configured for
    checking, nor in cases where all certificates have passed the
    check. E.g. mails are sent out only in case some of the configured
    certificates will expire within next 30 days.

* ``wsgi_website`` role

  * Support for specifying Python version for Python virtual
    environment.


2.0.0
-----

Upgrade to Ansible 2.3.x, minor bug fixes and updates needed for the upgrade.

Breaking changes:

* Switched to Ansible 2.3.x, removing support for Ansible 1.9.x. All
  documentation has been updated.

* Due to switch to Ansible 2.x which is more restrictive when deploying code on
  remote server, it is now necessary to use one of the methods listed in
  `Ansible documentation
  <https://docs.ansible.com/ansible/latest/become.html#becoming-an-unprivileged-user>`_
  if connecting to remote server as user other than ``root``. Easiest fix is to
  enable ``pipelining``. Tests have been already updated to take advantage of
  this.

* ``ldap_server`` role

   * Renamed ``ldap_entry`` module to ``m_ldap_entry`` to avoid collision with
     official module.
   * Renamed ``ldap_permissions`` module to ``m_ldap_permissions`` to be
     consistent and to avoid potential future collisions with official module
     names.

* ``wsgi_website`` role

   * Removed handler with parametrised name used for restarting the web
     service. Dependent roles should instead define their own handlers from now
     on.

New features/improvements:

* Updated documentation to refer to Debian Jessie documentation where necessary.

* ``ldap_server`` role

  * Updated tests to be more resilient to ordering changes.

* ``mail_forwarder`` role

  * Updated tests to be more resilient to ordering changes and time races.

* ``backup_client`` role

  * Switched to using the ``file`` module when cleaning-up GnuPG backup keyring,
    which should make it more robust..

Bug-fixes:

* Updated pip requirements and its input file to include ``python-vagrant``
  (needed for Molecule tests).

* Updated handling of key ID extraction for OpenPGP keys in order for it to work
  with Ansible 2.x.

* Updated usage instructions in order to be able to install The Bug Genie via
  script, and added missing instructions for creating one of the directories for
  the demo wiki role (``handlers`` directory).

* All roles

  * Updated test playbooks to avoid idempotence test failures due to apt cache
    updates.

* ``backup_client`` role

  * Fixed scenario in which backup keys could not be properly replaced on Debian
    Stretch machines (due to more up-to-date version of GnuPG compared to Debian
    Jessie).

* ``common`` role

  * Fixed handling of complex version specifications when installing packages
    via pip. Needed for Ansible 2.x.

* ``wsgi_website`` role

  * Fixed handling of complex version specifications when installing packages
    via pip. Needed for Ansible 2.x.
  * Fixed erroneous calculation of adminstrator username in internal
    defaults parameter.


1.7.0
-----

Minor improvements for mail-related roles, internal refactoring of task syntax,
and improvements of tests.

New features/improvements:

* Documentation

  * Added new sub-section in development section describing some of the
    conventions used while developing the roles.

* All roles

  * Switched to using expanded syntax in all roles and cleaned-up the tasks a
    bit (mainly internal change).
  * Minor cleanups within tests and tasks to accomodate the syntax changes
    (mainly internal change).

* ``mail_forwarder`` role

  * Added parameter ``smtp_from_relay_allowed`` that controls if managed machine
    should accept incoming SMTP connections from the relay server. Useful for
    NAT'ed or laptop machines.
  * Added parameter ``smtp_relay_host_port`` that controls what port is used for
    connecting to the specified SMTP relay. Useful for machines behind
    restrictive ISPs.

* ``mail_server`` role

  * Introduced firewall rules to redirect from TCP port 27 to TCP port 25,
    useful for machines behind restrictive ISPs.


1.6.0
-----

Implemented full test suite with a plethora of smaller bug-fixes, and some minor
(internal) improvements.

Breaking changes:

* All roles

  * Previously a number of roles would modify permissions on the ``/srv``
    directory. This has now been fixed in order to prevent weird backup failures
    etc. Manual intervention is necessary on existing servers to fix the issue
    by changing the mode to ``0755`` (this is the usual default upon the OS
    installation).

* ``mail_server`` role

  * Since Postfix will now fall-back to using ``/etc/hosts`` if it cannot
    resovle a domain via DNS, some special care may be needed in case you have
    some unusual entries in ``/etc/hosts``. Normally this should not be an
    issue, though.

* ``backup_client`` role

  * Up to this point, if you had more than one additional encryption key
    specified in configuration, only the first one was taken into account. This
    is a major issue since it would render backups up to this point decryptable
    only with one of the keys. It is highly suggested to perform a full backup
    after upgrading to new version of Majic Ansible Roles via command::

      sudo duply main full

    This will ensure the most recent backup is decryptable with all additional
    keys!

New features/improvements:

* Added new documentation chapter dedicated to development.
* Added ``requirements.txt`` that can be used for installing the required
  packages in virtual environment (useful for development).
* Small fixes (mostly typos and such) throughout the documentation.

* All roles

  * Implemented tests using Molecule. See documentation for instructions on how
    to run tests.
  * Small internal refactorings to make things simpler and easier to maintain.

* ``common`` role

  * Added missing documentation for parameters ``pipreqcheck_uid`` and
    ``pipreqcheck_gid``.

* ``mail_server`` role

  * Updated Postfix configuration to fall-back to using ``/etc/hosts`` if DNS
    lookup fails. This allows for more flexibility when testing and deploying if
    proper DNS is not available.

Bug-fixes:

* All roles

  * Fixed how TLS key and certificate material is deployed in order to avoid
    mangling of tabs.
  * Fixed how file modes are specified in tasks to ensure correct permissions
    are applied.
  * Fixed missing ``become`` keyword in tasks that use ``become_user`` for
    consistent execution.

* ``backup_client`` role

  * Fixed configuration (and documentation) for specifying the backup server
    URI - previous implementation included too many forward slashes which could
    cause failures in case of custom SSH server being used for backup.
  * Fixed configuration of additional encryption keys to include all keys listed
    instead of just the first one.
  * Fixed issue with ``backup_server_port`` parameter being completely ignored
    in the configuration.
  * Fixed issue with missing ``/etc/duply/main/include`` configuration file in
    case no backup patterns are deployed.

* ``backup_server`` role

  * Fixed deployment of backup server SSH keys in order to avoid unusable
    ``ed25519`` keys.

* ``common`` role

  * Fixated version of ``pip`` installed for performing Pyhton requirements
    package upgrade checks.
  * Fixed incorrect documentation for parameter ``additional_groups``.
  * Fixed ownership setting for firewall configuration file.
  * Fixed script used for performing checks on pip requirementes files for
    availalbe package upgrades. False positives due to different sorting will
    not be reported anymore, and the script will actually make sure to check if
    upgrades are available (which was not the case before due ot missing
    paramter to pip-compile).

* ``ldap_server`` role

  * Fixed invalid configuration of LDAP server package via
    ``debconf-set-selections`` (wrong option was used for
    ``shared/organization``).
  * Fixed role documentation example for parameter ``ldap_entries`` (was using
    obsolete syntax of ``ldap_entry`` module).
  * When making changes to the LDAP server configuration, make sure to use Unix
    socket. This way the role does not depend on correct LDAP client
    configuration.

* ``mail_server`` role

  * Fixed Postfix main configuraiton file permissions set-up to be explicit.
  * Fixed issue where Postfix server is not restarted when the truststore (used
    for verifying the LDAP server certificate) is changed.
  * Fixed issue with Postfix configuration where the parameter ``mail_user`` was
    ignored when making deliveries to Dovecot (old implementation used fixed
    value of ``vmail`` instead of parameter).

* ``php_website`` role

  * Fixed Nginx configuration file to use correct parameter (``enforce_https``
    instead of ``default_enforce_https``) when configuring HSTS. Previously it
    was possible to set the parameter to ``no``, and still end-up with HSTS
    headers being set-up.

* ``wsgi_website`` role

  * Fixed Nginx configuration file to use correct parameter (``enforce_https``
    instead of ``default_enforce_https``) when configuring HSTS. Previously it
    was possible to set the parameter to ``no``, and still end-up with HSTS
    headers being set-up.

* ``xmpp_server`` role

  * Fixed invalid default value for paramerer ``xmpp_domains`` - it should be a
    list and not a simple string. Previously this would result in invalid domain
    set-up in Prosody configuration file.
  * Fixed issue with permissions not being set on Prosody configuration file,
    making it world-readable (the configuration file contains passwords).


1.5.1
-----

Small bug-fix release for misbehaving package upgrade checks.

Bug-fixes:

* ``common`` role

  * Fixed script used for performing checks on pip requirementes files for
    availalbe package upgrades. False positives due to different sorting will
    not be reported anymore, and the script will actually make sure to check if
    upgrades are available (which was not the case before due ot missing
    paramter to pip-compile).


1.5.0
-----

Minor bug-fixes, package upgrade checks, and better support for next Debian
stable release (Stretch).

New features/improvements:

* ``backup_client`` role

  * Implemented support for next Debian stable release (*Debian Stretch*). This
    was needed due to changes in duplicity parameters and their syntax.

* ``common`` role

  * Added parameter for configuring common backup patterns. Allows for better
    control over ``/root`` and ``/home`` directories. Backup of remaining
    directories is still hard-coded.
  * Added support for checking if package upgrades are available. Covers system
    packages out-of-the-box, and provides ability to perform checks on pip
    requirements files.
  * Added generic support for checking certificate expiration dates. Relevant
    roles need to deploy special configuration files to trigger the checks.

* ``ldap_server`` role

  * Updated role to perform certificate expiration date check on LDAP server
    certificate.

* ``mail_server`` role

  * Updated role to perform certificate expiration date check on all mail server
    certificates.

* ``php_website`` role

  * Updated role to perform certificate expiration date check on website server
    certificate.

* ``xmpp_server`` role

  * Updated role to perform certificate expiration date check on XMPP server
    certificate.

* ``web_server`` role

  * Updated role to perform certificate expiration date check on default web
    server certificate.

* ``wsgi_website`` role

  * Added alternative way to specify Gunicorn version to install in virtual
    environment (via separate parameter). If this parameter is in use, package
    upgrade checks will be done as well (against auto-assembled pip requirements
    file). See role reference documentation for details.
  * Updated role to perform certificate expiration date check on website server
    certificate.

Bug-fixes:

* ``mail_server`` role

  * Fixed incorrect mail name (FQDN) used for mails originating from the server.

* ``web_server`` role

  * Fixed configuration of available TLS versions on the Nginx web server.

Documentation:

* Added release procedures and related information.
* Added information about Debian release compatibility to role reference.


1.4.0
-----

Minor fixes and features allowing for more fine-tuning of installations.

New features/improvements:

* ``ldap_server`` role

  * TLS versions and ciphers supported by server are now configurable.

* ``mail_server`` role

  * TLS versions and ciphers supported by SMTP and IMAP server are now
    configurable.
  * Number of allowed concurent IMAP connections for a single user from a single
    IP address is now configurable.

* ``web_server`` role

  * TLS versions and ciphers supported by server are now configurable.


1.3.0
-----

IPv6 support in firewall rules, small bug fixes and improvements.

New features/improvements:

* All roles that deploy firewall rules

  * Set-up IPv6 firewall rules in addition to IPv4.

* ``common`` role

  * Crontabs, operating system user passwords (``/etc/shadow``), and local user
    mails are now included in the backup.

Bug-fixes:

* ``wsgi_website`` role

  * Do not traverse static locations that have not been explicitly
    configured. Fixes issue where static location ends-up being served by Nginx
    instea of WSGI application.


1.2.0
-----

Minor fixes and features.

New features:

* ``wsgi_website`` role

  * Added support for providing custom proxy headers to pass on to Gunicorn
    server.

Bug-fixes:

* ``php_website`` role

  * Make sure the environment indicator is always shown on top by increasing its
    ``z-index`` value.

* ``wsgi_website`` role

  * Make sure the environment indicator is always shown on top by increasing its
    ``z-index`` value.


1.1.0
-----

Minor bug fixes, enchancements, and features.

New features/improvements:

* ``common`` role

  * Added support for having user-defined ``/etc/profile.d`` style scripts (in
    ``~/.profile.d/``.
  * Disables Emacs ``electric-indent-mode`` globally if Emacs is installed.
  * Deploys symbolic link for ``mysql_config`` if package
    ``libmariadb-client-lgpl-dev-compat`` is installed (workaround for
    `Debian Bug 766996
    <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766996>`_)
  * Updates CA cache immediatelly so that roles depending on cache being
    up-to-date do not throw validation errors.

* ``mail_server`` role

  * Added support for specifying local aliases.
  * Undeliverable bounces are now delivered to postmaster.

* ``php_website`` role

  * Added support for specifying custom ``php-fpm`` pool configuration options.
  * Added support for having ribon/strip at bottom to identify website
    environment. Useful for testing/staging environments.
  * Deploys symbolic link for ``mysql_config`` if package
    ``libmariadb-client-lgpl-dev-compat`` is installed (workaround for
    `Debian Bug 766996
    <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766996>`_)
  * Forwards mails delivered to application or application administrator users
    to local ``root`` account (can be configured to deliver mails elsewhere).
  * Sets ``HSTS`` policy if TLS is enforced.
  * *Umask* for the operating system which runs the website is set to ``0007``.
  * When administrator user is created for the first time, its home directory is
    populated from ``/etc/skel``. This makes prompts etc look more uniform
    across the system.

* ``wsgi_website`` role

  * Added support for having ribon/strip at bottom to identify website
    environment. Useful for testing/staging environments.
  * Added support for specifying environment variables that should be set when
    running the service, or when administering the installation (using
    application administrator operating system user).
  * Deploys symbolic link for ``mysql_config`` if package
    ``libmariadb-client-lgpl-dev-compat`` is installed (workaround for
    `Debian Bug 766996
    <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766996>`_)
  * Forwards mails delivered to application or application administrator users
    to local ``root`` account (can be configured to deliver mails elsewhere).
  * Sets ``HSTS`` policy if TLS is enforced.
  * *Umask* for the operating system which runs the website is set to ``0007``.
  * When administrator user is created for the first time, its home directory is
    populated from ``/etc/skel``. This makes prompts etc look more uniform
    across the system.

Bug-fixes:

* ``database_server`` role

  * Applies UTF-8 configuration immediatelly. This should fix issues during
    inital server set-up for roles that need to create database using UTF-8
    character set.

* ``wsgi_website`` role

  * Fixed virtualenv wrapper shell script to use proper escaping around
    arguments.
  * Website service is now restarted in case of package changes (system or
    virtual environment).

* ``mail_forwarder`` role

  * Allows incoming SMTP connections from the SMTP relay server (if
    configured). This way the SMTP relay can deliver bounces.


1.0.1
-----

Minimal bugfix update to improve interoperability.

Changes:

* ``xmpp_server`` role no longer restricts TLS to version 1.2 and ciphers to PFS
  ciphers. Should solve ``s2s`` communication issues with old XMPP servers.


1.0.0
-----

Initial release of Majic Ansible Roles.

New roles:

* ``backup``, reusable role for specifying files to back-up.
* ``backup_client``, base role for setting-up backup client on a server
  (Duplicity).
* ``backup_server``, sets-up a backup server.
* ``bootstrap``, sets-up server for Ansible management (bootstrapping it for
  subsequent Ansible runs).
* ``common``, basic set-up of server, some hardening, creation of admin accounts
  etc.
* ``database``, reusable role for creating MariaDB database and user for
  accessing the database.
* ``database_server``, sets-up database server (MariaDB).
* ``ldap_client``, sets-up LDAP client tools and configuration (OpenLDAP).
* ``ldap_server``, sets-up and manages basic entries in an LDAP server
  (OpenLDAP).
* ``mail_forwarder``, sets-up local SMTP server that forwards mail to the main
  mail server (Postfix).
* ``mail_server``, sets-up a mail server with SMTP and IMAP services (Postfix,
  Dovecot).
* ``php_website``, reusable role for creating PHP-based websites. Provides basic
  building block for PHP applications (Nginx).
* ``preseed``, small role for generating Debian preseed files for automated OS
  installation.
* ``web_server``, sets-up web server with basic welcome page (Nginx).
* ``wsgi_website``, reusable role for creating WSGI-based websites. Provides
  basic building block for WSGI applications (Nginx).
* ``xmpp_server``, sets-up an XMPP server for instant messaging services
  (Prosody).

New features:

* Usage (tutorial-like) instructions.
* Test site, serving as an example and used for basic regression testing.
* Role reference documentation.