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 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084
|
.. _Changelog:
Changelog
=========
[9.0.0] - 2025-10-03
--------------------
**BREAKING CHANGE**
Curator 9.x requires Python 3.10 or later. Python 3.8 and 3.9 are no longer supported. It has not yet been tested with Python 3.14.
**Announcement**
This the first major release supporting Elasticsearch 9.x. Only Elasticsearch 9 is supported by this release. If you need to use Curator with Elasticsearch 8.x, please use Curator 8.0.21 or earlier.
All tests pass in Python versions 3.10.13, 3.11.8, 3.12.9, and 3.13.7.
The Docker image is now based on ``python:3.13.7-alpine3.22``. The release candidate was built and tested against an Elastic Cloud instance.
**Changes**
* Update to use ``es_client==9.0.0``, which supports Elasticsearch 9.x
* Update all references to ``elasticsearch8`` to use ``elasticsearch9``
* Remove all references to deprecated ``es_client.helpers`` modules.
* Set ``VERSION_MIN`` to ``9.0.0`` and ``VERSION_MAX`` to ``9.99.99`` in ``curator.defaults`` to
prevent accidental use of Curator 9.x with Elasticsearch 8.x and earlier.
* Allow docker_test/scripts/create.sh to accept ``-ge 8`` versions of Elasticsearch.
* Bump versions in docs/asciidoc files.
* Remove Python versions 3.8 and 3.9 from acceptable versions. ``requires-python = ">=3.10"``, due to the changes in ``click>=8.2.0``
* Add Python 3.13 to the supported versions.
* Automated linter reformatting of some files, but no code changes.
* Fix ``Dockerfile`` to use ``alpine3.22`` with Python 3.13.7
* Update ``pyproject.toml`` to reflect new dependencies and versions.
* Update tests to reflect changes in ``click==8.3.0``. Mostly using ``result.stdout_bytes`` instead of ``result.output``.
8.0.21 (1 April 2025)
---------------------
**Bugfix Release**
As was reported in #1704, the ``--ignore_empty_list`` option was not being respected.
Code changes were made to each singleton that uses the ``--ignore_empty_list`` option
to ensure that the option is respected.
**Changes**
* Fix ``--ignore_empty_list`` option to be respected in all singletons.
* Add debug message to IndexList class when an empty list condition is encountered.
* Dependency version bump: ``es_client`` to ``8.17.5``
8.0.20 (21 March 2025)
----------------------
**Patch Release**
There are no code changes in this release.
A package maintainer at Debian raised an issue with the now
outdated ``cx_Freeze`` dependency in ``setup.py``. As ``cx_Freeze`` is now only
used in the Docker build, ``setup.py`` has been removed to avoid the unneeded
dependency. Docker and package builds were tested to ensure that the changes work
as expected before this release.
**Changes**
* Move ``cx_Freeze`` configuration from ``setup.py`` to ``pyproject.toml``.
The configuration will be read during the Docker image build but not otherwise
result in ``cx_Freeze`` being a dependency.
* Change how ``cx_Freeze`` is invoked in ``Dockerfile``, removing the need for
``setup.py``.
* Remove ``setup.py`` as it is no longer needed for package building.
* Use ``es_client==8.17.4`` which fixes a logging issue.
* Fix copyright dates in ``docs/index.rst``
* Update asciidoc files to reflect the new version numbers.
8.0.19 (5 March 2025)
---------------------
**Announcement**
The ability to include hidden indices is now available in Curator. This is now
an option you can include in the ``options`` section of your configuration file.
.. code-block:: yaml
options:
include_hidden: True
This will allow Curator to include hidden indices in its actions. This will not
suddenly reveal system indices, but it will allow you to include indices that
are hidden, such as indices backing certain data_streams.
This is also an option flag for the CLI Singletons, e.g. ``--include-hidden``,
with the default value being the equivalent of ``--no-include_hidden``.
There's an odd caveat to this, however, and it is probaby a bug in Elasticsearch.
If you have an index that starts with a dot, e.g. ``.my_index``, and you set your
multi-target search pattern to also start with a dot, e.g. ``.my_*``, and you
set the index settings for ``.my_index`` to be ``hidden: true``, the index will
not be excluded from the search results when the ``expand_wildcards`` parameter
is set to include hidden indices, e.g. ``open,closed,hidden``.
This is a bug in Elasticsearch, and not in Curator. I've reported it to the
Elasticsearch team at https://github.com/elastic/elasticsearch/issues/124167,
but I'm not sure when it will be addressed. In the meantime, if you need to
guarantee hidden indices stay excluded, use ``search_pattern`` and filters
to exclude anything that needs to stay excluded.
All tests pass on versions 7.17.25 and 8.17.2 of Elasticsearch.
**Changes**
* Updated ``tests/integration/test_integrations.py::TestFilters`` to have a
``filter_closed`` test to ensure functionality is working as expected. This
test was added because of #1733, which is technically about Curator v7.0.1,
but since the release of Curator 8.0.18, which supports the version of
Elasticsearch being used in that issue, a confirmation integration test was
added here.
* PEP8 formatting changes to ``tests/integration/testvars.py`` as well as adding
the ``filter_closed`` YAML sample.
* Updated ``docs/conf.py`` to reflect the modules being used.
* Add support to include hidden indices. This is done by adding ``hidden`` to
the ``expand_wildcards`` keyword arg, which will make it ``open,closed,hidden``.
8.0.18 (27 February 2025)
-------------------------
**Announcement**
Release 8.0.18 allows Curator v8 to work with Curator v7.14.x and later. All tests
pass for v7.14.0, v7.14.2, v7.17.7, v7.17.25, v7.17.27. Due to JVM issues with
M-series processors (OpenJDK 16 < FAIL < OpenJDK 19 ), I'm unable to test v7.15.x -
v7.17.6 on my MacBook Pro, but I have no reason to believe they won't as there
are no API changes between the 7.14 and 7.17 series that would affect Curator
in any way.
Hopefully this is helpful for those who are using Elasticsearch 7 still, and would
like the improvements in Curator v8. Do note that while the action files used in
Curator v7 will work with Curator v8, the client configuration files will not. There
are a few differences in syntax that are in the documentation.
See https://www.elastic.co/guide/en/elasticsearch/client/curator/current/configfile.html
for more information.
**Changes**
* Huge number of comment and code line break changes to be more PEP8 compliant.
* This includes updates to Integration tests as well
* Update to use ``es_client==8.17.2``, which enables Curator v8 to work with
Elasticsearch v7.14.x and later.
* Add ``VERSION_MAX`` and ``VERSION_MIN`` to ``curator.defaults`` to allow for
version compatibility checks. ``VERSION_MIN`` is set to 7.14.0.
* Exclude system indices by default. The list of patterns to exclude is in
``curator.defaults``, and is presently
.. code-block:: python
EXCLUDE_SYSTEM = (
'-.kibana*,-.security*,-.watch*,-.triggered_watch*,'
'-.ml*,-.geoip_databases*,-.logstash*,-.tasks*'
)
* Restored and fixed datemath integration tests for patterns that include
colons. This was a problem in the past due to Elasticsearch evaluating colon
characters as potential indicators of remote indices. This was fixed in version
8.7.0 of Elasticsearch.
**Bugfix**
* All of the testing for this release revealed a shortcoming in the snapshot
restore action class. It was relying on the user to provide the exact index
names to restore. The restore API call to Elasticsearch allows for multi-target
syntax to select and de-select indices by comma-separated patterns. While not
expressly allowed, it was possible to use. The problem was that indices could
not be properly matched and verified if patterns rather than exact names were
used. Three functions were added to ``helpers.utils`` to make this work
properly: ``multitarget_match``, ``multitarget_fix``, and ``regex_loop``. The
``Restore`` class now calls ``multitarget_match`` in the
``_get_expected_output`` method to get the names from the snapshot list object.
This now works with patterns, and the tests have been updated to ensure this.
8.0.17 (25 October 2024)
------------------------
**Bugfix**
* Reported in #1727 (and I'm relieved that nobody got bit by this sooner), A
serious bug was found where if using the ``age`` filter while deriving the
age from the index name, it was erroneously ignoring any index that did not
have a matching ``timestring`` pattern, which would leave a default epoch
time of ``0``, which would definitely be older than your cutoff date! As a
result, indices were matched and deleted that should not have been.
The fix is to remove indices that do not match the pattern in the
``_get_name_based_ages`` method. The patch is in this release, as are updated
tests to replicate the failure scenario. Hat tip to @giom-l for reporting this.
**Changes**
* Update to use ``es_client==8.15.2``.
* Update data node detection to include ``data``, ``data_content``, ``data_hot``,
and ``data_warm`` for ``shrink`` action. This was first raised in #1621, but
needed to go further than just adding ``data_hot``. Hat tip to @gnobironts for
the original pull request.
* Add ``docker_test/.env`` to ``.gitignore``
* More formatting changes as suggested by pylint
* Improve API calls to ``node.info`` and ``node.stats`` to use ``filter_path``
8.0.16 (6 August 2024)
----------------------
**Changes**
* Update to use ``es_client==8.14.2``
* Formatting changes and improvements
* Update CLI to get client using ``ctx.obj['configdict']`` as it's already built
by ``es_client``.
**Bugfixes**
* Fix improper log levels erroneously left in from debugging. Thanks to
@boutetnico in #1714
* ``es_client`` version 8.14.2 addresses a problem where Python 3.8 is not officially supported
for use with ``voluptuous`` greater than ``0.14.2``.
8.0.15 (10 April 2024)
----------------------
**Announcement**
* Python 3.12 support becomes official. A few changes were necessary to ``datetime`` calls
which were still using naive timestamps. Tests across all minor Python versions from 3.8 - 3.12
verify everything is working as expected with regards to those changes. Note that Docker builds
are still running Python 3.11 as cx_Freeze still does not officially support Python 3.12.
* Added infrastructure to test multiple versions of Python against the code base. This requires
you to run:
* ``pip install -U hatch hatchling`` -- Install prerequisites
* ``hatch run docker:create X.Y.Z`` -- where ``X.Y.Z`` is an ES version on Docker Hub
* ``hatch run test:pytest`` -- Run the test suite for each supported version of Python
* ``hatch run docker:destroy`` -- Cleanup the Docker containers created in ``docker:create``
**Bugfix**
* A bug reported in ``es_client`` with Python versions 3.8 and 3.9 has been addressed. Going
forward, testing protocol will be to ensure that Curator works with all supported versions of
Python, or support will be removed (when 3.8 is EOL, for example).
**Changes**
* Address deprecation warning in ``get_alias()`` call by limiting indices to only open and
closed indices via ``expand_wildcards=['open', 'closed']``.
* Address test warnings for an improperly escaped ``\d`` in a docstring in ``indexlist.py``
* Updated Python version in Docker build. See Dockerfile for more information.
* Docker test scripts updated to make Hatch matrix testing easier (.env file)
8.0.14 (2 April 2024)
---------------------
**Announcement**
* A long awaited feature has been added, stealthily. It's fully in the documentation, but I do
not yet plan to make a big announcement about it. In actions that search through indices, you
can now specify a ``search_pattern`` to limit the number of indices that will be filtered. If
no search pattern is specified, the behavior will be the same as it ever was: it will search
through ``_all`` indices. The actions that support this option are: allocation, close,
cold2frozen, delete_indices, forcemerge, index_settings, open, replicas, shrink, and snapshot.
**Bugfix**
* A mixup with naming conventions from the PII redacter tool got in the way of the cold2frozen
action completing properly.
**Changes**
* Version bump: ``es_client==8.13.0``
* With the version bump to ``es_client`` comes a necessary change to calls to create a
repository. In https://github.com/elastic/elasticsearch-specification/pull/2255 it became
clear that using ``type`` and ``settings`` as it has been was insufficient for repository
settings, so we go back to using a request ``body`` as in older times. This change affects
``esrepomgr`` in one place, and otherwise only in snapshot/restore testing.
* Added the curator.helpers.getters.meta_getter to reduce near duplicate functions.
* Changed curator.helpers.getters.get_indices to use the _cat API to pull indices. The primary
driver for this is that it avoids pulling in the full mapping and index settings when all we
really need to return is a list of index names. This should help keep memory from ballooning
quite as much. The function also now allows for a search_pattern kwarg to search only for
indices matching a pattern. This will also potentially make the initial index return list much
smaller, and the list of indices needing to be filtered that much smaller.
* Tests were added to ensure that the changes for ``get_indices`` work everywhere.
* Tests were added to ensure that the new ``search_pattern`` did not break anything, and does
behave as expected.
8.0.13 (26 March 2024)
----------------------
**Bugfix**
* An issue was discovered in ``es_client`` that caused default values from command-line options
which should not have been set to override settings in configuration files.
``es_client==8.12.9`` corrects this. Reported in #1708, hat tip to @rgaduput for reporting this
bug.
8.0.12 (20 March 2024)
----------------------
**Bugfix**
* ``six`` dependency erroneously removed from ``es_client``. It's back in ``es_client==8.12.8``
8.0.11 (20 March 2024)
----------------------
**Announcement**
* With the advent of ``es_client==8.12.5``, environment variables can now be used to automatically
populate command-line options. The ``ESCLIENT_`` prefix just needs to prepend the capitalized
option name, and any hyphens need to be replaced by underscores. ``--http-compress True`` is
automatically settable by having ``ESCLIENT_HTTP_COMPRESS=1``. Boolean values are 1, 0, True,
or False (case-insensitive). Options like ``hosts`` which can have multiple values just need to
have whitespace between the values, e.g.
``ESCLIENT_HOSTS='http://127.0.0.1:9200 http://localhost:9200'``. It splits perfectly. This is
tremendous news for the containerization/k8s community. You won't have to have all of the
options spelled out any more. Just have the environment variables assigned.
* Also, log blacklisting has made it to the command-line as well. It similarly can be set via
environment variable, e.g. ``ESCLIENT_BLACKLIST='elastic_transport urllib3'``, or by multiple
``--blacklist`` entries at the command line.
* ``es_client`` has simplified things such that I can clean up arg sprawl in the command line
scripts.
**Changes**
Lots of pending pull requests have been merged. Thank you to the community
members who took the time to contribute to Curator's code.
* DOCFIX - Update date math section to use ``y`` instead of ``Y`` (#1510)
* DOCFIX - Update period filtertype description (#1550)
* add .dockerignore to increase build speed (#1604)
* DOCFIX - clarification on prefix and suffix kinds (#1558)
The provided documentation was adapted and edited.
* Use builtin unittest.mock (#1695)
* Had to also update ``helpers.testers.verify_client_object``.
* Display proper error when mapping incorrect (#1526) - @namreg
Also assisting with this is @alexhornblake in #1537
Apologies for needing to adapt the code manually since it's been so long.
* Version bumps:
* ``es_client==8.12.6``
8.0.10 (1 February 2024)
------------------------
**Changes**
The upstream dependency, ``es_client``, needed to be patched to address a
Docker logging permission issue. This release only version bumps that
dependency:
* ``es_client==8.12.4``
8.0.9 (31 January 2024)
-----------------------
**Announcements**
Curator is improving command-line options using new defaults and helpers from
from the ``es_client`` module. This will make things appear a bit cleaner at
the command-line as well as normalize command-line structure between projects
using ``es_client``. No more reimplementing the same code in 5 different
projects!
**Changes**
* Fix Docker logging per #1694. It should detect whether that path exists and
that the process has write permissions before blindly attempting to use it.
* If ``--config`` is not specified Curator will now assume you either mean to
use CLI options exclusively or look for a config in the default location.
Curator will not halt on the absence of ``--config`` any more, per #1698
* Increment Dockerfile settings to ``python:3.11.7-alpine3.18``
* Some command-line options are hidden by default now but remain usable. The
help output explains how to see the full list, if needed.
* Dependency bumps
* As ``es_client`` covers all of the same upstream dependencies that were
necessary in previous releases, all local dependencies have been erased
in favor of that one. For this release, that is ``es_client==8.12.3``
8.0.8 (21 July 2023)
--------------------
**Announcements**
Small change to further reduce memory usage by not creating unused data
structures.
This revealed a glitch with dry-runs that would eventually have been reported.
**Changes**
* Don't populate IndexList.index_info until required by a filter. In other
words, stop populating the zero values as part of instantiation.
* This uncovered an oversight with the 8.0.7 release. Certain actions, if
taken with no filters, or only a pattern filter, would never ever populate
the index_info. This wasn't a huge problem, unless you were using the
dry-run flag. The dry-run output requires the index_info to be present for
each index. In 8.0.7, where the empty structure was already in place, a
dry-run wouldn't fail, but it also wouldn't show any data. This is fixed.
* A few tests also needed updating. They were using contrived scenarios to
test certain conditions. Now these tests are manually grabbing necessary
metadata so they can pass.
8.0.7 (21 July 2023)
--------------------
**Announcements**
Functionally, there are no changes in this release. However...
This release ends the practice of collecting all stats and metadata at
IndexList initiation. This should make execution much faster for users with
enormous clusters with hundreds to thousands of indices. In the past, this was
handled at IndexList instantiation by making a cluster state API call. This is
rather heavy, and can be so much data as to slow down Curator for minutes on
clusters with hundreds to thousands of shards. This is all changed in this
release.
For example, the pattern filter requires no index metadata, as it only works
against the index name. If you use a pattern filter first, the actionable list
of indices is reduced. Then if you need to filter based on age using the
``creation_date``, the age filter will call ``get_index_settings`` to pull the
necessary data for that filter to complete. Some filters will not work against
closed indices. Those filters will automatically call ``get_index_state`` to
get the open/close status of the indices in the actionable list. The disk space
filter will require the index state as it won't work on closed indices, and
will call ``get_index_stats`` to pull the size_in_bytes stats.
Additionally, the cat API is used to get index state (open/close), now, as it
is the only API call besides the cluster state which can inform on this matter.
Not calling for a huge dump of the entire cluster state should drastically
reduce memory requirements, though that may vary for some users still after all
of the index data is polled, depending on what filters are used.
There is a potential caveat to all this rejoicing, however. Searchable snapshot
behavior with ILM policies usually keeps indices out of Curator's vision. You
need to manually tell Curator to allow it to work on ILM enabled indices. But
for some users who need to restore a snapshot to remove PII or other data from
an index, it can't be in ILM anymore. This has caused some headaches. For
example, if you are tracking an index in the hot tier named 'index1' and it is
in process of being migrated to the cold tier as a searchable snapshot, it may
suddenly disappear from the system as 'index1' and suddenly re-appear as
'restored-index1'. The original index may now be an alias that points to the
newly mounted cold-tier index. Before this version, Curator would choke if it
encountered this scenario. In fact, one user saw it repeatedly. See the last
comment of issue 1682 in the GitHub repository for more information.
To combat this, many repeated checks for index integrity have become necessary.
This also involves verifying that indices in the IndexList are not actually
aliases. Elasticsearch provides ``exists`` tests for these, but they cannot be
performed in bulk. They are, however, very lightweight. But network turnaround
times could make large clusters slower. For this reason, it is highly
recommended that regex filters be used first, early, and often, before using
any other filters. This will reduce the number of indices Curator has to check
and/or verify during execution, which will speed things up drastically.
8.0.6.post1 (18 July 2023)
--------------------------
**Breakfix Patch**
No code was changed in this release, only Python dependencies. If you are using
``pip`` to install Curator, chances are good you won't need this release.
This release was necessary after Docker refused to build a viable container using
PyYAML 6.0.0, which will not build with the new Cython 3, released on Friday,
July 14, 2023. A speedy fix was released as PyYAML 6.0.1 to address this.
The current 8.0.6 Docker image uses these fixes. This version will be published
to PyPI, but not otherwise released as its own version.
8.0.6 (18 July 2023)
--------------------
**Breakfix Release**
* Small breakfix change to catch a similar rare race condition patched in
8.0.5 covering the ``get_index_stats()`` method of IndexList. This patch
covers the ``get_metadata()`` method and closes #1682.
8.0.5 (13 July 2023)
--------------------
**Announcements**
Release for Elasticsearch 8.8.2
**Changes**
* Small PEP formatting changes that were found editing code.
* Bump Python version in Dockerfile to 3.11.4
* Bump Python dependency versions.
* Change ``targetName`` to ``target_name`` in ``setup.py`` for newest version
of cx_Freeze. Hat tip to ``@rene-dekker`` in #1681 who made these changes
to 5.x and 7.x.
* Fix command-line behavior to not fail if the default config file is not
present. The newer CLI-based configuration should allow for no config file
at all, and now that's fixed.
* Initial work done to prevent a race condition where an index is present at IndexList
initialization, but is missing by the time index stats collection begins. The resultant
404s were causing Curator to shut down and not complete steps.
* When running in a Docker container, make Curator log to ``/proc/1/fd/1`` by
default, if no value is provided for ``logfile`` (otherwise, use that).
8.0.4 (28 April 2023)
---------------------
**Announcements**
Allow single-string, base64 API Key tokens in Curator.
To use a base64 API Key token in YAML configuration:
::
elasticsearch:
client:
hosts: https://host.example.tld:9243
other_args:
api_key:
token: '<base64 token goes here>'
To use a base64 API Key token at the command-line:
::
curator --hosts https://host.example.tld:9243 --api_token <base64 token goes here> [OTHER ARGS/OPTIONS]
**NOTE:** In neither of the above examples are the alligator clips necessary (the ``<`` and ``>`` characters).
**Changes**
* Update ``es_client`` to 8.7.0, which enables the use of the base64 encoded API Key token.
This also fixes #1671 via https://github.com/untergeek/es_client/issues/33
8.0.3 (22 February 2023)
------------------------
**Announcements**
A new action called ``cold2frozen`` has been added to Curator. It is not going to be of much use to
the vast majority of Elasticsearch users as it serves a very narrow use-case. That is, it migrates
searchable snapshot indices from the cold tier to the frozen tier, but only if they are not
associated with ILM (Index Lifecycle Management) policies. As escalation into the cold and frozen
tiers is usually handled by ILM, this is indeed a rare use case.
**Changes**
* Fixed instruction display for delete repository action of ``es_repo_mgr``
* Fix unit tests to import more specifically/cleanly
* Fixed Hatch build includes (this was speed-released to PyPI as 8.0.2.post1) as Curator did not
function after a pip install.
* Added ``cold2frozen`` action, and tests.
8.0.2 (15 February 2023)
------------------------
**Changes**
* Added the same CLI flags that the singletons offers. This gives much more flexibility with
regards to passing configuration settings as command-line options, particularly for Docker.
* Re-created the ``get_client`` function. It now resides in ``curator.helpers.getters`` and will
eventually see use in the Reindex class for remote connections.
* Created a new set of classes to import, validate the schema, and split individual actions into
their own sub-object instances. This is primarily to make ``curator/cli.py`` read much more
cleanly. No new functionality here, but fewer conditional branches, and hopefully more readable
code.
* Updated the documentation to show these changes, both the API and the Elastic.co usage docs.
8.0.1 (10 February 2023)
------------------------
**Announcements**
The 8.0.0 release was about getting Curator out the door with all of the functionality users were
accustomed to in 5.8.4, but with the newer, updated args and methods in ``elasticsearch8``. Very
little else was changed that didn't need to be. Now comes a few improvements, and more are coming,
which is why I didn't start with 8.6.0 as my release version.
* Now offering multi-architecture Docker builds for ``arm64`` (``v8``) and ``amd64``.
* This required the addition of two new scripts at the root level of the project:
``alpine4docker.sh`` and ``post4docker.py``. These scripts are used only when building the
Dockerfile. They were needed to make multi-architecture Docker images possible. I'm sure you'll
be able to see how they work with a cursory glance.
**Breaking Changes**
* I split ``curator.utils`` into several, separate modules under ``curator.helpers``.
I suppose, technically, that this qualifies as a breaking change from 8.0, but I sincerely
doubt I have any users using Curator as an API yet, so I made the change. No functions were
renamed, so this isn't as breaking so much as a slight shift in module naming. This gave me
headaches, but it needed to be done a long time ago. It was always grating to see the Pylint
warnings that the file is longer than 1000 lines, and searching for the module you wanted was
way too much scrolling. This also gave me the chance to update the tests and the docstring's
formatting for rST docs. Most of this release's changes came from this change.
**Changes**
* Curator has supported ECS logging for a while, but now that there is an official Python module,
Curator is going to use it. Welcome, ``ecs-logging``! As before, just use ``logformat: ecs``,
but now it has all of the goodness right there!
* rST docs are improved and updated. Check out https://curator.readthedocs.io to see.
* Logging turned out to be too verbose due to a shift. Now the ``blacklist`` defaults to
``['elastic_transport', 'urllib3']``. Documentation updated accordingly.
* Default behavior is now to not verify snapshot repository access for Snapshot and Restore
actions. It was a hacky fix for older versions of Elasticsearch that just shouldn't be needed.
8.0.0 (31 January 2023)
-----------------------
**Announcement**
This release is a *major* refactoring of the Curator code to work with both Elasticsearch
8.x and the Elasticsearch-py Python module of the same major and minor versions.
I apologize for the crazy merge messes trying to get this all to work. In the end, I had to delete
my fork on github and start over clean.
**Breaking Changes**
* Curator is now version locked. Curator v8.x will only work with Elasticsearch v8.x
* Your old Curator ``config.yml`` file will no longer work as written. There have been more than
a few changes necessitated by the updates in the ``elasticsearch8`` Python client library.
The client connection code has also been extracted to its own module, ``es_client``. This is
actually a good thing, however, as new options for configuring the client connection become
possible.
* Going forward, Curator will only be released as a tarball via GitHub, as an ``sdist`` or
``wheel`` via ``pip`` on PyPI, and to Docker Hub. There will no longer be RPM, DEB, or Windows
ZIP releases. I am sorry if this is inconvenient, but one of the reasons the development and
release cycle was delayed so long is because of how painfully difficult it was to do releases.
* Curator will only work with Python 3.8+, and will more tightly follow the Python version releases.
**Changes**
* Last minute doc fixes. Mostly updated links to Elasticsearch documentation.
* Python 3.11.1 is fully supported, and all versions of Python 3.8+ should be fully supported.
* Use ``hatch`` and ``hatchling`` for package building & publishing
* Because of ``hatch`` and ``pyproject.toml``, the release version still only needs to be tracked
in ``curator/_version.py``.
* Maintain the barest ``setup.py`` for building a binary version of Curator for Docker using
``cx_Freeze``.
* Remove ``setup.cfg``, ``requirements.txt``, ``MANIFEST.in``, and other files as functionality
is now handled by ``pyproject.toml`` and doing ``pip install .`` to grab dependencies and
install them. YAY! Only one place to track dependencies now!!!
* Preliminarily updated the docs.
* Migrate towards ``pytest`` and away from ``nose`` tests.
* Revamped almost every integration test
* Scripts provided now that aid in producing and destroying Docker containers for testing. See
``docker_test/scripts/create.sh``. To spin up a numbered version release of Elasticsearch, run
``docker_test/scripts/create.sh 8.6.1``. It will download any necessary images, launch them,
and tell you when it's ready, as well as provide ``REMOTE_ES_SERVER`` environment variables for
testing the ``reindex`` action, e.g.
``REMOTE_ES_SERVER="http://172.16.0.1:9201" pytest --cov=curator``. These tests are skipped
if this value is not provided. To clean up afterwards, run ``docker_test/scripts/destroy.sh``
* The action classes were broken into their own path, ``curator/actions/filename.py``.
* ``curator_cli`` has been updated with more client connection settings, like ``cloud_id``.
* As Curator 8 is version locked and will not use AWS credentials to connect to any ES 8.x
instance, all AWS ES connection settings and references have been removed.
8.0.0rc1 (30 January 2023)
--------------------------
**Announcement**
This release-candidate is a *major* refactoring of the Curator code to work with both Elasticsearch
8.x and the Elasticsearch-py Python module of the same major and minor versions.
**Breaking Changes**
* Curator is now version locked. Curator v8.x will only work with Elasticsearch v8.x
* Your old Curator ``config.yml`` file will no longer work as written. There have been more than
a few changes necessitated by the updates in the ``elasticsearch8`` Python client library.
The client connection code has also been extracted to its own module, ``es_client``. This is
actually a good thing, however, as new options for configuring the client connection become
possible.
* Going forward, Curator will only be released as a tarball via GitHub, as an ``sdist`` or
``wheel`` via ``pip`` on PyPI, and to Docker Hub. There will no longer be RPM, DEB, or Windows
ZIP releases. I am sorry if this is inconvenient, but one of the reasons the development and
release cycle was delayed so long is because of how painfully difficult it was to do releases.
* Curator will only work with Python 3.8+, and will more tightly follow the Python version releases.
**Changes**
* Python 3.11.1 is fully supported, and all versions of Python 3.8+ should be fully supported.
* Use ``hatch`` and ``hatchling`` for package building & publishing
* Because of ``hatch`` and ``pyproject.toml``, the release version still only needs to be tracked
in ``curator/_version.py``.
* Maintain the barest ``setup.py`` for building a binary version of Curator for Docker using
``cx_Freeze``.
* Remove ``setup.cfg``, ``requirements.txt``, ``MANIFEST.in``, and other files as functionality
is now handled by ``pyproject.toml`` and doing ``pip install .`` to grab dependencies and
install them. YAY! Only one place to track dependencies now!!!
* Preliminarily updated the docs.
* Migrate towards ``pytest`` and away from ``nose`` tests.
* Revamped almost every integration test
* Scripts provided now that aid in producing and destroying Docker containers for testing. See
``docker_test/scripts/create.sh``. To spin up a numbered version release of Elasticsearch, run
``docker_test/scripts/create.sh 8.6.1``. It will download any necessary images, launch them,
and tell you when it's ready, as well as provide ``REMOTE_ES_SERVER`` environment variables for
testing the ``reindex`` action, e.g.
``REMOTE_ES_SERVER="http://172.16.0.1:9201" pytest --cov=curator``. These tests are skipped
if this value is not provided. To clean up afterwards, run ``docker_test/scripts/destroy.sh``
* The action classes were broken into their own path, ``curator/actions/filename.py``.
* ``curator_cli`` has been updated with more client connection settings, like ``cloud_id``.
* As Curator 8 is version locked and will not use AWS credentials to connect to any ES 8.x
instance, all AWS ES connection settings and references have been removed.
8.0.0a1 (26 January 2023)
-------------------------
**Announcement**
This release-candidate is a *major* refactoring of the Curator code to work with both Elasticsearch
8.x and the Elasticsearch-py Python module of the same major and minor versions.
**Breaking Changes**
* Curator is now version locked. Curator v8.x will only work with Elasticsearch v8.x
* Your old Curator ``config.yml`` file will no longer work as written. There have been more than
a few changes necessitated by the updates in the ``elasticsearch8`` Python client library.
The client connection code has also been extracted to its own module, ``es_client``. This is
actually a good thing, however, as new options for configuring the client connection become
possible.
* Going forward, Curator will only be released as a tarball via GitHub, as an ``sdist`` or
``wheel`` via ``pip`` on PyPI, and to Docker Hub. There will no longer be RPM, DEB, or Windows
ZIP releases. I am sorry if this is inconvenient, but one of the reasons the development and
release cycle was delayed so long is because of how painfully difficult it was to do releases.
* Curator will only work with Python 3.8+, and will more tightly follow the Python version releases.
**Changes**
* Python 3.11.1 is fully supported, and all versions of Python 3.8+ should be fully supported.
* Use ``hatch`` and ``hatchling`` for package building & publishing
* Because of ``hatch`` and ``pyproject.toml``, the release version still only needs to be tracked
in ``curator/_version.py``.
* Maintain the barest ``setup.py`` for building a binary version of Curator for Docker using
``cx_Freeze``.
* Remove ``setup.cfg``, ``requirements.txt``, ``MANIFEST.in``, and other files as functionality
is now handled by ``pyproject.toml`` and doing ``pip install .`` to grab dependencies and
install them. YAY! Only one place to track dependencies now!!!
* Preliminarily updated the docs.
* Migrate towards ``pytest`` and away from ``nose`` tests.
* Revamped almost every integration test
* Scripts provided now that aid in producing and destroying Docker containers for testing. See
``docker_test/scripts/create.sh``. To spin up a numbered version release of Elasticsearch, run
``docker_test/scripts/create.sh 8.6.1``. It will download any necessary images, launch them,
and tell you when it's ready, as well as provide ``REMOTE_ES_SERVER`` environment variables for
testing the ``reindex`` action, e.g.
``REMOTE_ES_SERVER="http://172.16.0.1:9201" pytest --cov=curator``. These tests are skipped
if this value is not provided. To clean up afterwards, run ``docker_test/scripts/destroy.sh``
* The action classes were broken into their own path, ``curator/actions/filename.py``.
* ``curator_cli`` has been updated with more client connection settings, like ``cloud_id``.
* As Curator 8 is version locked and will not use AWS credentials to connect to any ES 8.x
instance, all AWS ES connection settings and references have been removed.
7.0.0 (31 January 2023)
-----------------------
**Announcement**
* This release is a simplified release for only ``pip`` and Docker. It only works
with Elasticsearch 7.x and is functionally identical to 5.8.4
**Breaking Changes**
* Curator is now version locked. Curator v7.x will only work with Elasticsearch v7.x
* Going forward, Curator will only be released as a tarball via GitHub, as an ``sdist`` or
``wheel`` via ``pip`` on PyPI, and to Docker Hub. There will no longer be RPM, DEB, or Windows
ZIP releases. I am sorry if this is inconvenient, but one of the reasons the development and
release cycle was delayed so long is because of how painfully difficult it was to do releases.
* Curator will only work with Python 3.8+, and will more tightly follow the Python version releases.
**New**
* Python 3.11.1 is fully supported, and all versions of Python 3.8+ should be fully supported.
* Use ``hatch`` and ``hatchling`` for package building & publishing
* Because of ``hatch`` and ``pyproject.toml``, the release version still only needs to be tracked
in ``curator/_version.py``.
* Maintain the barest ``setup.py`` for building a binary version of Curator for Docker using
``cx_Freeze``.
* Remove ``setup.cfg``, ``requirements.txt``, ``MANIFEST.in``, and other files as functionality
is now handled by ``pyproject.toml`` and doing ``pip install .`` to grab dependencies and
install them. YAY! Only one place to track dependencies now!!!
* Preliminarily updated the docs.
* Migrate towards ``pytest`` and away from ``nose`` tests.
* Scripts provided now that aid in producing and destroying Docker containers for testing. See
``docker_test/scripts/create.sh``. To spin up a numbered version release of Elasticsearch, run
``docker_test/scripts/create.sh 7.17.8``. It will download any necessary images, launch them,
and tell you when it's ready, as well as provide ``REMOTE_ES_SERVER`` environment variables for
testing the ``reindex`` action, e.g.
``REMOTE_ES_SERVER="172.16.0.1:9201" pytest --cov=curator``. These tests are skipped
if this value is not provided. To clean up afterwards, run ``docker_test/scripts/destroy.sh``
* Add filter by size feature. #1612 (IndraGunawan)
* Update Elasticsearch client to 7.17.8
**Security Fixes**
* Use `urllib3` 1.26.5 or higher #1610 (tsaarni) — This dependency is now fully handled by the
``elasticsearch7`` module and not a separate ``urllib3`` import.
6.0.0 (31 January 2023)
-----------------------
**Announcement**
* This release is a simplified release for only ``pip`` and Docker. It only works
with Elasticsearch 6.x and is functionally identical to 5.8.4
**Breaking Changes**
* Curator is now version locked. Curator v6.x will only work with Elasticsearch v6.x
* Going forward, Curator will only be released as a tarball via GitHub, as an ``sdist`` or
``wheel`` via ``pip`` on PyPI, and to Docker Hub. There will no longer be RPM, DEB, or Windows
ZIP releases. I am sorry if this is inconvenient, but one of the reasons the development and
release cycle was delayed so long is because of how painfully difficult it was to do releases.
* Curator will only work with Python 3.8+, and will more tightly follow the Python version releases.
**New**
* Python 3.11.1 is fully supported, and all versions of Python 3.8+ should be fully supported.
* Use ``hatch`` and ``hatchling`` for package building & publishing
* Because of ``hatch`` and ``pyproject.toml``, the release version still only needs to be tracked
in ``curator/_version.py``.
* Maintain the barest ``setup.py`` for building a binary version of Curator for Docker using
``cx_Freeze``.
* Remove ``setup.cfg``, ``requirements.txt``, ``MANIFEST.in``, and other files as functionality
is now handled by ``pyproject.toml`` and doing ``pip install .`` to grab dependencies and
install them. YAY! Only one place to track dependencies now!!!
* Preliminarily updated the docs.
* Migrate towards ``pytest`` and away from ``nose`` tests.
* Scripts provided now that aid in producing and destroying Docker containers for testing. See
``docker_test/scripts/create.sh``. To spin up a numbered version release of Elasticsearch, run
``docker_test/scripts/create.sh 6.8.23``. It will download any necessary images, launch them,
and tell you when it's ready, as well as provide ``REMOTE_ES_SERVER`` environment variables for
testing the ``reindex`` action, e.g.
``REMOTE_ES_SERVER="172.16.0.1:9201" pytest --cov=curator``. These tests are skipped
if this value is not provided. To clean up afterwards, run ``docker_test/scripts/destroy.sh``
* Add filter by size feature. #1612 (IndraGunawan)
* Update Elasticsearch client to 6.8.2
**Security Fixes**
* Use `urllib3` 1.26.5 or higher #1610 (tsaarni) — This dependency is now fully handled by the
``elasticsearch7`` module and not a separate ``urllib3`` import.
5.8.4 (27 April 2021)
---------------------
**Announcement**
* Because Python 2.7 has been EOL for over a year now, many projects are no
longer supporting it. This will also be the case for Curator as its
dependencies cease to support Python 2.7. With `boto3` having announced it
is ceasing support of Python 2.7, deprecated as of 15 Jan 2021, and fully
unsupported on 15 Jul 2021, Curator will follow these same dates. This
means that you will need to use an older version of Curator to continue
using Python 2.7, or upgrade to Python 3.6 or greater.
**Breaking**
* Normally I would not include breaking changes, but users have asked for
Click v7, which changes actions to require hyphens, and not underscores.
Options can still have underscores, but actions can't--well, not strictly
true. You can have underscores, but Click v7 will convert them to hyphens.
This should _only_ affect users of the Curator CLI, and not YAML file
users, and only the actions: `show-indices`, `show-snapshots`,
`delete-indices`, `delete-snapshots`. The actual actions are still named
with underscores, and the code has been updated to work with the hyphenated
action names.
**New**
* Now using `elasticsearch-py` version 7.12.0
* Adding testing for Python 3.9
* Removing testing on Python 3.6
* Tested Elasticsearch versions now include 7.12.0, 7.11.2, 7.10.2, 7.9.3,
7.8.1, 6.8.15, 5.6.16
* Changing `requirements.txt` as follows:
- boto3-1.17.57
- certifi-2020.12.5
- click-7.1.2
- elasticsearch-7.12.0
- pyyaml-5.4.1
- requests-2.25.1
- requests-aws4auth-1.0.1
- six-1.15.0
- urllib3-1.26.4
- voluptuous-0.12.1
**Bug Fixes**
* Alias integration tests needed updating for newer versions of Elasticsearch
that include ILM.
* Click 7.0 now reports an exit code of `1` for schema mismatches where it
yielded a `-1` in the past. Tests needed updating to correct for this.
**Security**
* Address multiple `pyyaml` vulnerabilities by bumping to version 5.4.1.
Contributed in #1596 (tsaarni)
5.8.3 (25 November 2020)
------------------------
**New**
* Determined to test the last 2 major version's final patch releases, plus
the last 5 minor releases in the current major version. Travis CI testing
needs to go faster, and this should suffice. For now, this means versions
5.6.16, 6.8.13, 7.6.2, 7.7.1, 7.8.1, 7.9.3, and 7.10.0
**Bug Fixes**
* Caught a few stale merge failures, and asciidoc documentation problems
which needed fixing in the 5.8 branch, which necessitate this tiny bump
release. No code changes between 5.8.2 and 5.8.3.
5.8.2 (24 November 2020)
------------------------
**Announcement**
* No, Curator isn't going away. But as you can tell, it's not as actively
developed as it once was. I am gratified to find there are still users who
make it a part of their workflow. I intend to continue development in my
spare time. Curator is now a labor of love, not an engineering project I
do during work hours.
**New**
* Testing changes. Only last ES version of 5.x and 6.x are tested, plus the
releases of 7.x since 7.2.
* ``http_auth`` is now deprecated. You can continue to use it, but it will go
away in the next major release. Moving forward, you should use ``username``
and ``password``. This should work in ``curator``, ``curator_cli``, and
``es_repo_mgr``.
* Removed tests for all 5.x branches of Elasticsearch but the final (5.6).
* Added tests for missing 7.x branches of Elasticsearch
* Remove tests for Python 3.5
* Fix hang of Shrink action in ES 7.x in #1528 (jclegras)
* Add ``ecs`` as a ``logformat`` option in #1529 (m1keil)
**Bug Fixes**
* Lots of code cleanup, trying to go PEP-8. All tests are still passing, and
the APIs are not changed (yet—-that comes in the next major release).
* Dockerfile has been updated to produce a working version with Python 3.7
and Curator 5.8.1
* Pin (for now) Elasticsearch Python module to 7.1.0. This will be updated
when an updated release of the module fixes the `cluster.state` API call
regression at https://github.com/elastic/elasticsearch-py/issues/1141
* Fix ``client.tasks.get`` API call to be ``client.tasks.list`` when no index
name is provided. See
https://github.com/elastic/elasticsearch-py/issues/1110
* Pin some pip versions to allow urllib3 and boto to coexist. See #1562
(sethmlarson).
**Documentation**
* Add Freeze/Unfreeze documentation in #1497 (lucabelluccini)
* Update compatibility matrix in #1522 (jibsonline)
5.8.1 (25 September 2019)
-------------------------
**Bug Fixes**
* ``LD_LIBRARY_PATH`` will now be set in ``/usr/bin/curator`` and the
associated scripts rather than set in ``/etc/ld.so.conf.d``
**Other**
* Unsaved logging change in ``utils.py`` that got missed is merged.
5.8.0 (24 September 2019)
-------------------------
**New**
* Require ``elasticsearch-py`` version 7.0.4
* Official support for Python 3.7 — In fact, the pre-built packages are built
using Python 3.7 now.
* Packages bundle OpenSSL 1.1.1c, removing the need for system OpenSSL
* Certifi 2019.9.11 certificates included.
* New client configuration option: api_key - used in the X-Api-key header in
requests to Elasticsearch when set, which may be required if ReadonlyREST
plugin is configured to require api-key. Requested in #1409 (vetler)
* Add ``skip_flush`` option to the ``close`` action. This should be useful
when trying to close indices with unassigned shards (e.g. before restore).
Raised in #1412. (psypuff)
* Use ``RequestsHttpConnection`` class, which permits the use of
``HTTP_PROXY`` and ``HTTPS_PROXY`` environment variables. Raised in #510
and addressed by #1259 (raynigon) in August of 2018. Subsequent changes,
however, required some adaptation, and re-submission as a different PR.
(untergeek)
* ``ignore_existing`` option added to ``CreateIndex``. Will not raise an
error if the index to be created already exists. Raised by (breml) in
#1352. (untergeek)
* Add support for ``freeze`` and ``unfreeze`` indexes using curator. Requires
Elasticsearch version 6.6 or greater with xpack enabled. Requested in issue
#1399 and rasied in PR #1454. (junmuz)
* Allow the ``close`` action to ignore synced flush failures with the new
``ignore_sync_failures`` option. Raised in #1248. (untergeek)
**Bug Fixes**
* Fix kibana filter to match any and all indices starting with ``.kibana``.
This addresses #1363, and everyone else upgrading to Elasticsearch 7.x.
Update documentation accordingly. (untergeek)
* Fix reindex post-action checks. When the filters do not return documents
to be reindexed, the post-action check to ensure the target index exists
is not needed. This new version will skip that validation if no documents
are processed (issue #1170). (afharo)
* Prevent the ``empty`` filtertype from incorrectly matching against closed
indices #1430 (heyitsmdr)
* Fix ``index_size`` function to be able to report either for either the
``total`` of all shards (default) or just ``primaries``. Added as a keyword
arg to preserve existing behavior. This was needed to fix sizing
calculations for the Shrink action, which should only count ``primaries``.
Raised in #1429 (untergeek).
* Fix ``allow_ilm_indices`` to work with the ``rollover`` action. Reported in
#1418 (untergeek)
* Update the client connection logic to be cleaner and log more verbosely in
an attempt to address issues like #1418 and others like it more effectively
as other failures have appeared to be client failures because the last
log message were vague indications that a client connection was attempted.
This is a step in the right direction, as it explicitly exits with a 1 exit
code for different conditions now. (untergeek)
* Catch snapshots without a timestring in the name causing a logic error when
using the ``count`` filter and ``use_age`` with ``source: name``. Reported
by (nerophon) in #1366. (untergeek)
* Ensure authentication (401), authorization (403), and other 400 errors are
logged properly. Reported by (rfalke) in #1413. (untergeek)
* Fix crashes in restore of "large" number of indices reported by breml in
#1360. (anandsinghkunwar)
* Do an empty list check before querying indices for field stats. Fixed by
(CiXiHuo) in #1448.
* Fix "Correctly report task runtime in seconds" while reindexing. Reported
by (jkelastic) in #1335
**Documentation**
* Grammar correction of ilm.asciidoc #1425 (SlavikCA)
* Updates to reflect changes to Elasticsearch 7 documentation #1426 and #1428
(lcawl) and (jrodewig)
5.7.6 (6 May 2019)
------------------
**Security Fix**
Evidently, there were some upstream dependencies which required vulnerable
versions of ``urllib3`` and ``requests``. These have been addressed.
* CVE-2018-20060, CVE-2019-11324, CVE-2018-18074 are addressed by this
update. Fixed in #1395 (cburgess)
**Bug Fixes**
* Allow aliases in Elasticsearch versions >= 6.5.0 to refer to more than one
index, if ``is_write_index`` is present and one index has it set to `True`.
Requested in #1342 (untergeek)
5.7.5 (26 April 2019)
---------------------
This has to be a new record with 5 releases in 3 days, however, as a wonderful
aside, this release is the Curator Haiku release (if you don't know why, look
up the structure of a Haiku).
**Bug Fix**
* Persistent ILM filter error has finally been caught. Apparently, in Python,
a list of lists ``[[]]`` will evaluate as existing, because it has one
array element, even if that element is empty. So, this is my bad, but it is
fixed now. (untergeek)
5.7.4 (25 April 2019)
---------------------
**Bug Fix**
* ILM filter was reading from full index list, rather than the working list
Reported in #1389 (untergeek)
5.7.3 (24 April 2019)
---------------------
**Bug Fix**
* Still further package collisions with ``urllib3`` between ``boto3`` and
``requests``. It was working, but with an unacceptable error, which is
addressed in release 5.7.3. (untergeek)
5.7.2 (24 April 2019)
---------------------
**Bug Fix**
* Fix ``urllib3`` dependency collision on account of ``boto3`` (untergeek)
5.7.1 (24 April 2019)
---------------------
We do not speak of 5.7.1
5.7.0 (24 April 2019)
---------------------
**New**
* Support for ``elasticsearch-py`` 7.0.0 (untergeek)
* Support for Elasticsearch 7.0 #1371 (untergeek)
* TravisCI testing for Elasticsearch 6.5, 6.6, 6.7, and 7.0 (untergeek)
* Allow shrink action to use multiple data paths #1350 (IzekChen)
**Bug Fixes**
* Fix ``regex`` pattern filter to use ``re.search`` #1355 (matthewdupre)
* Report rollover results in both dry-run and regular runs. Requested
in #1313 (untergeek)
* Hide passwords in DEBUG logs. Requested in #1336 (untergeek)
* With ILM fully released, Curator tests now correctly use the
``allow_ilm_indices`` option. (untergeek)
**Documentation**
* Many thanks to those who submitted documentation fixes, both factual as
well as typos!
5.6.0 (13 November 2018)
------------------------
**New**
* The ``empty`` filter has been exposed for general use. This filter matches
indices with no documents. (jrask) #1264
* Added tests for Elasticsearch 6.3 and 6.4 releases. (untergeek)
* Sort indices alphabetically before sorting by age.
(tschroeder-zendesk) #1290
* Add ``shards`` filtertype (cushind) #1298
**Bug Fixes**
* Fix YAML linting so that YAML errors are caught and displayed on the
command line. Reported in #1237 (untergeek)
* Pin ``click`` version for compatibility. (Andrewsville) #1280
* Allow much older epoch timestamps (rsteneteg) #1296
* Reindex action respects ``ignore_empty_list`` flag (untergeek) #1297
* Update ILM index version minimum to 6.6.0 (untergeek)
* Catch reindex failures properly. Reported in #1260 (untergeek)
**Documentation**
* Added Reindex example to the sidebar. (Nostalgiac) #1227
* Fix Rollover example text and typos. (untergeek)
5.5.4 (23 May 2018)
-------------------
**Bug Fix**
* Extra args in show.py prevented show_snapshots from executing (untergeek)
5.5.3 (21 May 2018)
-------------------
Short release cycle here specifically to address the Snapshot restore issue
raised in #1192
**Changes**
* By default, filter out indices with ``index.lifecycle.name`` set. This can
be overridden with the option ``allow_ilm_indices`` with the caveat that
you are on your own if there are conflicts. NOTE: The Index Lifecycle
Management feature will not appear in Elasticsearch until 6.4.0
* Removed some unused files from the repository.
**Bug Fixes**
* Fix an ambiguously designed Alias test (untergeek)
* Snapshot action will now raise an exception if the snapshot does not
complete with state ``SUCCESS``. Reported in #1192 (untergeek)
* The show_indices and show_snapshots singletons were not working within the
new framework. They've been fixed now.
5.5.2 (14 May 2018)
-------------------
**Changes**
* The ``alias``, ``restore``, ``rollover``, and ``shrink`` actions have been
added to ``curator_cli``, along with a revamped method to manage/add
actions in the future.
* Updated ``certifi`` dependency to ``2018.4.16``
* Added ``six`` dependency
* Permit the use of versions 6.1 and greater of the ``elasticsearch`` python
module. There are issues with SSL contexts in the 6.0 release that prevent
Curator from being able to use this version. Currently the requirement
version string is ``elasticsearch>=5.5.2,!=6.0.0,<7.0.0``
* Start of pylint cleanup, and use of `six` `string_types`. (untergeek)
**Bug Fixes**
* `unit_count_pattern` setting can cause indices to mistakenly be included
in an index filter. Fixed in #1206 (soenkeliebau)
* Fix rollover _check_max_size() call. Reported in #1202 by @diranged
(untergeek).
* Update tested versions of Elasticsearch. (untergeek).
* Update setup.cfg to install dependencies during source install. (untergeek)
* Fix reference to unset variable name in log output at
https://github.com/elastic/curator/blob/v5.5.1/curator/actions.py#L2145
It should be `idx` instead of `index`. (untergeek).
* Alias action should raise `NoIndices` exception if `warn_if_no_indices` is
`True`, and no `add` or `remove` sub-actions are found, rather than raising
an `ActionError`. Reported in #1209 (untergeek).
**Documentation**
* Clarify inclusive filtering for allocated filter. Fixed in #1203 (geekpete)
* Fix Kibana filter description. #1199 (quartett-opa)
* Add missing documentation about the ``new_name`` option for rollover.
Reported in #1197 (untergeek)
5.5.1 (22 March 2018)
---------------------
**Bug Fixes**
* Fix ``pip`` installation issues for older versions of Python
#1183 (untergeek)
5.5.0 (21 March 2018)
---------------------
**New Features**
* Add ``wait_for_rebalance`` as an option for ``shrink`` action. By default
the behavior remains unchanged. You can now set this to False though to
allow the shrink action to only check that the index being shrunk has
finished being relocated and it will not wait for the cluster to
rebalance. #1129 (tschroeder-zendesk)
* Work around for extremely large cluster states. #1142 (rewiko)
* Add CI tests for Elasticsearch versions 6.1 and 6.2 (untergeek)
* Add Elasticsearch datemath support for snapshot names #1078 (untergeek)
* Support ``max_size`` as a rollover condition for Elasticsearch versions
6.1.0 and up. #1140 (untergeek)
* Skip indices with a document count of 0 when using ``source: field_stats``
to do ``age`` or ``period`` type filtering. #1130 (untergeek)
**Bug Fixes**
* Fix missing node information in log line. #1142 (untergeek)
* Fix default options in code that were causing schema validation errors
after ``voluptuous`` upgrade to 0.11.1.
Reported in #1149, fixed in #1156 (untergeek)
* Disallow empty lists as reindex source. Raise exception if that happens.
Reported in #1139 (untergeek)
* Set a ``timeout_override`` for ``delete_snapshots`` to catch cases where
slower repository network and/or disk access can cause a snapshot delete
to take longer than the default 30 second client timeout. #1133 (untergeek)
* Add AWS ES 5.1 support. #1172 (wanix)
* Add missing ``period`` filter arguments for ``delete_snapshots``.
Reported in #1173 (untergeek)
* Fix kibana filtertype to catch newer index names.
Reported in #1171 (untergeek)
* Re-order the closed indices filter for the Replicas action to take place
`before` the empty list check.
Reported in #1180 by ``@agomerz`` (untergeek)
**General**
* Deprecate testing for Python 3.4. It is no longer being supported by
Python.
* Increase logging to show error when ``master_only`` is true and there are
multiple hosts.
**Documentation**
* Correct a misunderstanding about the nature of rollover conditions.
#1144 (untergeek)
* Correct links to the field_stats API, as it is non-existent in
Elasticsearch 6.x. (untergeek)
* Add a warning about using forcemerge on active indices.
#1153 (untergeek)
* Fix select URLs in pip installation from source to not be 404
#1133 (untergeek)
* Fix an error in regex filter documentation #1138 (arne-cl)
5.4.1 (6 December 2017)
-----------------------
**Bug Fixes**
* Improve Dockerfile to build from source and produce slimmer image
#1111 (mikn)
* Fix ``filter_kibana`` to correctly use ``exclude`` argument
#1116 (cjuroz)
* Fix `ssl_no_validate` behavior within AWS ES #1118 (igalarzab)
* Improve command-line exception management #1119 (4383)
* Make ``alias`` action always process ``remove`` before ``add``
to prevent undesired alias removals. #1120 (untergeek)
**General**
* Bump ES versions in Travis CI
**Documentation**
* Remove ``unit_count`` parameter doc for parameter that no longer
exists #1107 (dashford)
* Add missing ``exclude: True`` in ``timestring`` docs #1117 (GregMefford)
5.4.0 (13 November 2017)
------------------------
**Announcement**
* Support for Elasticsearch 6.0!!! Yes!
**New Features**
* The ``field_stats`` API may be gone from Elasticsearch, but its utility
cannot be denied. And so, Curator has replaced the ``field_stats`` API
call with a small aggregation query. This will be perhaps a bit more
costly in performance terms, as this small aggregation query must be made
to each index in sequence, rather than as a one-shot call, like the
``field_stats`` API call. But the benefit will remain available, and
it's the only major API that did not persevere between Elasticsearch 5.x
and 6.x that was needed by Curator.
5.3.0 (31 October 2017)
-----------------------
**New Features**
* With the period filter and field_stats, it is useful to match indices
that fit `within` the period, rather than just their start dates. This
is now possible with ``intersect``. See more in the documentation.
Requested in #1045. (untergeek)
* Add a ``restore`` function to ``curator_cli`` singleton. Mentioned in
#851 (alexef)
* Add ``pattern`` to the ``count`` filter. This is particularly useful
when working with rollover indices. Requested in #1044 (untergeek)
* The ``es_repo_mgr create`` command now can take ``skip_repo_fs_check`` as
an argument (default is False) #1072 (alexef)
* Add ``pattern_type`` feature expansion to the ``period`` filter. The
default behavior is ``pattern_type='relative'``, which preserves existing
behaviors so users with existing configurations can continue to use them
without interruption. The new ``pattern_type`` is ``absolute``, which
allows you to specify hard dates for ``date_from`` and ``date_to``, while
``date_from_format`` and ``date_to_format`` are strftime strings to
interpret the from and to dates. Requested in #1047 (untergeek)
* Add ``copy_aliases`` option to the ``shrink`` action. So this option is
only set in the ``shrink`` action. The default value of the option is
``copy_aliases: 'False'`` and it does nothing. If you set to
``copy_aliases: 'True'``, you could copy the aliases from the source index
to the target index. Requested in #1060 (monkey3199)
* IAM Credentials can now be retrieved from the environment using the Boto3
Credentials provider. #1084 (kobuskc)
**Bug Fixes**
* Delete the target index (if it exists) in the event that a shrink fails.
Requested in #1058 (untergeek)
* Fixed an integration test that could fail in the waning days of a month.
* Fix build system anomalies for both unix and windows.
**Documentation**
* Set repository access to be https by default.
* Add documentation for ``copy_aliases`` option.
5.2.0 (1 September 2017)
------------------------
**New Features**
* Shrink action! Apologies to all who have patiently waited for this
feature. It's been a long time coming, but it is hopefully worth the
wait. There are a lot of checks and tests associated with this action,
as there are many conditions that have to be met in order for a shrink
to take place. Curator will try its best to ensure that all of these
conditions are met so you can comfortably rest assured that shrink will
work properly unattended. See the documentation for more information.
* The ``cli`` function has been split into ``cli`` and ``run`` functions.
The behavior of ``cli`` will be indistinguishable from previous releases,
preserving API integrity. The new ``run`` function allows lambda and other
users to `run` Curator from the API with only a client configuration file
and action file as arguments. Requested in #1031 (untergeek)
* Allow use of time/date string interpolation for Rollover index naming.
Added in #1010 (tschroeder-zendesk)
* New ``unit_count_pattern`` allows you to derive the ``unit_count`` from
the index name itself. This involves regular expressions, so be sure to
do lots of testing in ``--dry-run`` mode before deploying to production.
Added by (soenkeliebau) in #997
**Bug Fixes**
* Reindex ``request_body`` allows for 2 different ``size`` options. One
limits the number of documents reindexed. The other is for batch sizing.
The batch sizing option was missing from the schema validator. This has
been corrected. Reported in #1038 (untergeek)
* A few sundry logging and notification changes were made.
5.1.2 (08 August 2017)
----------------------
**Errata**
* An update to Elasticsearch 5.5.0 changes the behavior of
``filter_by_aliases``, differing from previous 5.x versions.
If a list of aliases is provided, indices must appear in `all` listed
aliases or a 404 error will result, leading to no indices being matched.
In older versions, if the index was associated with even one of the
aliases in aliases, it would result in a match.
Tests and documentation have been updated to address these changes.
* Debian 9 changed SSL versions, which means that the pre-built debian
packages no longer work in Debian 9. In the short term, this requires
a new repository. In the long term, I will try to get a better
repository system working for these so they all work together, better.
Requested in #998 (untergeek)
**Bug Fixes**
* Support date math in reindex operations better. It did work previously,
but would report failure because the test was looking for the index with
that name from a list of indices, rather than letting Elasticsearch do
the date math. Reported by DPattee in #1008 (untergeek)
* Under rare circumstances, snapshot delete (or create) actions could fail,
even when there were no snapshots in state ``IN_PROGRESS``. This was
tracked down by JD557 as a collision with a previously deleted snapshot
that hadn't finished deleting. It could be seen in the tasks API. An
additional test for snapshot activity in the tasks API has been added to
cover this scenario. Reported in #999 (untergeek)
* The ``restore_check`` function did not work properly with wildcard index
patterns. This has been rectified, and an integration test added to
satisfy this. Reported in #989 (untergeek)
* Make Curator report the Curator version, and not just reiterate the
elasticsearch version when reporting version incompatibilities. Reported
in #992. (untergeek)
* Fix repository/snapshot name logging issue. #1005 (jpcarey)
* Fix Windows build issue #1014 (untergeek)
**Documentation**
* Fix/improve rST API documentation.
* Thanks to many users who not only found and reported documentation issues,
but also submitted corrections.
5.1.1 (8 June 2017)
-------------------
**Bug Fixes**
* Mock and cx_Freeze don't play well together. Packages weren't working, so
I reverted the string-based comparison as before.
5.1.0 (8 June 2017)
-------------------
**New Features**
* Index Settings are here! First requested as far back as #160, it's been
requested in various forms culminating in #656. The official documentation
addresses the usage. (untergeek)
* Remote reindex now adds the ability to migrate from one cluster to another,
preserving the index names, or optionally adding a prefix and/or a suffix.
The official documentation shows you how. (untergeek)
* Added support for naming rollover indices. #970 (jurajseffer)
* Testing against ES 5.4.1, 5.3.3
**Bug Fixes**
* Since Curator no longer supports old versions of python, convert tests to
use ``isinstance``. #973 (untergeek)
* Fix stray instance of ``is not`` comparison instead of ``!=`` #972
(untergeek)
* Increase remote client timeout to 180 seconds for remote reindex. #930
(untergeek)
**General**
* elasticsearch-py dependency bumped to 5.4.0
* Added mock dependency due to isinstance and testing requirements
* AWS ES 5.3 officially supports Curator now. Documentation has been updated
to reflect this.
5.0.4 (16 May 2017)
-------------------
**Bug Fixes**
* The ``_recovery`` check needs to compare using ``!=`` instead of
``is not``, which apparently does not accurately compare unicode strings.
Reported in #966 (untergeek)
5.0.3 (15 May 2017)
-------------------
**Bug Fixes**
* Restoring a snapshot on an exceptionally fast cluster/node can create a
race condition where a ``_recovery`` check returns an empty dictionary
``{}``, which causes Curator to fail. Added test and code to correct this.
Reported in #962. (untergeek)
5.0.2 (4 May 2017)
------------------
**Bug Fixes**
* Nasty bug in schema validation fixed where boolean options or filter flags
would validate as ``True`` if non-boolean types were submitted.
Reported in #945. (untergeek)
* Check for presence of alias after reindex, in case the reindex was to an
alias. Reported in #941. (untergeek)
* Fix an edge case where an index named with `1970.01.01` could not be sorted
by index-name age. Reported in #951. (untergeek)
* Update tests to include ES 5.3.2
* Bump certifi requirement to 2017.4.17.
**Documentation**
* Document substitute strftime symbols for doing ISO Week timestrings added
in #932. (untergeek)
* Document how to include file paths better. Fixes #944. (untergeek)
5.0.1 (10 April 2017)
---------------------
**Bug Fixes**
* Fixed default values for ``include_global_state`` on the restore
action to be in line with defaults in Elasticsearch 5.3
**Documentation**
* Huge improvement to documenation, with many more examples.
* Address age filter limitations per #859 (untergeek)
* Address date matching behavior better per #858 (untergeek)
5.0.0 (5 April 2017)
--------------------
The full feature set of 5.0 (including alpha releases) is included here.
**New Features**
* Reindex is here! The new reindex action has a ton of flexibility. You
can even reindex from remote locations, so long as the remote cluster is
Elasticsearch 1.4 or newer.
* Added the ``period`` filter (#733). This allows you to select indices
or snapshots, based on whether they fit within a period of hours, days,
weeks, months, or years.
* Add dedicated "wait for completion" functionality. This supports health
checks, recovery (restore) checks, snapshot checks, and operations which
support the new tasks API. All actions which can use this have been
refactored to take advantage of this. The benefit of this new feature is
that client timeouts will be less likely to happen when performing long
operations, like snapshot and restore.
NOTE: There is one caveat: forceMerge does not support this, per the
Elasticsearch API. A forceMerge call will hold the client until complete,
or the client times out. There is no clean way around this that I can
discern.
* Elasticsearch date math naming is supported and documented for the
``create_index`` action. An integration test is included for validation.
* Allow allocation action to unset a key/value pair by using an empty value.
Requested in #906. (untergeek)
* Added support for the Rollover API. Requested in #898, and by countless
others.
* Added ``warn_if_no_indices`` option for ``alias`` action in response to
#883. Using this option will permit the ``alias`` add or remove to
continue with a logged warning, even if the filters result in a
``NoIndices`` condition. Use with care.
**General**
* Bumped ``click`` (python module) version dependency to 6.7
* Bumped ``urllib3`` (python module) version dependency to 1.20
* Bumped ``elasticsearch`` (python module) version dependency to 5.3
* Refactored a ton of code to be cleaner and hopefully more consistent.
**Bug Fixes**
* Curator now logs version incompatibilities as an error, rather than just
raising an Exception. #874 (untergeek)
* The ``get_repository()`` function now properly raises an exception instead
of returning `False` if nothing is found. #761 (untergeek)
* Check if an index is in an alias before attempting to delete it from the
alias. Issue raised in #887. (untergeek)
* Fix allocation issues when using Elasticsearch 5.1+. Issue raised in #871
(untergeek)
**Documentation**
* Add missing repository arg to auto-gen API docs. Reported in #888
(untergeek)
* Add all new documentation and clean up for v5 specific.
**Breaking Changes**
* IndexList no longer checks to see if there are indices on initialization.
5.0.0a1 (23 March 2017)
-----------------------
This is the first alpha release of Curator 5. This should not be used for
production! There `will` be many more changes before 5.0.0 is released.
**New Features**
* Allow allocation action to unset a key/value pair by using an empty value.
Requested in #906. (untergeek)
* Added support for the Rollover API. Requested in #898, and by countless
others.
* Added ``warn_if_no_indices`` option for ``alias`` action in response to
#883. Using this option will permit the ``alias`` add or remove to
continue with a logged warning, even if the filters result in a
``NoIndices`` condition. Use with care.
**Bug Fixes**
* Check if an index is in an alias before attempting to delete it from the
alias. Issue raised in #887. (untergeek)
* Fix allocation issues when using Elasticsearch 5.1+. Issue raised in #871
(untergeek)
**Documentation**
* Add missing repository arg to auto-gen API docs. Reported in #888
(untergeek)
4.2.6 (27 January 2016)
-----------------------
**General**
* Update Curator to use version 5.1 of the ``elasticsearch-py`` python
module. With this change, there will be no reverse compatibility with
Elasticsearch 2.x. For 2.x versions, continue to use the 4.x branches of
Curator.
* Tests were updated to reflect the changes in API calls, which were minimal.
* Remove "official" support for Python 2.6. If you must use Curator on a
system that uses Python 2.6 (RHEL/CentOS 6 users), it is recommended that
you use the official RPM package as it is a frozen binary built on Python
3.5.x which will not conflict with your system Python.
* Use ``isinstance()`` to verify client object. #862 (cp2587)
* Prune older versions from Travis CI tests.
* Update ``certifi`` dependency to latest version
**Documentation**
* Add version compatibility section to official documentation.
* Update docs to reflect changes. Remove cruft and references to older
versions.
4.2.5 (22 December 2016)
------------------------
**General**
* Add and increment test versions for Travis CI. #839 (untergeek)
* Make `filter_list` optional in snapshot, show_snapshot and show_indices
singleton actions. #853 (alexef)
**Bug Fixes**
* Fix cli integration test when different host/port are specified. Reported
in #843 (untergeek)
* Catch empty list condition during filter iteration in singleton actions.
Reported in #848 (untergeek)
**Documentation**
* Add docs regarding how filters are ANDed together, and how to do an OR with
the regex pattern filter type. Requested in #842 (untergeek)
* Fix typo in Click version in docs. #850 (breml)
* Where applicable, replace `[source,text]` with `[source,yaml]` for better
formatting in the resulting docs.
4.2.4 (7 December 2016)
-----------------------
**Bug Fixes**
* ``--wait_for_completion`` should be `True` by default for Snapshot
singleton action. Reported in #829 (untergeek)
* Increase `version_max` to 5.1.99. Prematurely reported in #832 (untergeek)
* Make the '.security' index visible for snapshots so long as proper
credentials are used. Reported in #826 (untergeek)
4.2.3.post1 (22 November 2016)
------------------------------
This fix is `only` going in for ``pip``-based installs. There are no other
code changes.
**Bug Fixes**
* Fixed incorrect assumption of PyPI picking up dependency for certifi. It
is still a dependency, but should not affect ``pip`` installs with an error
any more. Reported in #821 (untergeek)
4.2.3 (21 November 2016)
------------------------
4.2.2 was pulled immediately after release after it was discovered that the
Windows binary distributions were still not including the certifi-provided
certificates. This has now been remedied.
**General**
* ``certifi`` is now officially a requirement.
* ``setup.py`` now forcibly includes the ``certifi`` certificate PEM file in
the "frozen" distributions (i.e., the compiled versions). The
``get_client`` method was updated to reflect this and catch it for both the
Linux and Windows binary distributions. This should `finally` put to rest
#810
4.2.2 (21 November 2016)
------------------------
**Bug Fixes**
* The certifi-provided certificates were not propagating to the compiled
RPM/DEB packages. This has been corrected. Reported in #810 (untergeek)
**General**
* Added missing ``--ignore_empty_list`` option to singleton actions.
Requested in #812 (untergeek)
**Documentation**
* Add a FAQ entry regarding the click module's need for Unicode when using
Python 3. Kind of a bug fix too, as the entry_points were altered to catch
this omission and report a potential solution on the command-line. Reported
in #814 (untergeek)
* Change the "Command-Line" documentation header to be "Running Curator"
4.2.1 (8 November 2016)
-----------------------
**Bug Fixes**
* In the course of package release testing, an undesirable scenario was
caught where boolean flags default values for ``curator_cli`` were
improperly overriding values from a yaml config file.
**General**
* Adding in direct download URLs for the RPM, DEB, tarball and zip packages.
4.2.0 (4 November 2016)
-----------------------
**New Features**
* Shard routing allocation enable/disable. This will allow you to disable
shard allocation routing before performing one or more actions, and then
re-enable after it is complete. Requested in #446 (untergeek)
* Curator 3.x-style command-line. This is now ``curator_cli``, to
differentiate between the current binary. Not all actions are available,
but the most commonly used ones are. With the addition in 4.1.0 of schema
and configuration validation, there's even a way to still do filter
chaining on the command-line! Requested in #767, and by many other
users (untergeek)
**General**
* Update testing to the most recent versions.
* Lock elasticsearch-py module version at >= 2.4.0 and <= 3.0.0. There are
API changes in the 5.0 release that cause tests to fail.
**Bug Fixes**
* Guarantee that binary packages are built from the latest Python +
libraries. This ensures that SSL/TLS will work without warning messages
about insecure connections, unless they actually are insecure. Reported in
#780, though the reported problem isn't what was fixed. The fix is needed
based on what was discovered while troubleshooting the problem. (untergeek)
4.1.2 (6 October 2016)
----------------------
This release does not actually add any new code to Curator, but instead
improves documentation and includes new linux binary packages.
**General**
* New Curator binary packages for common Linux systems!
These will be found in the same repositories that the python-based packages
are in, but have no dependencies. All necessary libraries/modules are
bundled with the binary, so everything should work out of the box.
This feature doesn't change any other behavior, so it's not a major
release.
These binaries have been tested in:
* CentOS 6 & 7
* Ubuntu 12.04, 14.04, 16.04
* Debian 8
They do not work in Debian 7 (library mismatch). They may work in other
systems, but that is untested.
The script used is in the unix_packages directory. The Vagrantfiles for
the various build systems are in the Vagrant directory.
**Bug Fixes**
* The only bug that can be called a bug is actually a stray ``.exe`` suffix
in the binary package creation section (cx_freeze) of ``setup.py``. The
Windows binaries should have ``.exe`` extensions, but not unix variants.
* Elasticsearch 5.0.0-beta1 testing revealed that a document ID is required
during document creation in tests. This has been fixed, and a redundant
bit of code in the forcemerge integration test was removed.
**Documentation**
* The documentation has been updated and improved. Examples and installation
are now top-level events, with the sub-sections each having their own link.
They also now show how to install and use the binary packages, and the
section on installation from source has been improved. The missing
section on installing the voluptuous schema verification module has been
written and included. #776 (untergeek)
4.1.1 (27 September 2016)
-------------------------
**Bug Fixes**
* String-based booleans are now properly coerced. This fixes an issue where
`True`/`False` were used in environment variables, but not recognized.
#765 (untergeek)
* Fix missing `count` method in ``__map_method`` in SnapshotList. Reported in
#766 (untergeek)
**General**
* Update es_repo_mgr to use the same client/logging YAML config file.
Requested in #752 (untergeek)
**Schema Validation**
* Cases where ``source`` was not defined in a filter (but should have been)
were informing users that a `timestring` field was there that shouldn't
have been. This edge case has been corrected.
**Documentation**
* Added notifications and FAQ entry to explain that AWS ES is not supported.
4.1.0 (6 September 2016)
------------------------
**New Features**
* Configuration and Action file schema validation. Requested in #674
(untergeek)
* Alias filtertype! With this filter, you can select indices based on whether
they are part of an alias. Merged in #748 (untergeek)
* Count filtertype! With this filter, you can now configure Curator to only
keep the most recent `n` indices (or snapshots!). Merged in #749
(untergeek)
* Experimental! Use environment variables in your YAML configuration files.
This was a popular request, #697. (untergeek)
**General**
* New requirement! ``voluptuous`` Python schema validation module
* Requirement version bump: Now requires ``elasticsearch-py`` 2.4.0
**Bug Fixes**
* ``delete_aliases`` option in ``close`` action no longer results in an error
if not all selected indices have an alias. Add test to confirm expected
behavior. Reported in #736 (untergeek)
**Documentation**
* Add information to FAQ regarding indices created before Elasticsearch 1.4.
Merged in #747
4.0.6 (15 August 2016)
----------------------
**Bug Fixes**
* Update old calls used with ES 1.x to reflect changes in 2.x+. This was
necessary to work with Elasticsearch 5.0.0-alpha5.
Fixed in #728 (untergeek)
**Doc Fixes**
* Add section detailing that the value of a ``value`` filter element should
be encapsulated in single quotes. Reported in #726. (untergeek)
4.0.5 (3 August 2016)
---------------------
**Bug Fixes**
* Fix incorrect variable name for AWS Region reported in #679 (basex)
* Fix ``filter_by_space()`` to not fail when index age metadata is not
present. Indices without the appropriate age metadata will instead be
excluded, with a debug-level message. Reported in #724 (untergeek)
**Doc Fixes**
* Fix documentation for the space filter and the source filter element.
4.0.4 (1 August 2016)
---------------------
**Bug Fixes**
* Fix incorrect variable name in Allocation action. #706 (lukewaite)
* Incorrect error message in ``create_snapshot_body`` reported in #711
(untergeek)
* Test for empty index list object should happen in action initialization for
snapshot action. Discovered in #711. (untergeek)
**Doc Fixes**
* Add menus to asciidoc chapters #704 (untergeek)
* Add pyyaml dependency #710 (dtrv)
4.0.3 (22 July 2016)
--------------------
**General**
* 4.0.2 didn't work for ``pip`` installs due to an omission in the
MANIFEST.in file. This came up during release testing, but before the
release was fully published. As the release was never fully published, this
should not have actually affected anyone.
**Bug Fixes**
* These are the same as 4.0.2, but it was never fully released.
* All default settings are now values returned from functions instead of
constants. This was resulting in settings getting stomped on. New test
addresses the original complaint. This removes the need for ``deepcopy``.
See issue #687 (untergeek)
* Fix ``host`` vs. ``hosts`` issue in ``get_client()`` rather than the
non-functional function in ``repomgrcli.py``.
* Update versions being tested.
* Community contributed doc fixes.
* Reduced logging verbosity by making most messages debug level. #684
(untergeek)
* Fixed log whitelist behavior (and switched to blacklisting instead).
Default behavior will now filter traffic from the ``elasticsearch`` and
``urllib3`` modules.
* Fix Travis CI testing to accept some skipped tests, as needed. #695
(untergeek)
* Fix missing empty index test in snapshot action. #682 (sherzberg)
4.0.2 (22 July 2016)
--------------------
**Bug Fixes**
* All default settings are now values returned from functions instead of
constants. This was resulting in settings getting stomped on. New test
addresses the original complaint. This removes the need for ``deepcopy``.
See issue #687 (untergeek)
* Fix ``host`` vs. ``hosts`` issue in ``get_client()`` rather than the
non-functional function in ``repomgrcli.py``.
* Update versions being tested.
* Community contributed doc fixes.
* Reduced logging verbosity by making most messages debug level. #684
(untergeek)
* Fixed log whitelist behavior (and switched to blacklisting instead).
Default behavior will now filter traffic from the ``elasticsearch`` and
``urllib3`` modules.
* Fix Travis CI testing to accept some skipped tests, as needed. #695
(untergeek)
* Fix missing empty index test in snapshot action. #682 (sherzberg)
4.0.1 (1 July 2016)
-------------------
**Bug Fixes**
* Coerce Logstash/JSON logformat type timestamp value to always use UTC.
#661 (untergeek)
* Catch and remove indices from the actionable list if they do not have a
`creation_date` field in settings. This field was introduced in ES v1.4,
so that indicates a rather old index. #663 (untergeek)
* Replace missing ``state`` filter for ``snapshotlist``. #665 (untergeek)
* Restore ``es_repo_mgr`` as a stopgap until other CLI scripts are added. It
will remain undocumented for now, as I am debating whether to make
repository creation its own action in the API. #668 (untergeek)
* Fix dry run results for snapshot action. #673 (untergeek)
4.0.0 (24 June 2016)
--------------------
It's official! Curator 4.0.0 is released!
**Breaking Changes**
* New and improved API!
* Command-line changes. No more command-line args, except for ``--config``,
``--actions``, and ``--dry-run``:
- ``--config`` points to a YAML client and logging configuration file.
The default location is ``~/.curator/curator.yml``
- ``--actions`` arg points to a YAML action configuration file
- ``--dry-run`` will simulate the action(s) which would have taken place,
but not actually make any changes to the cluster or its indices.
**New Features**
* Snapshot restore is here!
* YAML configuration files. Now a single file can define an entire batch of
commands, each with their own filters, to be performed in sequence.
* Sort by index age not only by index name (as with previous versions of
Curator), but also by index `creation_date`, or by calculations from the
Field Stats API on a timestamp field.
* Atomically add/remove indices from aliases! This is possible by way of the
new `IndexList` class and YAML configuration files.
* State of indices pulled and stored in `IndexList` instance. Fewer API
calls required to serially test for open/close, `size_in_bytes`, etc.
* Filter by space now allows sorting by age!
* Experimental! Use AWS IAM credentials to sign requests to Elasticsearch.
This requires the end user to *manually* install the `requests_aws4auth`
python module.
* Optionally delete aliases from indices before closing.
* An empty index or snapshot list no longer results in an error if you set
``ignore_empty_list`` to `True`. If `True` it will still log that the
action was not performed, but will continue to the next action. If 'False'
it will log an ERROR and exit with code 1.
**API**
* Updated API documentation
* Class: `IndexList`. This pulls all indices at instantiation, and you apply
filters, which are class methods. You can iterate over as many filters as
you like, in fact, due to the YAML config file.
* Class: `SnapshotList`. This pulls all snapshots from the given repository
at instantiation, and you apply filters, which are class methods. You can
iterate over as many filters as you like, in fact, due to the YAML config
file.
* Add `wait_for_completion` to Allocation and Replicas actions. These will
use the client timeout, as set by default or `timeout_override`, to
determine how long to wait for timeout. These are handled in batches of
indices for now.
* Allow `timeout_override` option for all actions. This allows for different
timeout values per action.
* Improve API by giving each action its own `do_dry_run()` method.
**General**
* Updated use documentation for Elastic main site.
* Include example files for ``--config`` and ``--actions``.
4.0.0b2 (16 June 2016)
----------------------
**Second beta release of the 4.0 branch**
**New Feature**
* An empty index or snapshot list no longer results in an error if you set
``ignore_empty_list`` to `True`. If `True` it will still log that the
action was not performed, but will continue to the next action. If 'False'
it will log an ERROR and exit with code 1. (untergeek)
4.0.0b1 (13 June 2016)
----------------------
**First beta release of the 4.0 branch!**
The release notes will be rehashing the new features in 4.0, rather than the
bug fixes done during the alphas.
**Breaking Changes**
* New and improved API!
* Command-line changes. No more command-line args, except for ``--config``,
``--actions``, and ``--dry-run``:
- ``--config`` points to a YAML client and logging configuration file.
The default location is ``~/.curator/curator.yml``
- ``--actions`` arg points to a YAML action configuration file
- ``--dry-run`` will simulate the action(s) which would have taken place,
but not actually make any changes to the cluster or its indices.
**New Features**
* Snapshot restore is here!
* YAML configuration files. Now a single file can define an entire batch of
commands, each with their own filters, to be performed in sequence.
* Sort by index age not only by index name (as with previous versions of
Curator), but also by index `creation_date`, or by calculations from the
Field Stats API on a timestamp field.
* Atomically add/remove indices from aliases! This is possible by way of the
new `IndexList` class and YAML configuration files.
* State of indices pulled and stored in `IndexList` instance. Fewer API
calls required to serially test for open/close, `size_in_bytes`, etc.
* Filter by space now allows sorting by age!
* Experimental! Use AWS IAM credentials to sign requests to Elasticsearch.
This requires the end user to *manually* install the `requests_aws4auth`
python module.
* Optionally delete aliases from indices before closing.
**API**
* Updated API documentation
* Class: `IndexList`. This pulls all indices at instantiation, and you apply
filters, which are class methods. You can iterate over as many filters as
you like, in fact, due to the YAML config file.
* Class: `SnapshotList`. This pulls all snapshots from the given repository
at instantiation, and you apply filters, which are class methods. You can
iterate over as many filters as you like, in fact, due to the YAML config
file.
* Add `wait_for_completion` to Allocation and Replicas actions. These will
use the client timeout, as set by default or `timeout_override`, to
determine how long to wait for timeout. These are handled in batches of
indices for now.
* Allow `timeout_override` option for all actions. This allows for different
timeout values per action.
* Improve API by giving each action its own `do_dry_run()` method.
**General**
* Updated use documentation for Elastic main site.
* Include example files for ``--config`` and ``--actions``.
4.0.0a10 (10 June 2016)
-----------------------
**New Features**
* Snapshot restore is here!
* Optionally delete aliases from indices before closing.
Fixes #644 (untergeek)
**General**
* Add `wait_for_completion` to Allocation and Replicas actions. These will
use the client timeout, as set by default or `timeout_override`, to
determine how long to wait for timeout. These are handled in batches of
indices for now.
* Allow `timeout_override` option for all actions. This allows for different
timeout values per action.
**Bug Fixes**
* Disallow use of `master_only` if multiple hosts are used. Fixes #615
(untergeek)
* Fix an issue where arguments weren't being properly passed and populated.
* ForceMerge replaced Optimize in ES 2.1.0.
* Fix prune_nones to work with Python 2.6. Fixes #619 (untergeek)
* Fix TimestringSearch to work with Python 2.6. Fixes #622 (untergeek)
* Add language classifiers to ``setup.py``. Fixes #640 (untergeek)
* Changed references to readthedocs.org to be readthedocs.io.
4.0.0a9 (27 Apr 2016)
---------------------
**General**
* Changed `create_index` API to use kwarg `extra_settings` instead of `body`
* Normalized Alias action to use `name` instead of `alias`. This simplifies
documentation by reducing the number of option elements.
* Streamlined some code
* Made `exclude` a filter element setting for all filters. Updated all
examples to show this.
* Improved documentation
**New Features**
* Alias action can now accept `extra_settings` to allow adding filters,
and/or routing.
4.0.0a8 (26 Apr 2016)
---------------------
**Bug Fixes**
* Fix to use `optimize` with versions of Elasticsearch < 5.0
* Fix missing setting in testvars
4.0.0a7 (25 Apr 2016)
---------------------
**Bug Fixes**
* Fix AWS4Auth error.
4.0.0a6 (25 Apr 2016)
---------------------
**General**
* Documentation updates.
* Improve API by giving each action its own `do_dry_run()` method.
**Bug Fixes**
* Do not escape characters other than ``.`` and ``-`` in timestrings. Fixes
#602 (untergeek)
** New Features**
* Added `CreateIndex` action.
4.0.0a4 (21 Apr 2016)
---------------------
**Bug Fixes**
* Require `pyyaml` 3.10 or better.
* In the case that no `options` are in an action, apply the defaults.
4.0.0a3 (21 Apr 2016)
---------------------
It's time for Curator 4.0 alpha!
**Breaking Changes**
* New API! (again?!)
* Command-line changes. No more command-line args, except for ``--config``,
``--actions``, and ``--dry-run``:
- ``--config`` points to a YAML client and logging configuration file.
The default location is ``~/.curator/curator.yml``
- ``--actions`` arg points to a YAML action configuration file
- ``--dry-run`` will simulate the action(s) which would have taken place,
but not actually make any changes to the cluster or its indices.
**General**
* Updated API documentation
* Updated use documentation for Elastic main site.
* Include example files for ``--config`` and ``--actions``.
**New Features**
* Sort by index age not only by index name (as with previous versions of
Curator), but also by index `creation_date`, or by calculations from the
Field Stats API on a timestamp field.
* Class: `IndexList`. This pulls all indices at instantiation, and you apply
filters, which are class methods. You can iterate over as many filters as
you like, in fact, due to the YAML config file.
* Class: `SnapshotList`. This pulls all snapshots from the given repository
at instantiation, and you apply filters, which are class methods. You can
iterate over as many filters as you like, in fact, due to the YAML config
file.
* YAML configuration files. Now a single file can define an entire batch of
commands, each with their own filters, to be performed in sequence.
* Atomically add/remove indices from aliases! This is possible by way of the
new `IndexList` class and YAML configuration files.
* State of indices pulled and stored in `IndexList` instance. Fewer API
calls required to serially test for open/close, `size_in_bytes`, etc.
* Filter by space now allows sorting by age!
* Experimental! Use AWS IAM credentials to sign requests to Elasticsearch.
This requires the end user to *manually* install the `requests_aws4auth`
python module.
3.5.1 (21 March 2016)
---------------------
**Bug fixes**
* Add more logging information to snapshot delete method #582 (untergeek)
* Improve default timeout, logging, and exception handling for `seal` command
#583 (untergeek)
* Fix use of default snapshot name. #584 (untergeek)
3.5.0 (16 March 2016)
---------------------
**General**
* Add support for the `--client-cert` and `--client-key` command line
parameters and client_cert and client_key parameters to the get_client()
call. #520 (richm)
**Bug fixes**
* Disallow users from creating snapshots with upper-case letters, which is
not permitted by Elasticsearch. #562 (untergeek)
* Remove `print()` command from ``setup.py`` as it causes issues with
command-line retrieval of ``--url``, etc. #568 (thib-ack)
* Remove unnecessary argument from `build_filter()` #530 (zzugg)
* Allow day of year filter to be made up with 1, 2 or 3 digits
#578 (petitout)
3.4.1 (10 February 2016)
------------------------
**General**
* Update license copyright to 2016
* Use slim python version with Docker #527 (xaka)
* Changed ``--master-only`` exit code to 0 when connected to non-master node
#540 (wkruse)
* Add ``cx_Freeze`` capability to ``setup.py``, plus a ``binary_release.py``
script to simplify binary package creation. #554 (untergeek)
* Set Elastic as author. #555 (untergeek)
* Put repository creation methods into API and document them. Requested in
#550 (untergeek)
**Bug fixes**
* Fix sphinx documentation build error #506 (hydrapolic)
* Ensure snapshots are found before iterating #507 (garyelephant)
* Fix a doc inconsistency #509 (pmoust)
* Fix a typo in `show` documentation #513 (pbamba)
* Default to trying the cluster state for checking whether indices are
closed, and then fall back to using the _cat API (for Amazon ES instances).
#519 (untergeek)
* Improve logging to show time delay between optimize runs, if selected.
#525 (untergeek)
* Allow elasticsearch-py module versions through 2.3.0 (a presumption at this
point) #524 (untergeek)
* Improve logging in snapshot api method to reveal when a repository appears
to be missing. Reported in #551 (untergeek)
* Test that ``--timestring`` has the correct variable for ``--time-unit``.
Reported in #544 (untergeek)
* Allocation will exit with exit_code 0 now when there are no indices to work
on. Reported in #531 (untergeek)
3.4.0 (28 October 2015)
-----------------------
**General**
* API change in elasticsearch-py 1.7.0 prevented alias operations. Fixed in
#486 (HonzaKral)
* During index selection you can now select only closed indices with
``--closed-only``. Does not impact ``--all-indices`` Reported in #476.
Fixed in #487 (Basster)
* API Changes in Elasticsearch 2.0.0 required some refactoring. All tests
pass for ES versions 1.0.3 through 2.0.0-rc1. Fixed in #488 (untergeek)
* es_repo_mgr now has access to the same SSL options from #462.
#489 (untergeek)
* Logging improvements requested in #475. (untergeek)
* Added ``--quiet`` flag. #494 (untergeek)
* Fixed ``index_closed`` to work with AWS Elasticsearch. #499 (univerio)
* Acceptable versions of Elasticsearch-py module are 1.8.0 up to
2.1.0 (untergeek)
3.3.0 (31 August 2015)
----------------------
**Announcement**
* Curator is tested in Jenkins. Each commit to the master branch is tested
with both Python versions 2.7.6 and 3.4.0 against each of the following
Elasticsearch versions:
* 1.7_nightly
* 1.6_nightly
* 1.7.0
* 1.6.1
* 1.5.1
* 1.4.4
* 1.3.9
* 1.2.4
* 1.1.2
* 1.0.3
* If you are using a version different from this, your results may vary.
**General**
* Allocation type can now also be ``include`` or ``exclude``, in addition to
the existing default ``require`` type. Add ``--type`` to the allocation
command to specify the type. #443 (steffo)
* Bump elasticsearch python module dependency to 1.6.0+ to enable
synced_flush API call. Reported in #447 (untergeek)
* Add SSL features, ``--ssl-no-validate`` and ``certificate`` to provide
other ways to validate SSL connections to Elasticsearch. #436 (untergeek)
**Bug fixes**
* Delete by space was only reporting space used by primary shards. Fixed to
show all space consumed. Reported in #455 (untergeek)
* Update exit codes and messages for snapshot selection. Reported in
#452 (untergeek)
* Fix potential int/float casting issues. Reported in #465 (untergeek)
3.2.3 (16 July 2015)
--------------------
**Bug fix**
* In order to address customer and community issues with bulk deletes, the
``master_timeout`` is now invoked for delete operations. This should
address 503s with 30s timeouts in the debug log, even when ``--timeout`` is
set to a much higher value. The ``master_timeout`` is tied to the
``--timeout`` flag value, but will not exceed 300 seconds. #420 (untergeek)
**General**
* Mixing it up a bit here by putting `General` second! The only other
changes are that logging has been improved for deletes so you won't need to
have the ``--debug`` flag to see if you have error codes >= 400, and some
code documentation improvements.
3.2.2 (13 July 2015)
--------------------
**General**
* This is a very minor change. The ``mock`` library recently removed support
for Python 2.6. As many Curator users are using RHEL/CentOS 6, which is
pinned to Python 2.6, this requires the mock version referenced by Curator
to also be pinned to a supported version (``mock==1.0.1``).
3.2.1 (10 July 2015)
--------------------
**General**
* Added delete verification & retry (fixed at 3x) to potentially cover an
edge case in #420 (untergeek)
* Since GitHub allows rST (reStructuredText) README documents, and that's
what PyPI wants also, the README has been rebuilt in rST. (untergeek)
**Bug fixes**
* If closing indices with ES 1.6+, and all indices are closed, ensure that
the seal command does not try to seal all indices. Reported in
#426 (untergeek)
* Capture AttributeError when sealing indices if a non-TransportError occurs.
Reported in #429 (untergeek)
3.2.0 (25 June 2015)
--------------------
**New!**
* Added support to manually seal, or perform a [synced flush](http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-synced-flush.html)
on indices with the ``seal`` command. #394 (untergeek)
* Added *experimental* support for SSL certificate validation. In order for
this to work, you must install the ``certifi`` python module:
``pip install certifi``
This feature *should* automatically work if the ``certifi`` module is
installed. Please report any issues.
**General**
* Changed logging to go to stdout rather than stderr. Reopened #121 and
figured they were right. This is better. (untergeek)
* Exit code 99 was unpopular. It has been removed. Reported in #371 and #391
(untergeek)
* Add ``--skip-repo-validation`` flag for snapshots. Do not validate write
access to repository on all cluster nodes before proceeding. Useful for
shared filesystems where intermittent timeouts can affect validation, but
won't likely affect snapshot success. Requested in #396 (untergeek)
* An alias no longer needs to be pre-existent in order to use the alias
command. #317 (untergeek)
* es_repo_mgr now passes through upstream errors in the event a repository
fails to be created. Requested in #405 (untergeek)
**Bug fixes**
* In rare cases, ``*`` wildcard would not expand. Replaced with _all.
Reported in #399 (untergeek)
* Beginning with Elasticsearch 1.6, closed indices cannot have their replica
count altered. Attempting to do so results in this error:
``org.elasticsearch.ElasticsearchIllegalArgumentException: Can't update
[index.number_of_replicas] on closed indices [[test_index]] - can leave
index in an unopenable state``
As a result, the ``change_replicas`` method has been updated to prune closed
indices. This change will apply to all versions of Elasticsearch.
Reported in #400 (untergeek)
* Fixed es_repo_mgr repository creation verification error. Reported in #389
(untergeek)
3.1.0 (21 May 2015)
-------------------
**General**
* If ``wait_for_completion`` is true, snapshot success is now tested and
logged. Reported in #253 (untergeek)
* Log & return false if a snapshot is already in progress (untergeek)
* Logs individual deletes per index, even though they happen in batch mode.
Also log individual snapshot deletions. Reported in #372 (untergeek)
* Moved ``chunk_index_list`` from cli to api utils as it's now also used by
``filter.py``
* Added a warning and 10 second timer countdown if you use ``--timestring``
to filter indices, but do not use ``--older-than`` or ``--newer-than`` in
conjunction with it. This is to address #348, which behavior isn't a bug,
but prevents accidental action against all of your time-series indices. The
warning and timer are not displayed for ``show`` and ``--dry-run``
operations.
* Added tests for ``es_repo_mgr`` in #350
* Doc fixes
**Bug fixes**
* delete-by-space needed the same fix used for #245. Fixed in #353 (untergeek)
* Increase default client timeout for ``es_repo_mgr`` as node discovery and
availability checks for S3 repositories can take a bit. Fixed in
#352 (untergeek)
* If an index is closed, indicate in ``show`` and ``--dry-run`` output.
Reported in #327. (untergeek)
* Fix issue where CLI parameters were not being passed to the ``es_repo_mgr``
create sub-command.
Reported in #337. (feltnerm)
3.0.3 (27 Mar 2015)
-------------------
**Announcement**
This is a bug fix release. #319 and #320 are affecting a few users, so this
release is being expedited.
Test count: 228
Code coverage: 99%
**General**
* Documentation for the CLI converted to Asciidoc and moved to
http://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html
* Improved logging, and refactored a few methods to help with this.
* Dry-run output is now more like v2, with the index or snapshot in the log
line, along with the command. Several tests needed refactoring with this
change, along with a bit of documentation.
**Bug fixes**
* Fix links to repository in setup.py. Reported in #318 (untergeek)
* No more ``--delay`` with optimized indices. Reported in #319 (untergeek)
* ``--request_timeout`` not working as expected. Reinstate the version 2
timeout override feature to prevent default timeouts for ``optimize`` and
``snapshot`` operations. Reported in #320 (untergeek)
* Reduce index count to 200 for
test.integration.test_cli_commands.TestCLISnapshot.test_cli_snapshot_huge_list
in order to reduce or eliminate Jenkins CI test timeouts.
Reported in #324 (untergeek)
* ``--dry-run`` no longer calls ``show``, but will show output in the log, as
in v2. This was a recurring complaint. See #328 (untergeek)
3.0.2 (23 Mar 2015)
-------------------
**Announcement**
This is a bug fix release. #307 and #309 were big enough to warrant an
expedited release.
**Bug fixes**
* Purge unneeded constants, and clean up config options for snapshot. Reported
in #303 (untergeek)
* Don't split large index list if performing snapshots. Reported in
#307 (untergeek)
* Act correctly if a zero value for `--older-than` or `--newer-than` is
provided. #309 (untergeek)
3.0.1 (16 Mar 2015)
-------------------
**Announcement**
The ``regex_iterate`` method was horribly named. It has been renamed to
``apply_filter``. Methods have been added to allow API users to build a
filtered list of indices similarly to how the CLI does. This was an oversight.
Props to @SegFaultAX for pointing this out.
**General**
* In conjunction with the rebrand to Elastic, URLs and documentation were
updated.
* Renamed horribly named `regex_iterate` method to `apply_filter`
#298 (untergeek)
* Added `build_filter` method to mimic CLI calls. #298 (untergeek)
* Added Examples page in the API documentation. #298 (untergeek)
**Bug fixes**
* Refactored to show `--dry-run` info for `--disk-space` calls. Reported in
#290 (untergeek)
* Added list chunking so acting on huge lists of indices won't result in a URL
bigger than 4096 bytes (Elasticsearch's default limit.) Reported in
https://github.com/elastic/curator/issues/245#issuecomment-77916081
* Refactored `to_csv()` method to be simpler.
* Added and removed tests according to changes. Code coverage still at 99%
3.0.0 (9 March 2015)
--------------------
**Release Notes**
The full release of Curator 3.0 is out! Check out all of the changes here!
*Note:* This release is _not_ reverse compatible with any previous version.
Because 3.0 is a major point release, there have been some major changes to
both the API as well as the CLI arguments and structure.
Be sure to read the updated command-line specific docs in the
[wiki](https://github.com/elasticsearch/curator/wiki) and change your
command-line arguments accordingly.
The API docs are still at http://curator.readthedocs.io. Be sure to read the
latest docs, or select the docs for 3.0.0.
**General**
* **Breaking changes to the API.** Because this is a major point revision,
changes to the API have been made which are non-reverse compatible. Before
upgrading, be sure to update your scripts and test them thoroughly.
* **Python 3 support** Somewhere along the line, Curator would no longer work
with curator. All tests now pass for both Python2 and Python3, with 99%
code coverage in both environments.
* **New CLI library.** Using Click now. http://click.pocoo.org/3/
This change is especially important as it allows very easy CLI integration
testing.
* **Pipelined filtering!** You can now use ``--older-than`` & ``--newer-than``
in the same command! You can also provide your own regex via the
``--regex`` parameter. You can use multiple instances of the ``--exclude``
flag.
* **Manually include indices!** With the ``--index`` paramter, you can add an
index to the working list. You can provide multiple instances of the
``--index`` parameter as well!
* **Tests!** So many tests now. Test coverage of the API methods is at 100%
now, and at 99% for the CLI methods. This doesn't mean that all of the
tests are perfect, or that I haven't missed some scenarios. It does mean,
however, that it will be much easier to write tests if something turns up
missed. It also means that any new functionality will now need to have
tests.
* **Iteration changes** Methods now only iterate through each index when
appropriate! In fact, the only commands that iterate are `alias` and
`optimize`. The `bloom` command will iterate, but only if you have added
the `--delay` flag with a value greater than zero.
* **Improved packaging!** Methods have been moved into categories of
``api`` and ``cli``, and further broken out into individual modules to help
them be easier to find and read.
* Check for allocation before potentially re-applying an allocation rule.
#273 (ferki)
* Assigning replica count and routing allocation rules _can_ be done to closed
indices. #283 (ferki)
**Bug fixes**
* Don't accidentally delete ``.kibana`` index. #261 (malagoli)
* Fix segment count for empty indices. #265 (untergeek)
* Change bloom filter cutoff Elasticsearch version to 1.4. Reported in #267
(untergeek)
3.0.0rc1 (5 March 2015)
-----------------------
**Release Notes**
RC1 is here! I'm re-releasing the Changes from all betas here, minus the
intra-beta code fixes. Barring any show stoppers, the official release will be
soon.
**General**
* **Breaking changes to the API.** Because this is a major point revision,
changes to the API have been made which are non-reverse compatible. Before
upgrading, be sure to update your scripts and test them thoroughly.
* **Python 3 support** Somewhere along the line, Curator would no longer work
with curator. All tests now pass for both Python2 and Python3, with 99%
code coverage in both environments.
* **New CLI library.** Using Click now. http://click.pocoo.org/3/
This change is especially important as it allows very easy CLI integration
testing.
* **Pipelined filtering!** You can now use ``--older-than`` & ``--newer-than``
in the same command! You can also provide your own regex via the
``--regex`` parameter. You can use multiple instances of the ``--exclude``
flag.
* **Manually include indices!** With the ``--index`` paramter, you can add an
index to the working list. You can provide multiple instances of the
``--index`` parameter as well!
* **Tests!** So many tests now. Test coverage of the API methods is at 100%
now, and at 99% for the CLI methods. This doesn't mean that all of the
tests are perfect, or that I haven't missed some scenarios. It does mean,
however, that it will be much easier to write tests if something turns up
missed. It also means that any new functionality will now need to have
tests.
* Methods now only iterate through each index when appropriate!
* Improved packaging! Hopefully the ``entry_point`` issues some users have
had will be addressed by this. Methods have been moved into categories of
``api`` and ``cli``, and further broken out into individual modules to help
them be easier to find and read.
* Check for allocation before potentially re-applying an allocation rule.
#273 (ferki)
* Assigning replica count and routing allocation rules _can_ be done to closed
indices. #283 (ferki)
**Bug fixes**
* Don't accidentally delete ``.kibana`` index. #261 (malagoli)
* Fix segment count for empty indices. #265 (untergeek)
* Change bloom filter cutoff Elasticsearch version to 1.4. Reported in #267
(untergeek)
3.0.0b4 (5 March 2015)
----------------------
**Notes**
Integration testing! Because I finally figured out how to use the Click
Testing API, I now have a good collection of command-line simulations,
complete with a real back-end. This testing found a few bugs (this is why
testing exists, right?), and fixed a few of them.
**Bug fixes**
* HUGE! `curator show snapshots` would _delete_ snapshots. This is fixed.
* Return values are now being sent from the commands.
* `scripttest` is no longer necessary (click.Test works!)
* Calling `get_snapshot` without a snapshot name returns all snapshots
3.0.0b3 (4 March 2015)
----------------------
**Bug fixes**
* setup.py was lacking the new packages "curator.api" and "curator.cli" The
package works now.
* Python3 suggested I had to normalize the beta tag to just b3, so that's also
changed.
* Cleaned out superfluous imports and logger references from the __init__.py
files.
3.0.0-beta2 (3 March 2015)
--------------------------
**Bug fixes**
* Python3 issues resolved. Tests now pass on both Python2 and Python3
3.0.0-beta1 (3 March 2015)
--------------------------
**General**
* **Breaking changes to the API.** Because this is a major point revision,
changes to the API have been made which are non-reverse compatible. Before
upgrading, be sure to update your scripts and test them thoroughly.
* **New CLI library.** Using Click now. http://click.pocoo.org/3/
* **Pipelined filtering!** You can now use ``--older-than`` & ``--newer-than``
in the same command! You can also provide your own regex via the
``--regex`` parameter. You can use multiple instances of the ``--exclude``
flag.
* **Manually include indices!** With the ``--index`` paramter, you can add an
index to the working list. You can provide multiple instances of the
``--index`` parameter as well!
* **Tests!** So many tests now. Unit test coverage of the API methods is at
100% now. This doesn't mean that all of the tests are perfect, or that I
haven't missed some scenarios. It does mean that any new functionality will
need to also have tests, now.
* Methods now only iterate through each index when appropriate!
* Improved packaging! Hopefully the ``entry_point`` issues some users have
had will be addressed by this. Methods have been moved into categories of
``api`` and ``cli``, and further broken out into individual modules to help
them be easier to find and read.
* Check for allocation before potentially re-applying an allocation rule.
#273 (ferki)
**Bug fixes**
* Don't accidentally delete ``.kibana`` index. #261 (malagoli)
* Fix segment count for empty indices. #265 (untergeek)
* Change bloom filter cutoff Elasticsearch version to 1.4. Reported in
#267 (untergeek)
2.1.2 (22 January 2015)
-----------------------
**Bug fixes**
* Do not try to set replica count if count matches provided argument.
#247 (bobrik)
* Fix JSON logging (Logstash format). #250 (magnusbaeck)
* Fix bug in `filter_by_space()` which would match all indices if the provided
patterns found no matches. Reported in #254 (untergeek)
2.1.1 (30 December 2014)
------------------------
**Bug fixes**
* Renamed unnecessarily redundant ``--replicas`` to ``--count`` in args for
``curator_script.py``
2.1.0 (30 December 2014)
------------------------
**General**
* Snapshot name now appears in log output or STDOUT. #178 (untergeek)
* Replicas! You can now change the replica count of indices. Requested in #175
(untergeek)
* Delay option added to Bloom Filter functionality. #206 (untergeek)
* Add 2-digit years as acceptable pattern (y vs. Y). Reported in #209
(untergeek)
* Add Docker container definition #226 (christianvozar)
* Allow the use of 0 with --older-than, --most-recent and
--delete-older-than. See #208. #211 (bobrik)
**Bug fixes**
* Edge case where 1.4.0.Beta1-SNAPSHOT would break version check. Reported in
#183 (untergeek)
* Typo fixed. #193 (ferki)
* Type fixed. #204 (gheppner)
* Shows proper error in the event of concurrent snapshots. #177 (untergeek)
* Fixes erroneous index display of ``_, a, l, l`` when --all-indices selected.
Reported in #222 (untergeek)
* Use json.dumps() to escape exceptions. Reported in #210 (untergeek)
* Check if index is closed before adding to alias. Reported in #214 (bt5e)
* No longer force-install argparse if pre-installed #216 (whyscream)
* Bloom filters have been removed from Elasticsearch 1.5.0. Update methods
and tests to act accordingly. #233 (untergeek)
2.0.2 (8 October 2014)
----------------------
**Bug fixes**
* Snapshot name not displayed in log or STDOUT #185 (untergeek)
* Variable name collision in delete_snapshot() #186 (untergeek)
2.0.1 (1 October 2014)
----------------------
**Bug fix**
* Override default timeout when snapshotting --all-indices #179 (untergeek)
2.0.0 (25 September 2014)
-------------------------
**General**
* New! Separation of Elasticsearch Curator Python API and
curator_script.py (untergeek)
* New! ``--delay`` after optimize to allow cluster to quiesce #131 (untergeek)
* New! ``--suffix`` option in addition to ``--prefix`` #136 (untergeek)
* New! Support for wildcards in prefix & suffix #136 (untergeek)
* Complete refactor of snapshots. Now supporting incrementals! (untergeek)
**Bug fix**
* Incorrect error msg if no indices sent to create_snapshot (untergeek)
* Correct for API change coming in ES 1.4 #168 (untergeek)
* Missing ``"`` in Logstash log format #143 (cassianoleal)
* Change non-master node test to exit code 0, log as ``INFO``.
#145 (untergeek)
* `months` option missing from validate_timestring() (untergeek)
1.2.2 (29 July 2014)
--------------------
**Bug fix**
* Updated ``README.md`` to briefly explain what curator does #117 (untergeek)
* Fixed ``es_repo_mgr`` logging whitelist #119 (untergeek)
* Fixed absent ``months`` time-unit #120 (untergeek)
* Filter out ``.marvel-kibana`` when prefix is ``.marvel-`` #120 (untergeek)
* Clean up arg parsing code where redundancy exists #123 (untergeek)
* Properly divide debug from non-debug logging #125 (untergeek)
* Fixed ``show`` command bug caused by changes to command structure
#126 (michaelweiser)
1.2.1 (24 July 2014)
--------------------
**Bug fix**
* Fixed the new logging when called by ``curator`` entrypoint.
1.2.0 (24 July 2014)
--------------------
**General**
* New! Allow user-specified date patterns: ``--timestring`` #111 (untergeek)
* New! Curate weekly indices (must use week of year) #111 (untergeek)
* New! Log output in logstash format ``--logformat logstash`` #111 (untergeek)
* Updated! Cleaner default logs (debug still shows everything) (untergeek)
* Improved! Dry runs are more visible in log output (untergeek)
Errata
* The ``--separator`` option was removed in lieu of user-specified date
patterns.
* Default ``--timestring`` for days: ``%Y.%m.%d`` (Same as before)
* Default ``--timestring`` for hours: ``%Y.%m.%d.%H`` (Same as before)
* Default ``--timestring`` for weeks: ``%Y.%W``
1.1.3 (18 July 2014)
--------------------
**Bug fix**
* Prefix not passed in ``get_object_list()`` #106 (untergeek)
* Use ``os.devnull`` instead of ``/dev/null`` for Windows #102 (untergeek)
* The http auth feature was erroneously omitted #100 (bbuchacher)
1.1.2 (13 June 2014)
--------------------
**Bug fix**
* This was a showstopper bug for anyone using RHEL/CentOS with a
Python 2.6 dependency for yum
* Python 2.6 does not like format calls without an index. #96 via #95
(untergeek)
* We won't talk about what happened to 1.1.1. No really. I hate git today :(
1.1.0 (12 June 2014)
--------------------
**General**
* Updated! New command structure
* New! Snapshot to fs or s3 #82 (untergeek)
* New! Add/Remove indices to alias #82 via #86 (cschellenger)
* New! ``--exclude-pattern`` #80 (ekamil)
* New! (sort of) Restored ``--log-level`` support #73 (xavier-calland)
* New! show command-line options #82 via #68 (untergeek)
* New! Shard Allocation Routing #82 via #62 (nickethier)
**Bug fix**
* Fix ``--max_num_segments`` not being passed correctly #74 (untergeek)
* Change ``BUILD_NUMBER`` to ``CURATOR_BUILD_NUMBER`` in ``setup.py``
#60 (mohabusama)
* Fix off-by-one error in time calculations #66 (untergeek)
* Fix testing with python3 #92 (untergeek)
Errata
* Removed ``optparse`` compatibility. Now requires ``argparse``.
1.0.0 (25 Mar 2014)
-------------------
**General**
* compatible with ``elasticsearch-py`` 1.0 and Elasticsearch 1.0 (honzakral)
* Lots of tests! (honzakral)
* Streamline code for 1.0 ES versions (honzakral)
**Bug fix**
* Fix ``find_expired_indices()`` to not skip closed indices (honzakral)
0.6.2 (18 Feb 2014)
-------------------
**General**
* Documentation fixes #38 (dharrigan)
* Add support for HTTPS URI scheme and ``optparse`` compatibility for Python
2.6 (gelim)
* Add elasticsearch module version checking for future compatibility checks
(untergeek)
0.6.1 (08 Feb 2014)
-------------------
**General**
* Added tarball versioning to ``setup.py`` (untergeek)
**Bug fix**
* Fix ``long_description`` by including ``README.md`` in ``MANIFEST.in``
(untergeek)
* Incorrect version number in ``curator.py`` (untergeek)
0.6.0 (08 Feb 2014)
-------------------
**General**
* Restructured repository to a be a proper python package. (arieb)
* Added ``setup.py`` file. (arieb)
* Removed the deprecated file ``logstash_index_cleaner.py`` (arieb)
* Updated ``README.md`` to fit the new package, most importantly the usage
and installation. (arieb)
* Fixes and package push to PyPI (untergeek)
0.5.2 (26 Jan 2014)
-------------------
**General**
* Fix boolean logic determining hours or days for time selection (untergeek)
0.5.1 (20 Jan 2014)
-------------------
**General**
* Fix ``can_bloom`` to compare numbers (HonzaKral)
* Switched ``find_expired_indices()`` to use ``datetime`` and ``timedelta``
* Do not try and catch unrecoverable exceptions. (HonzaKral)
* Future proofing the use of the elasticsearch client (i.e. work with version
1.0+ of Elasticsearch) (HonzaKral)
Needs more testing, but should work.
* Add tests for these scenarios (HonzaKral)
0.5.0 (17 Jan 2014)
-------------------
**General**
* Deprecated ``logstash_index_cleaner.py``
Use new ``curator.py`` instead (untergeek)
* new script change: ``curator.py`` (untergeek)
* new add index optimization (Lucene forceMerge) to reduce segments
and therefore memory usage. (untergeek)
* update refactor of args and several functions to streamline operation
and make it more readable (untergeek)
* update refactor further to clean up and allow immediate (and future)
portability (HonzaKral)
0.4.0
-----
**General**
* First version logged in ``CHANGELOG``
* new ``--disable-bloom-days`` feature requires 0.90.9+
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-codec.html#bloom-postings
This can save a lot of heap space on cold indexes (i.e. not actively
indexing documents)
|