blob: e96b023ca7216b607a147fee9ce0b996814175c5 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Upgrading to Airflow 2.0+ &mdash; Airflow Documentation</title>
<link rel="stylesheet" href="_static/_gen/css/main.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="_static/_gen/css/main-custom.min.css" />
<link rel="stylesheet" type="text/css" href="_static/graphviz.css" />
<link rel="shortcut icon" href="_static/pin_32.png"/>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Upgrade Check Script" href="upgrade-check.html" />
<link rel="prev" title="Installation" href="installation.html" />
<script type="application/javascript">
var doNotTrack = false;
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-140539454-1', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
</head><body class="td-section">
<header>
<nav class="js-navbar-scroll navbar">
<div class="navbar__icon-container">
<a href="/">
<svg xmlns="http://www.w3.org/2000/svg" width="155.314" height="60" viewBox="0 0 155.314 60">
<defs>
<clipPath id="clip-path">
<path id="Rectangle_1" d="M0 0h155.314v60H0z" fill="none" data-name="Rectangle 1"></path>
</clipPath>
</defs>
<g id="logo" transform="translate(-1305 -780.355)">
<g id="Group_2" clip-path="url(#clip-path)" data-name="Group 2" transform="translate(1305 780.355)">
<g id="Group_1" data-name="Group 1" transform="translate(.486 .486)">
<path id="Path_1" d="M1307.562 880.867l28.187-28.893a.521.521 0 0 0 .063-.666c-1.714-2.393-4.877-2.808-6.049-4.416-3.472-4.763-4.353-7.459-5.845-7.292a.456.456 0 0 0-.271.143l-10.182 10.438c-5.858 6-6.7 19.225-6.852 30.3a.552.552 0 0 0 .949.386z" fill="#017cee" data-name="Path 1" transform="translate(-1306.613 -822.232)"></path>
<path id="Path_2" d="M1405.512 908.489l-28.893-28.189a.521.521 0 0 0-.667-.063c-2.393 1.715-2.808 4.877-4.416 6.049-4.763 3.472-7.459 4.353-7.292 5.845a.456.456 0 0 0 .143.27l10.438 10.182c6 5.858 19.225 6.7 30.3 6.852a.552.552 0 0 0 .387-.946z" fill="#00ad46" data-name="Path 2" transform="translate(-1346.876 -850.567)"></path>
<path id="Path_3" d="M1373.909 902.252c-3.28-3.2-4.8-9.53 1.486-22.583-10.219 4.567-13.8 10.57-12.039 12.289z" fill="#04d659" data-name="Path 3" transform="translate(-1345.96 -850.233)"></path>
<path id="Path_4" d="M1433.132 782.359l-28.186 28.893a.52.52 0 0 0-.063.666c1.715 2.393 4.876 2.808 6.049 4.416 3.472 4.763 4.354 7.459 5.845 7.292a.454.454 0 0 0 .271-.143l10.182-10.438c5.858-6 6.7-19.225 6.852-30.3a.553.553 0 0 0-.95-.386z" fill="#00c7d4" data-name="Path 4" transform="translate(-1375.21 -782.123)"></path>
<path id="Path_5" d="M1426.9 881.155c-3.2 3.28-9.53 4.8-22.584-1.486 4.567 10.219 10.57 13.8 12.289 12.039z" fill="#11e1ee" data-name="Path 5" transform="translate(-1374.875 -850.233)"></path>
<path id="Path_6" d="M1307 782.919l28.893 28.186a.521.521 0 0 0 .666.063c2.393-1.715 2.808-4.877 4.416-6.049 4.763-3.472 7.459-4.353 7.292-5.845a.459.459 0 0 0-.143-.271l-10.438-10.182c-6-5.858-19.225-6.7-30.3-6.852a.552.552 0 0 0-.386.95z" fill="#e43921" data-name="Path 6" transform="translate(-1306.766 -781.97)"></path>
<path id="Path_7" d="M1405.8 804.711c3.28 3.2 4.8 9.53-1.486 22.584 10.219-4.567 13.8-10.571 12.039-12.289z" fill-rule="evenodd" fill="#ff7557" data-name="Path 7" transform="translate(-1374.875 -797.859)"></path>
<path id="Path_8" d="M1329.355 849.266c3.2-3.28 9.53-4.8 22.584 1.486-4.567-10.219-10.57-13.8-12.289-12.039z" fill="#0cb6ff" data-name="Path 8" transform="translate(-1322.503 -821.316)"></path>
<circle id="Ellipse_1" cx="1.26" cy="1.26" r="1.26" fill="#4a4848" data-name="Ellipse 1" transform="translate(28.18 28.171)"></circle>
<path id="Path_9" d="M1527.558 827.347a.229.229 0 0 1-.223-.223.458.458 0 0 1 .011-.123l2.766-7.214a.346.346 0 0 1 .357-.245h.758a.348.348 0 0 1 .357.245l2.754 7.214.022.123a.228.228 0 0 1-.223.223h-.568a.288.288 0 0 1-.19-.056.352.352 0 0 1-.089-.134l-.613-1.583h-3.657l-.613 1.583a.317.317 0 0 1-.1.134.269.269 0 0 1-.178.056zm4.795-2.732l-1.505-3.958-1.505 3.958zm3.322 4.85a.258.258 0 0 1-.189-.078.241.241 0 0 1-.067-.178v-7.4a.241.241 0 0 1 .067-.178.258.258 0 0 1 .189-.078h.513a.268.268 0 0 1 .256.256v.49a2.118 2.118 0 0 1 1.828-.858 2.092 2.092 0 0 1 1.751.736 3.135 3.135 0 0 1 .636 1.9q.011.122.011.379t-.011.379a3.168 3.168 0 0 1-.636 1.9 2.111 2.111 0 0 1-1.751.736 2.154 2.154 0 0 1-1.806-.836v2.587a.241.241 0 0 1-.067.178.223.223 0 0 1-.179.078zm2.364-2.91a1.324 1.324 0 0 0 1.149-.491 2.266 2.266 0 0 0 .4-1.293q.011-.111.011-.323 0-2.107-1.562-2.107a1.365 1.365 0 0 0-1.159.513 2.111 2.111 0 0 0-.412 1.2l-.012.424.012.435a1.862 1.862 0 0 0 .424 1.149 1.4 1.4 0 0 0 1.148.493zm5.628.9a2.329 2.329 0 0 1-1.015-.223 1.94 1.94 0 0 1-.747-.6 1.487 1.487 0 0 1-.268-.859 1.459 1.459 0 0 1 .6-1.2 3.4 3.4 0 0 1 1.65-.624l1.661-.234v-.323q0-1.137-1.3-1.137a1.4 1.4 0 0 0-.8.212 1.376 1.376 0 0 0-.468.48.305.305 0 0 1-.089.145.18.18 0 0 1-.134.045h-.48a.23.23 0 0 1-.245-.245 1.17 1.17 0 0 1 .245-.6 1.931 1.931 0 0 1 .747-.591 2.7 2.7 0 0 1 1.238-.256 2.351 2.351 0 0 1 1.8.591 2.032 2.032 0 0 1 .547 1.45v3.613a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.513a.233.233 0 0 1-.257-.256v-.479a1.923 1.923 0 0 1-.714.6 2.557 2.557 0 0 1-1.203.237zm.234-.836a1.579 1.579 0 0 0 1.182-.469 1.881 1.881 0 0 0 .468-1.371v-.312l-1.293.19a2.918 2.918 0 0 0-1.193.379.761.761 0 0 0-.4.658.784.784 0 0 0 .368.691 1.585 1.585 0 0 0 .867.237zm6.643.836a2.556 2.556 0 0 1-1.873-.669 2.738 2.738 0 0 1-.714-1.9l-.011-.446.011-.446a2.7 2.7 0 0 1 .714-1.885 2.531 2.531 0 0 1 1.873-.68 2.917 2.917 0 0 1 1.36.29 2.077 2.077 0 0 1 .825.714 1.7 1.7 0 0 1 .3.848.2.2 0 0 1-.067.178.281.281 0 0 1-.19.067h-.535a.265.265 0 0 1-.168-.045.458.458 0 0 1-.111-.178 1.428 1.428 0 0 0-.535-.758 1.516 1.516 0 0 0-.87-.234 1.45 1.45 0 0 0-1.1.435 1.952 1.952 0 0 0-.435 1.3l-.011.4.011.379a1.969 1.969 0 0 0 .435 1.316 1.446 1.446 0 0 0 1.1.424 1.577 1.577 0 0 0 .87-.223 1.493 1.493 0 0 0 .535-.769.458.458 0 0 1 .111-.178.228.228 0 0 1 .168-.056h.535a.258.258 0 0 1 .19.078.2.2 0 0 1 .067.178 1.75 1.75 0 0 1-.3.847 2.078 2.078 0 0 1-.825.714 2.876 2.876 0 0 1-1.361.302zm4.078-.112a.233.233 0 0 1-.257-.256v-7.4a.241.241 0 0 1 .067-.178.259.259 0 0 1 .19-.078h.557a.267.267 0 0 1 .257.256v2.6a2.167 2.167 0 0 1 .758-.624 2.353 2.353 0 0 1 1.082-.223 2.067 2.067 0 0 1 1.661.691 2.642 2.642 0 0 1 .6 1.818v3.144a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.557a.233.233 0 0 1-.256-.256V824a1.775 1.775 0 0 0-.39-1.227 1.387 1.387 0 0 0-1.1-.435 1.481 1.481 0 0 0-1.126.446 1.7 1.7 0 0 0-.412 1.215v3.088a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067zm8.846.112a2.466 2.466 0 0 1-1.84-.7 2.938 2.938 0 0 1-.747-1.94l-.011-.379.011-.368a2.953 2.953 0 0 1 .758-1.918 2.7 2.7 0 0 1 3.735.078 3.114 3.114 0 0 1 .68 2.119v.19a.257.257 0 0 1-.078.189.241.241 0 0 1-.178.067h-3.858v.1a2.11 2.11 0 0 0 .435 1.238 1.332 1.332 0 0 0 1.081.5 1.563 1.563 0 0 0 .836-.2 1.7 1.7 0 0 0 .491-.435.6.6 0 0 1 .145-.156.391.391 0 0 1 .19-.033h.547a.252.252 0 0 1 .167.056.192.192 0 0 1 .067.156.975.975 0 0 1-.312.591 2.51 2.51 0 0 1-.859.6 3.049 3.049 0 0 1-1.26.248zm1.527-3.434v-.033a1.817 1.817 0 0 0-.424-1.249 1.512 1.512 0 0 0-2.23 0 1.883 1.883 0 0 0-.4 1.249v.033z" fill="#51504f" data-name="Path 9" transform="translate(-1460.834 -808.144)"></path>
<path id="Path_10" d="M1527.2 827.081l-.061.061zm-.056-.279l-.08-.031zm2.766-7.214l.08.031zm1.472 0l-.081.029zm2.754 7.214l.084-.015a.064.064 0 0 0 0-.015zm.022.123h.086v-.015zm-.067.156l.06.061zm-.914.011l-.061.061.006.005zm-.089-.134l.081-.027zm-.613-1.583l.08-.031a.086.086 0 0 0-.08-.055zm-3.657 0v-.086a.086.086 0 0 0-.08.055zm-.613 1.583l-.08-.031zm-.1.134l.055.066zm4.047-2.676v.086a.086.086 0 0 0 .08-.116zm-1.505-3.958l.08-.03a.086.086 0 0 0-.16 0zm-1.505 3.958l-.08-.03a.086.086 0 0 0 .08.116zm-1.784 2.646a.128.128 0 0 1-.1-.042l-.122.121a.3.3 0 0 0 .217.092zm-.1-.042a.129.129 0 0 1-.042-.1h-.171a.3.3 0 0 0 .092.217zm-.042-.1a.38.38 0 0 1 .007-.1l-.163-.054a.514.514 0 0 0-.016.15zm.005-.092l2.765-7.214-.16-.061-2.765 7.214zm2.766-7.216a.283.283 0 0 1 .1-.143.3.3 0 0 1 .174-.046v-.172a.47.47 0 0 0-.271.076.453.453 0 0 0-.166.226zm.276-.189h.758v-.172h-.758zm.758 0a.3.3 0 0 1 .175.046.283.283 0 0 1 .1.143l.161-.059a.451.451 0 0 0-.166-.226.47.47 0 0 0-.272-.076zm.277.19l2.754 7.214.16-.061-2.754-7.214zm2.75 7.2l.022.123.169-.031-.022-.123zm.021.107a.13.13 0 0 1-.042.1l.121.121a.3.3 0 0 0 .092-.217zm-.042.1a.13.13 0 0 1-.1.042v.171a.3.3 0 0 0 .217-.092zm-.1.042h-.568v.171h.568zm-.568 0a.206.206 0 0 1-.135-.036l-.11.132a.373.373 0 0 0 .245.076zm-.129-.031a.262.262 0 0 1-.069-.1l-.162.054a.431.431 0 0 0 .11.167zm-.07-.1l-.613-1.584-.16.062.613 1.583zm-.693-1.638h-3.657v.171h3.657zm-3.737.055l-.614 1.584.16.062.613-1.583zm-.615 1.587a.235.235 0 0 1-.075.1l.111.13a.4.4 0 0 0 .126-.172zm-.074.1a.185.185 0 0 1-.124.036v.171a.354.354 0 0 0 .233-.076zm-.124.036h-.569v.171h.569zm4.306-2.677l-1.505-3.958-.16.061 1.505 3.958zm-1.666-3.958l-1.505 3.958.16.061 1.505-3.958zm-1.425 4.075h3.01v-.171h-3.01zm6.143 4.687l-.06.061zm0-7.761l.061.061zm.881 0l-.065.056.01.009zm.078.669h-.086a.086.086 0 0 0 .155.051zm3.579-.123l-.067.053zm.636 1.9h-.086zm0 .758l-.085-.007zm-.636 1.9l.067.054zm-3.557-.1l.068-.052a.086.086 0 0 0-.154.052zm-.067 2.765l-.061-.06zm2.787-3.323l-.069-.051zm.4-1.293l-.085-.008v.005zm-2.709-1.918l-.068-.052zm-.413 1.2h-.086zm-.011.423h-.085zm.011.435h-.086zm.424 1.149l.066-.054zm-1.216 3.315a.173.173 0 0 1-.129-.053l-.121.121a.342.342 0 0 0 .25.1zm-.129-.053a.157.157 0 0 1-.042-.118h-.172a.325.325 0 0 0 .092.239zm-.042-.118v-7.4h-.172v7.4zm0-7.4a.157.157 0 0 1 .042-.118l-.121-.121a.324.324 0 0 0-.092.239zm.042-.118a.173.173 0 0 1 .129-.053v-.172a.342.342 0 0 0-.25.1zm.129-.053h.513v-.172h-.513zm.513 0a.137.137 0 0 1 .113.048l.13-.111a.309.309 0 0 0-.244-.108zm.123.058a.137.137 0 0 1 .048.113h.171a.309.309 0 0 0-.108-.243zm.048.113v.49h.171v-.49zm.155.541a2.033 2.033 0 0 1 1.759-.823v-.171a2.2 2.2 0 0 0-1.9.894zm1.759-.823a2.007 2.007 0 0 1 1.683.7l.135-.106a2.177 2.177 0 0 0-1.818-.768zm1.683.7a3.045 3.045 0 0 1 .617 1.845l.171-.007a3.218 3.218 0 0 0-.654-1.946zm.617 1.85c.007.078.011.2.011.372h.171c0-.171 0-.3-.012-.387zm.011.372c0 .171 0 .294-.011.372l.17.015c.008-.086.012-.216.012-.387zm-.011.376a3.08 3.08 0 0 1-.617 1.846l.134.106a3.25 3.25 0 0 0 .654-1.945zm-.617 1.845a2.025 2.025 0 0 1-1.683.7v.171a2.2 2.2 0 0 0 1.817-.768zm-1.683.7a2.068 2.068 0 0 1-1.739-.8l-.136.1a2.239 2.239 0 0 0 1.874.87zm-1.892-.75v2.587h.172v-2.587zm0 2.587a.156.156 0 0 1-.042.118l.121.121a.325.325 0 0 0 .092-.239zm-.046.123a.138.138 0 0 1-.114.048v.172a.308.308 0 0 0 .244-.108zm-.114.048h-.546v.172h.546zm1.817-2.739a1.408 1.408 0 0 0 1.218-.526l-.138-.1a1.24 1.24 0 0 1-1.079.455zm1.217-.525a2.355 2.355 0 0 0 .419-1.341l-.171-.007a2.182 2.182 0 0 1-.385 1.246zm.418-1.336c.008-.079.012-.19.012-.332h-.172c0 .14 0 .245-.011.315zm.012-.332a2.726 2.726 0 0 0-.407-1.632 1.448 1.448 0 0 0-1.24-.562v.171a1.278 1.278 0 0 1 1.1.492 2.565 2.565 0 0 1 .374 1.53zm-1.647-2.193a1.452 1.452 0 0 0-1.228.547l.136.1a1.282 1.282 0 0 1 1.091-.479zm-1.228.547a2.2 2.2 0 0 0-.43 1.252l.172.008a2.028 2.028 0 0 1 .4-1.157zm-.43 1.254l-.011.424h.171l.011-.424zm-.011.428l.011.435h.172l-.011-.435zm.011.436a1.95 1.95 0 0 0 .443 1.2l.133-.109a1.776 1.776 0 0 1-.4-1.1zm.443 1.2a1.484 1.484 0 0 0 1.214.522v-.171a1.314 1.314 0 0 1-1.082-.459zm5.828 1.117l.037-.077zm-.747-.6l-.07.049zm.335-2.063l.052.068zm1.65-.624l.012.085zm1.661-.234l.012.085a.086.086 0 0 0 .074-.085zm-2.107-1.249l.046.072zm-.468.48l-.075-.042a.083.083 0 0 0-.006.015zm-.089.145l-.054-.067-.007.006zm-.792-.022l-.065.056.009.009zm-.067-.178h-.086zm.245-.6l-.07-.049zm.747-.591l.038.077zm3.033.334l-.063.058zm.468 5.252l.06.061zm-.881 0l-.065.056a.043.043 0 0 0 .009.009zm-.067-.669h.086a.086.086 0 0 0-.156-.048zm-.714.6l-.04-.076zm.223-1.059l-.062-.06zm.468-1.684h.086a.086.086 0 0 0-.1-.085zm-1.293.189l.012.085zm-1.193.379l.046.072zm-.033 1.349l-.047.071zm.635.985a2.241 2.241 0 0 1-.978-.215l-.074.155a2.412 2.412 0 0 0 1.051.231zm-.978-.215a1.859 1.859 0 0 1-.715-.576l-.138.1a2.024 2.024 0 0 0 .779.629zm-.713-.573a1.4 1.4 0 0 1-.253-.81h-.172a1.571 1.571 0 0 0 .283.907zm-.253-.81a1.374 1.374 0 0 1 .569-1.136l-.105-.135a1.544 1.544 0 0 0-.635 1.272zm.569-1.137a3.316 3.316 0 0 1 1.609-.607l-.024-.17a3.481 3.481 0 0 0-1.691.642zm1.609-.607l1.661-.234-.024-.17-1.662.234zm1.735-.319v-.323h-.171v.323zm0-.323a1.156 1.156 0 0 0-.355-.917 1.536 1.536 0 0 0-1.035-.306v.172a1.37 1.37 0 0 1 .922.263.986.986 0 0 1 .3.788zm-1.39-1.223a1.486 1.486 0 0 0-.851.227l.1.142a1.316 1.316 0 0 1 .755-.2zm-.849.226a1.452 1.452 0 0 0-.5.51l.15.084a1.286 1.286 0 0 1 .44-.449zm-.5.524a.226.226 0 0 1-.062.105l.107.134a.391.391 0 0 0 .117-.185zm-.068.112a.1.1 0 0 1-.073.019v.171a.266.266 0 0 0 .194-.07zm-.073.019h-.48v.171h.48zm-.48 0a.18.18 0 0 1-.122-.046l-.112.13a.352.352 0 0 0 .234.087zm-.113-.037a.18.18 0 0 1-.047-.123h-.171a.352.352 0 0 0 .087.234zm-.047-.119a1.1 1.1 0 0 1 .23-.557l-.14-.1a1.253 1.253 0 0 0-.261.648zm.23-.556a1.843 1.843 0 0 1 .715-.564l-.075-.154a2.018 2.018 0 0 0-.78.618zm.716-.564a2.611 2.611 0 0 1 1.2-.247v-.171a2.781 2.781 0 0 0-1.277.266zm1.2-.247a2.268 2.268 0 0 1 1.732.563l.126-.116a2.435 2.435 0 0 0-1.858-.618zm1.733.564a1.945 1.945 0 0 1 .523 1.391h.171a2.117 2.117 0 0 0-.57-1.508zm.523 1.391v3.613h.171v-3.613zm0 3.613a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.157.157 0 0 1-.118.042v.171a.326.326 0 0 0 .239-.092zm-.118.042h-.513v.171h.513zm-.513 0a.2.2 0 0 1-.134-.046l-.111.13a.367.367 0 0 0 .245.088zm-.124-.037a.194.194 0 0 1-.047-.134h-.171a.366.366 0 0 0 .087.245zm-.047-.134v-.479h-.171v.479zm-.156-.528a1.846 1.846 0 0 1-.683.575l.079.152a2.012 2.012 0 0 0 .745-.629zm-.683.575a2.476 2.476 0 0 1-1.153.236v.171a2.644 2.644 0 0 0 1.233-.255zm-.919-.429a1.666 1.666 0 0 0 1.244-.494l-.123-.12a1.493 1.493 0 0 1-1.121.442zm1.244-.494a1.969 1.969 0 0 0 .492-1.431h-.171a1.8 1.8 0 0 1-.444 1.312zm.492-1.431v-.312h-.171v.312zm-.1-.4l-1.293.189.025.17 1.293-.189zm-1.293.189a3 3 0 0 0-1.228.393l.095.143a2.837 2.837 0 0 1 1.158-.365zm-1.227.392a.845.845 0 0 0-.441.73h.172a.676.676 0 0 1 .362-.586zm-.441.73a.869.869 0 0 0 .406.762l.095-.142a.7.7 0 0 1-.33-.62zm.408.764a1.673 1.673 0 0 0 .916.247v-.171a1.5 1.5 0 0 1-.823-.221zm5.686.329l-.061.06zm-.714-1.9h-.085zm-.011-.446h-.085zm.011-.446h-.085zm.714-1.885l.061.061zm3.234-.39l-.04.076zm.825.713l-.073.046zm.3.848h-.086zm-.067.178l.056.065zm-.892.022l.054-.067zm-.112-.178l-.081.029zm-.535-.758l-.048.071zm-1.974.2l-.062-.059zm-.435 1.3h-.086zm-.011.4h-.086zm.011.379h-.086zm.435 1.316l-.062.059zm1.974.2l.046.072zm.535-.769l-.079-.033zm.112-.178l.054.067.007-.006zm.892.022l-.061.06zm.067.178l-.085-.009zm-.3.847l-.072-.046zm-.825.714l-.04-.076zm-1.36.2a2.471 2.471 0 0 1-1.814-.644l-.12.122a2.64 2.64 0 0 0 1.933.694zm-1.813-.643a2.653 2.653 0 0 1-.689-1.839l-.171.006a2.822 2.822 0 0 0 .738 1.952zm-.689-1.838l-.011-.446h-.171l.011.446zm-.011-.442l.011-.446h-.171l-.011.446zm.011-.445a2.611 2.611 0 0 1 .689-1.827l-.122-.121a2.78 2.78 0 0 0-.738 1.942zm.689-1.827a2.447 2.447 0 0 1 1.813-.655v-.171a2.617 2.617 0 0 0-1.934.705zm1.813-.655a2.836 2.836 0 0 1 1.32.28l.079-.152a3 3 0 0 0-1.4-.3zm1.32.28a1.99 1.99 0 0 1 .792.683l.145-.091a2.158 2.158 0 0 0-.858-.744zm.793.685a1.617 1.617 0 0 1 .287.8l.171-.009a1.789 1.789 0 0 0-.315-.89zm.287.809a.11.11 0 0 1-.037.1l.112.13a.281.281 0 0 0 .1-.252zm-.037.1a.2.2 0 0 1-.134.046v.171a.369.369 0 0 0 .246-.088zm-.134.046h-.535v.171h.535zm-.535 0a.184.184 0 0 1-.114-.026l-.107.134a.345.345 0 0 0 .221.064zm-.114-.026a.389.389 0 0 1-.086-.144l-.158.066a.533.533 0 0 0 .137.212zm-.084-.14a1.514 1.514 0 0 0-.57-.8l-.093.144a1.343 1.343 0 0 1 .5.715zm-.568-.8a1.6 1.6 0 0 0-.918-.249v.171a1.435 1.435 0 0 1 .822.219zm-.918-.249a1.535 1.535 0 0 0-1.166.462l.124.118a1.364 1.364 0 0 1 1.042-.408zm-1.166.462a2.036 2.036 0 0 0-.458 1.36l.171.006a1.872 1.872 0 0 1 .411-1.249zm-.458 1.361l-.011.4h.171l.011-.4zm-.011.406l.011.379.171-.005-.011-.379zm.011.38a2.052 2.052 0 0 0 .458 1.371l.124-.118a1.889 1.889 0 0 1-.411-1.26zm.458 1.371a1.533 1.533 0 0 0 1.166.451v-.172a1.363 1.363 0 0 1-1.042-.4zm1.166.451a1.661 1.661 0 0 0 .916-.237l-.093-.144a1.491 1.491 0 0 1-.823.209zm.918-.238a1.576 1.576 0 0 0 .568-.812l-.162-.057a1.409 1.409 0 0 1-.5.727zm.566-.807a.39.39 0 0 1 .086-.144l-.107-.134a.533.533 0 0 0-.137.213zm.093-.151a.144.144 0 0 1 .107-.031v-.171a.31.31 0 0 0-.228.081zm.107-.031h.535v-.171h-.535zm.535 0a.173.173 0 0 1 .129.053l.121-.121a.344.344 0 0 0-.25-.1zm.134.057a.11.11 0 0 1 .037.1l.17.017a.281.281 0 0 0-.1-.252zm.037.109a1.664 1.664 0 0 1-.288.806l.144.092a1.839 1.839 0 0 0 .315-.889zm-.288.806a1.989 1.989 0 0 1-.792.683l.079.152a2.162 2.162 0 0 0 .858-.744zm-.793.684a2.8 2.8 0 0 1-1.32.28v.171a2.96 2.96 0 0 0 1.4-.3zm2.568.187l-.065.056.01.009zm0-7.772l.061.06zm.926 0l-.065.056.009.009zm.078 2.776h-.085a.086.086 0 0 0 .153.053zm.758-.624l.038.077zm2.743.468l-.065.056zm.524 5.151l-.061-.06zm-.925 0l-.065.056.009.009zm-.457-4.5l-.065.056zm-2.23.011l-.062-.059zm-.49 4.493l-.061-.06zm-.736-.019a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.367.367 0 0 0 .087.245zm-.046-.134v-7.4h-.172v7.4zm0-7.4a.156.156 0 0 1 .042-.118l-.121-.121a.326.326 0 0 0-.092.239zm.042-.118a.172.172 0 0 1 .129-.053v-.171a.343.343 0 0 0-.25.1zm.129-.053h.557v-.171h-.557zm.557 0a.137.137 0 0 1 .113.048l.13-.112a.308.308 0 0 0-.244-.108zm.122.057a.137.137 0 0 1 .048.113h.172a.309.309 0 0 0-.108-.243zm.048.113v2.6h.172v-2.6zm.153 2.651a2.076 2.076 0 0 1 .728-.6l-.075-.154a2.248 2.248 0 0 0-.788.649zm.73-.6a2.272 2.272 0 0 1 1.043-.214v-.171a2.438 2.438 0 0 0-1.121.232zm1.043-.214a1.982 1.982 0 0 1 1.6.661l.13-.112a2.152 2.152 0 0 0-1.727-.721zm1.6.663a2.557 2.557 0 0 1 .581 1.761h.171a2.727 2.727 0 0 0-.624-1.874zm.581 1.761v3.144h.171v-3.144zm0 3.144a.173.173 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm-.557 0a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.368.368 0 0 0 .087.245zm-.046-.134V823.8h-.172v3.088zm0-3.088a1.859 1.859 0 0 0-.412-1.284l-.128.114a1.69 1.69 0 0 1 .368 1.169zm-.411-1.283a1.471 1.471 0 0 0-1.169-.464v.171a1.3 1.3 0 0 1 1.039.406zm-1.169-.464a1.566 1.566 0 0 0-1.188.473l.124.118a1.4 1.4 0 0 1 1.064-.419zm-1.188.473a1.779 1.779 0 0 0-.436 1.275h.172a1.609 1.609 0 0 1 .389-1.156zm-.436 1.275v3.088h.172V823.8zm0 3.088a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm6.449-.505l-.062.059zm-.747-1.94h-.086zm-.012-.379h-.085v.005zm.012-.368l-.086-.006zm.758-1.918l-.061-.06zm3.735.078l-.065.056zm.6 2.5l.061.061zm-4.036.067v-.086a.086.086 0 0 0-.086.086zm0 .1h-.086zm.435 1.238l-.068.053zm1.918.3l.045.073zm.491-.435l-.069-.051zm.145-.156l.039.077h.006zm.9.022l-.055.066zm-.245.747l-.064-.057zm-.858.6l.035.078zm.267-3.189v.086a.086.086 0 0 0 .086-.086zm-.424-1.282l-.066.055zm-2.23 0l-.065-.055zm-.4 1.282h-.086a.086.086 0 0 0 .086.086zm1.528 3.349a2.38 2.38 0 0 1-1.779-.677l-.122.12a2.55 2.55 0 0 0 1.9.728zm-1.778-.676a2.86 2.86 0 0 1-.724-1.886l-.171.009a3.027 3.027 0 0 0 .771 1.995zm-.723-1.884l-.011-.379h-.171l.011.379zm-.011-.374l.011-.368-.172-.005-.011.368zm.011-.365a2.871 2.871 0 0 1 .735-1.864l-.124-.118a3.042 3.042 0 0 0-.782 1.971zm.734-1.864a2.331 2.331 0 0 1 1.756-.687v-.171a2.5 2.5 0 0 0-1.879.74zm1.756-.687a2.307 2.307 0 0 1 1.853.762l.13-.112a2.477 2.477 0 0 0-1.983-.821zm1.854.762a3.03 3.03 0 0 1 .659 2.062h.172a3.2 3.2 0 0 0-.7-2.175zm.659 2.062v.19h.172v-.19zm0 .19a.172.172 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-3.858v.171h3.858zm-3.944.086v.1h.172v-.1zm0 .1a2.2 2.2 0 0 0 .453 1.287l.135-.106a2.027 2.027 0 0 1-.417-1.189zm.454 1.288a1.418 1.418 0 0 0 1.148.533v-.171a1.247 1.247 0 0 1-1.015-.47zm1.148.533a1.647 1.647 0 0 0 .882-.214l-.09-.146a1.481 1.481 0 0 1-.791.188zm.882-.214a1.777 1.777 0 0 0 .515-.458l-.14-.1a1.613 1.613 0 0 1-.466.412zm.513-.456a1.251 1.251 0 0 1 .081-.1.28.28 0 0 1 .026-.025l.008-.006-.077-.153a.326.326 0 0 0-.083.068 1.55 1.55 0 0 0-.092.113zm.12-.134a.328.328 0 0 1 .146-.021v-.171a.468.468 0 0 0-.234.046zm.146-.021h.547v-.171h-.547zm.547 0a.166.166 0 0 1 .112.036l.11-.132a.337.337 0 0 0-.222-.076zm.112.036a.107.107 0 0 1 .036.09h.171a.277.277 0 0 0-.1-.222zm.036.09a.9.9 0 0 1-.291.534l.128.115a1.055 1.055 0 0 0 .334-.649zm-.291.535a2.42 2.42 0 0 1-.83.581l.072.156a2.6 2.6 0 0 0 .888-.624zm-.829.58a2.964 2.964 0 0 1-1.224.238v.171a3.133 3.133 0 0 0 1.295-.253zm.389-3.111v-.033h-.171v.033zm0-.033a1.9 1.9 0 0 0-.445-1.306l-.129.114a1.731 1.731 0 0 1 .4 1.192zm-.444-1.3a1.466 1.466 0 0 0-1.181-.521v.172a1.3 1.3 0 0 1 1.049.46zm-1.181-.521a1.466 1.466 0 0 0-1.18.521l.131.11a1.3 1.3 0 0 1 1.049-.46zm-1.181.521a1.965 1.965 0 0 0-.422 1.3h.172a1.794 1.794 0 0 1 .382-1.194zm-.422 1.3v.033h.172v-.033zm.086.119h3.055v-.171h-3.055z" fill="#51504f" data-name="Path 10" transform="translate(-1460.636 -807.945)"></path>
<path id="Path_11" d="M1519.066 884.011a.581.581 0 0 1-.567-.567 1.151 1.151 0 0 1 .028-.312l7.026-18.328a.881.881 0 0 1 .906-.623h1.926a.882.882 0 0 1 .907.623l7 18.328.057.312a.583.583 0 0 1-.567.567h-1.445a.735.735 0 0 1-.482-.142.9.9 0 0 1-.226-.34l-1.558-4.023h-9.292l-1.558 4.023a.8.8 0 0 1-.255.34.688.688 0 0 1-.453.142zm12.181-6.94l-3.824-10.056-3.823 10.055zm8.184-10.538a.592.592 0 0 1-.652-.651v-1.53a.714.714 0 0 1 .17-.482.656.656 0 0 1 .482-.2h1.785a.677.677 0 0 1 .68.68v1.53a.655.655 0 0 1-.2.481.713.713 0 0 1-.481.17zm.227 17.479a.593.593 0 0 1-.652-.652v-13.428a.611.611 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.359a.679.679 0 0 1 .652.651v13.427a.655.655 0 0 1-.2.482.613.613 0 0 1-.453.17zm6.861 0a.592.592 0 0 1-.651-.652v-13.4a.715.715 0 0 1 .17-.481.656.656 0 0 1 .482-.2h1.3a.677.677 0 0 1 .68.68v1.246a4.255 4.255 0 0 1 3.966-1.926h1.1a.679.679 0 0 1 .651.651v1.161a.566.566 0 0 1-.2.453.612.612 0 0 1-.453.17h-1.7a3.2 3.2 0 0 0-2.408.907 3.253 3.253 0 0 0-.879 2.408v8.328a.656.656 0 0 1-.2.482.716.716 0 0 1-.482.17zm12.234 0a.593.593 0 0 1-.651-.652v-11.814h-2.408a.592.592 0 0 1-.651-.651v-.963a.611.611 0 0 1 .17-.453.654.654 0 0 1 .481-.2h2.408v-1.417q0-4.816 4.872-4.815h1.586a.679.679 0 0 1 .652.651v.963a.656.656 0 0 1-.2.481.613.613 0 0 1-.453.17h-1.529a2.1 2.1 0 0 0-1.785.68 3.248 3.248 0 0 0-.51 2.011v1.275h6.062V863.7a.613.613 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.3a.679.679 0 0 1 .652.651v19.659a.655.655 0 0 1-.2.482.613.613 0 0 1-.454.17h-1.3a.592.592 0 0 1-.652-.652v-11.811h-6.062v11.813a.657.657 0 0 1-.2.482.614.614 0 0 1-.454.17zm20.9.283a6.487 6.487 0 0 1-4.844-1.757 6.837 6.837 0 0 1-1.813-4.674l-.029-1.218.029-1.218a6.732 6.732 0 0 1 1.841-4.646 7.389 7.389 0 0 1 9.631 0 6.736 6.736 0 0 1 1.841 4.646q.028.311.028 1.218t-.028 1.218a6.772 6.772 0 0 1-1.841 4.674 6.391 6.391 0 0 1-4.82 1.756zm0-2.181a3.582 3.582 0 0 0 2.8-1.133 4.931 4.931 0 0 0 1.133-3.258q.028-.283.028-1.076t-.028-1.076a4.931 4.931 0 0 0-1.133-3.258 3.582 3.582 0 0 0-2.8-1.133 3.671 3.671 0 0 0-2.833 1.133 4.83 4.83 0 0 0-1.1 3.258l-.028 1.076.028 1.076a4.83 4.83 0 0 0 1.1 3.258 3.671 3.671 0 0 0 2.828 1.132zm13.755 1.9a.846.846 0 0 1-.566-.17 1.321 1.321 0 0 1-.34-.538l-4.023-13.144-.056-.283a.575.575 0 0 1 .17-.425.641.641 0 0 1 .425-.17h1.246a.612.612 0 0 1 .453.17.646.646 0 0 1 .255.312l3.145 10.679 3.371-10.566a.761.761 0 0 1 .255-.4.726.726 0 0 1 .538-.2h.963a.728.728 0 0 1 .539.2.76.76 0 0 1 .255.4l3.371 10.566 3.144-10.679a.655.655 0 0 1 .2-.312.714.714 0 0 1 .482-.17h1.275a.542.542 0 0 1 .4.17.576.576 0 0 1 .17.425l-.057.283-3.994 13.144a1.323 1.323 0 0 1-.34.538.9.9 0 0 1-.6.17h-1.1a.86.86 0 0 1-.935-.708l-3.286-10.141-3.286 10.141a.928.928 0 0 1-.963.708z" fill="#51504f" data-name="Path 11" transform="translate(-1454.66 -838.62)"></path>
</g>
</g>
</g>
</svg>
</a>
</div>
<div class="desktop-only navbar__menu-container">
<div class="navbar__menu-content" id="main_navbar">
<div class="navbar__links-container">
<a class="navbar__text-link" href="/community/">
Community
</a>
<a class="navbar__text-link" href="/meetups/">
Meetups
</a>
<a class="navbar__text-link" href="/docs/">
Documentation
</a>
<a class="navbar__text-link" href="/use-cases/">
Use-cases
</a>
<a class="navbar__text-link" href="/announcements/">
Announcements
</a>
<a class="navbar__text-link" href="/blog/">
Blog
</a>
<a class="navbar__text-link" href="/ecosystem/">
Ecosystem
</a>
</div>
</div>
</div>
<div class="mobile-only navbar__drawer-container">
<button class="navbar__toggle-button" id="navbar-toggle-button">
<div id="hamburger-icon" class="navbar__toggle-button--icon visible">
<svg xmlns="http://www.w3.org/2000/svg" width="26" height="20" viewBox="0 0 26 20">
<g id="Group_1294" data-name="Group 1294" transform="translate(-38.791 291)">
<g id="Group_1291" data-name="Group 1291" transform="translate(39 -291)">
<rect id="Rectangle_461" width="26" height="2" fill="#51504f" data-name="Rectangle 461" rx="1" transform="translate(-.209)"></rect>
</g>
<g id="Group_1292" data-name="Group 1292" transform="translate(39 -281.822)">
<rect id="Rectangle_462" width="26" height="2" fill="#51504f" data-name="Rectangle 462" rx="1" transform="translate(-.209 -.178)"></rect>
</g>
<g id="Group_1293" data-name="Group 1293" transform="translate(39 -272.644)">
<rect id="Rectangle_463" width="26" height="2" fill="#51504f" data-name="Rectangle 463" rx="1" transform="translate(-.209 -.356)"></rect>
</g>
</g>
</svg>
</div>
<div id="close-icon" class="navbar__toggle-button--icon">
<svg xmlns="http://www.w3.org/2000/svg" width="19.799" height="19.799" viewBox="0 0 19.799 19.799">
<g id="Group_1574" data-name="Group 1574" transform="translate(-41.892 290.899)">
<g id="Group_1291" data-name="Group 1291" transform="rotate(-45 -308.114 -187.077)">
<rect id="Rectangle_461" width="26" height="2" fill="#51504f" data-name="Rectangle 461" rx="1" transform="translate(-.209)"></rect>
</g>
<g id="Group_1292" data-name="Group 1292" transform="rotate(45 372.48 -93.011)">
<rect id="Rectangle_462" width="26" height="2" fill="#51504f" data-name="Rectangle 462" rx="1" transform="translate(-.209 -.178)"></rect>
</g>
</g>
</svg>
</div>
</button>
<div class="navbar__drawer" id="navbar-drawer">
<div class="navbar__menu-content" id="main_navbar">
<div class="navbar__links-container">
<a class="navbar__text-link" href="/community/">
Community
</a>
<a class="navbar__text-link" href="/meetups/">
Meetups
</a>
<a class="navbar__text-link" href="/docs/">
Documentation
</a>
<a class="navbar__text-link" href="/use-cases/">
Use-cases
</a>
<a class="navbar__text-link" href="/announcements/">
Announcements
</a>
<a class="navbar__text-link" href="/blog/">
Blog
</a>
<a class="navbar__text-link" href="/ecosystem/">
Ecosystem
</a>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="roadmap container-fluid td-default base-layout">
<div class="content-drawer-wrapper">
<button class="content-drawer__toggle-button" id="content-open-button">
<div id="hamburger-icon" class="content-drawer__toggle-button--icon visible">
<svg xmlns="http://www.w3.org/2000/svg" width="20.005" height="13.879" viewBox="0 0 20.005 13.879">
<g id="Group_1619" data-name="Group 1619" transform="translate(271.132 -418.872)">
<g id="Group_1613" data-name="Group 1613" transform="translate(-266.229 431.045)">
<path id="Path_1337" d="M-218.5 513.215h-14.583a.259.259 0 0 1-.259-.26.259.259 0 0 1 .259-.259h14.583a.26.26 0 0 1 .259.259.259.259 0 0 1-.259.26z" fill="#51504f" data-name="Path 1337" transform="translate(233.345 -512.696)"></path>
</g>
<g id="Group_1614" data-name="Group 1614" transform="translate(-266.229 425.684)">
<path id="Path_1338" d="M-218.5 471.9h-14.583a.259.259 0 0 1-.259-.26.26.26 0 0 1 .259-.259h14.583a.26.26 0 0 1 .259.259.26.26 0 0 1-.259.26z" fill="#51504f" data-name="Path 1338" transform="translate(233.345 -471.376)"></path>
</g>
<g id="Group_1615" data-name="Group 1615" transform="translate(-266.229 420.323)">
<path id="Path_1339" d="M-218.5 430.574h-14.583a.259.259 0 0 1-.259-.259.259.259 0 0 1 .259-.259h14.583a.26.26 0 0 1 .259.259.259.259 0 0 1-.259.259z" fill="#51504f" data-name="Path 1339" transform="translate(233.345 -430.055)"></path>
</g>
<g id="Group_1616" data-name="Group 1616" transform="translate(-271.132 429.814)">
<path id="Path_1340" d="M-269.663 506.145a1.47 1.47 0 0 1-1.469-1.469 1.47 1.47 0 0 1 1.469-1.469 1.47 1.47 0 0 1 1.469 1.469 1.47 1.47 0 0 1-1.469 1.469zm0-2.418a.951.951 0 0 0-.95.95.951.951 0 0 0 .95.95.951.951 0 0 0 .95-.95.951.951 0 0 0-.95-.95z" fill="#51504f" data-name="Path 1340" transform="translate(271.132 -503.208)"></path>
</g>
<g id="Group_1617" data-name="Group 1617" transform="translate(-271.132 424.556)">
<path id="Path_1341" d="M-269.663 465.62a1.47 1.47 0 0 1-1.469-1.469 1.47 1.47 0 0 1 1.469-1.469 1.47 1.47 0 0 1 1.469 1.469 1.47 1.47 0 0 1-1.469 1.469zm0-2.418a.951.951 0 0 0-.95.95.951.951 0 0 0 .95.95.951.951 0 0 0 .95-.95.951.951 0 0 0-.95-.952z" fill="#51504f" data-name="Path 1341" transform="translate(271.132 -462.683)"></path>
</g>
<g id="Group_1618" data-name="Group 1618" transform="translate(-271.132 418.872)">
<path id="Path_1342" d="M-269.663 421.809a1.47 1.47 0 0 1-1.469-1.469 1.47 1.47 0 0 1 1.469-1.469 1.47 1.47 0 0 1 1.469 1.469 1.47 1.47 0 0 1-1.469 1.469zm0-2.418a.951.951 0 0 0-.95.95.951.951 0 0 0 .95.95.951.951 0 0 0 .95-.95.951.951 0 0 0-.95-.95z" fill="#51504f" data-name="Path 1342" transform="translate(271.132 -418.872)"></path>
</g>
</g>
</svg>
<span class="bodytext__mobile--brownish-grey">Content</span>
</div>
</button>
<nav id="content-navbar" class="navbar navbar--hidden">
<div class="navbar__icon-container">
<a href="/">
<svg xmlns="http://www.w3.org/2000/svg" width="155.314" height="60" viewBox="0 0 155.314 60">
<defs>
<clipPath id="clip-path">
<path id="Rectangle_1" d="M0 0h155.314v60H0z" fill="none" data-name="Rectangle 1"></path>
</clipPath>
</defs>
<g id="logo" transform="translate(-1305 -780.355)">
<g id="Group_2" clip-path="url(#clip-path)" data-name="Group 2" transform="translate(1305 780.355)">
<g id="Group_1" data-name="Group 1" transform="translate(.486 .486)">
<path id="Path_1" d="M1307.562 880.867l28.187-28.893a.521.521 0 0 0 .063-.666c-1.714-2.393-4.877-2.808-6.049-4.416-3.472-4.763-4.353-7.459-5.845-7.292a.456.456 0 0 0-.271.143l-10.182 10.438c-5.858 6-6.7 19.225-6.852 30.3a.552.552 0 0 0 .949.386z" fill="#017cee" data-name="Path 1" transform="translate(-1306.613 -822.232)"></path>
<path id="Path_2" d="M1405.512 908.489l-28.893-28.189a.521.521 0 0 0-.667-.063c-2.393 1.715-2.808 4.877-4.416 6.049-4.763 3.472-7.459 4.353-7.292 5.845a.456.456 0 0 0 .143.27l10.438 10.182c6 5.858 19.225 6.7 30.3 6.852a.552.552 0 0 0 .387-.946z" fill="#00ad46" data-name="Path 2" transform="translate(-1346.876 -850.567)"></path>
<path id="Path_3" d="M1373.909 902.252c-3.28-3.2-4.8-9.53 1.486-22.583-10.219 4.567-13.8 10.57-12.039 12.289z" fill="#04d659" data-name="Path 3" transform="translate(-1345.96 -850.233)"></path>
<path id="Path_4" d="M1433.132 782.359l-28.186 28.893a.52.52 0 0 0-.063.666c1.715 2.393 4.876 2.808 6.049 4.416 3.472 4.763 4.354 7.459 5.845 7.292a.454.454 0 0 0 .271-.143l10.182-10.438c5.858-6 6.7-19.225 6.852-30.3a.553.553 0 0 0-.95-.386z" fill="#00c7d4" data-name="Path 4" transform="translate(-1375.21 -782.123)"></path>
<path id="Path_5" d="M1426.9 881.155c-3.2 3.28-9.53 4.8-22.584-1.486 4.567 10.219 10.57 13.8 12.289 12.039z" fill="#11e1ee" data-name="Path 5" transform="translate(-1374.875 -850.233)"></path>
<path id="Path_6" d="M1307 782.919l28.893 28.186a.521.521 0 0 0 .666.063c2.393-1.715 2.808-4.877 4.416-6.049 4.763-3.472 7.459-4.353 7.292-5.845a.459.459 0 0 0-.143-.271l-10.438-10.182c-6-5.858-19.225-6.7-30.3-6.852a.552.552 0 0 0-.386.95z" fill="#e43921" data-name="Path 6" transform="translate(-1306.766 -781.97)"></path>
<path id="Path_7" d="M1405.8 804.711c3.28 3.2 4.8 9.53-1.486 22.584 10.219-4.567 13.8-10.571 12.039-12.289z" fill-rule="evenodd" fill="#ff7557" data-name="Path 7" transform="translate(-1374.875 -797.859)"></path>
<path id="Path_8" d="M1329.355 849.266c3.2-3.28 9.53-4.8 22.584 1.486-4.567-10.219-10.57-13.8-12.289-12.039z" fill="#0cb6ff" data-name="Path 8" transform="translate(-1322.503 -821.316)"></path>
<circle id="Ellipse_1" cx="1.26" cy="1.26" r="1.26" fill="#4a4848" data-name="Ellipse 1" transform="translate(28.18 28.171)"></circle>
<path id="Path_9" d="M1527.558 827.347a.229.229 0 0 1-.223-.223.458.458 0 0 1 .011-.123l2.766-7.214a.346.346 0 0 1 .357-.245h.758a.348.348 0 0 1 .357.245l2.754 7.214.022.123a.228.228 0 0 1-.223.223h-.568a.288.288 0 0 1-.19-.056.352.352 0 0 1-.089-.134l-.613-1.583h-3.657l-.613 1.583a.317.317 0 0 1-.1.134.269.269 0 0 1-.178.056zm4.795-2.732l-1.505-3.958-1.505 3.958zm3.322 4.85a.258.258 0 0 1-.189-.078.241.241 0 0 1-.067-.178v-7.4a.241.241 0 0 1 .067-.178.258.258 0 0 1 .189-.078h.513a.268.268 0 0 1 .256.256v.49a2.118 2.118 0 0 1 1.828-.858 2.092 2.092 0 0 1 1.751.736 3.135 3.135 0 0 1 .636 1.9q.011.122.011.379t-.011.379a3.168 3.168 0 0 1-.636 1.9 2.111 2.111 0 0 1-1.751.736 2.154 2.154 0 0 1-1.806-.836v2.587a.241.241 0 0 1-.067.178.223.223 0 0 1-.179.078zm2.364-2.91a1.324 1.324 0 0 0 1.149-.491 2.266 2.266 0 0 0 .4-1.293q.011-.111.011-.323 0-2.107-1.562-2.107a1.365 1.365 0 0 0-1.159.513 2.111 2.111 0 0 0-.412 1.2l-.012.424.012.435a1.862 1.862 0 0 0 .424 1.149 1.4 1.4 0 0 0 1.148.493zm5.628.9a2.329 2.329 0 0 1-1.015-.223 1.94 1.94 0 0 1-.747-.6 1.487 1.487 0 0 1-.268-.859 1.459 1.459 0 0 1 .6-1.2 3.4 3.4 0 0 1 1.65-.624l1.661-.234v-.323q0-1.137-1.3-1.137a1.4 1.4 0 0 0-.8.212 1.376 1.376 0 0 0-.468.48.305.305 0 0 1-.089.145.18.18 0 0 1-.134.045h-.48a.23.23 0 0 1-.245-.245 1.17 1.17 0 0 1 .245-.6 1.931 1.931 0 0 1 .747-.591 2.7 2.7 0 0 1 1.238-.256 2.351 2.351 0 0 1 1.8.591 2.032 2.032 0 0 1 .547 1.45v3.613a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.513a.233.233 0 0 1-.257-.256v-.479a1.923 1.923 0 0 1-.714.6 2.557 2.557 0 0 1-1.203.237zm.234-.836a1.579 1.579 0 0 0 1.182-.469 1.881 1.881 0 0 0 .468-1.371v-.312l-1.293.19a2.918 2.918 0 0 0-1.193.379.761.761 0 0 0-.4.658.784.784 0 0 0 .368.691 1.585 1.585 0 0 0 .867.237zm6.643.836a2.556 2.556 0 0 1-1.873-.669 2.738 2.738 0 0 1-.714-1.9l-.011-.446.011-.446a2.7 2.7 0 0 1 .714-1.885 2.531 2.531 0 0 1 1.873-.68 2.917 2.917 0 0 1 1.36.29 2.077 2.077 0 0 1 .825.714 1.7 1.7 0 0 1 .3.848.2.2 0 0 1-.067.178.281.281 0 0 1-.19.067h-.535a.265.265 0 0 1-.168-.045.458.458 0 0 1-.111-.178 1.428 1.428 0 0 0-.535-.758 1.516 1.516 0 0 0-.87-.234 1.45 1.45 0 0 0-1.1.435 1.952 1.952 0 0 0-.435 1.3l-.011.4.011.379a1.969 1.969 0 0 0 .435 1.316 1.446 1.446 0 0 0 1.1.424 1.577 1.577 0 0 0 .87-.223 1.493 1.493 0 0 0 .535-.769.458.458 0 0 1 .111-.178.228.228 0 0 1 .168-.056h.535a.258.258 0 0 1 .19.078.2.2 0 0 1 .067.178 1.75 1.75 0 0 1-.3.847 2.078 2.078 0 0 1-.825.714 2.876 2.876 0 0 1-1.361.302zm4.078-.112a.233.233 0 0 1-.257-.256v-7.4a.241.241 0 0 1 .067-.178.259.259 0 0 1 .19-.078h.557a.267.267 0 0 1 .257.256v2.6a2.167 2.167 0 0 1 .758-.624 2.353 2.353 0 0 1 1.082-.223 2.067 2.067 0 0 1 1.661.691 2.642 2.642 0 0 1 .6 1.818v3.144a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.557a.233.233 0 0 1-.256-.256V824a1.775 1.775 0 0 0-.39-1.227 1.387 1.387 0 0 0-1.1-.435 1.481 1.481 0 0 0-1.126.446 1.7 1.7 0 0 0-.412 1.215v3.088a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067zm8.846.112a2.466 2.466 0 0 1-1.84-.7 2.938 2.938 0 0 1-.747-1.94l-.011-.379.011-.368a2.953 2.953 0 0 1 .758-1.918 2.7 2.7 0 0 1 3.735.078 3.114 3.114 0 0 1 .68 2.119v.19a.257.257 0 0 1-.078.189.241.241 0 0 1-.178.067h-3.858v.1a2.11 2.11 0 0 0 .435 1.238 1.332 1.332 0 0 0 1.081.5 1.563 1.563 0 0 0 .836-.2 1.7 1.7 0 0 0 .491-.435.6.6 0 0 1 .145-.156.391.391 0 0 1 .19-.033h.547a.252.252 0 0 1 .167.056.192.192 0 0 1 .067.156.975.975 0 0 1-.312.591 2.51 2.51 0 0 1-.859.6 3.049 3.049 0 0 1-1.26.248zm1.527-3.434v-.033a1.817 1.817 0 0 0-.424-1.249 1.512 1.512 0 0 0-2.23 0 1.883 1.883 0 0 0-.4 1.249v.033z" fill="#51504f" data-name="Path 9" transform="translate(-1460.834 -808.144)"></path>
<path id="Path_10" d="M1527.2 827.081l-.061.061zm-.056-.279l-.08-.031zm2.766-7.214l.08.031zm1.472 0l-.081.029zm2.754 7.214l.084-.015a.064.064 0 0 0 0-.015zm.022.123h.086v-.015zm-.067.156l.06.061zm-.914.011l-.061.061.006.005zm-.089-.134l.081-.027zm-.613-1.583l.08-.031a.086.086 0 0 0-.08-.055zm-3.657 0v-.086a.086.086 0 0 0-.08.055zm-.613 1.583l-.08-.031zm-.1.134l.055.066zm4.047-2.676v.086a.086.086 0 0 0 .08-.116zm-1.505-3.958l.08-.03a.086.086 0 0 0-.16 0zm-1.505 3.958l-.08-.03a.086.086 0 0 0 .08.116zm-1.784 2.646a.128.128 0 0 1-.1-.042l-.122.121a.3.3 0 0 0 .217.092zm-.1-.042a.129.129 0 0 1-.042-.1h-.171a.3.3 0 0 0 .092.217zm-.042-.1a.38.38 0 0 1 .007-.1l-.163-.054a.514.514 0 0 0-.016.15zm.005-.092l2.765-7.214-.16-.061-2.765 7.214zm2.766-7.216a.283.283 0 0 1 .1-.143.3.3 0 0 1 .174-.046v-.172a.47.47 0 0 0-.271.076.453.453 0 0 0-.166.226zm.276-.189h.758v-.172h-.758zm.758 0a.3.3 0 0 1 .175.046.283.283 0 0 1 .1.143l.161-.059a.451.451 0 0 0-.166-.226.47.47 0 0 0-.272-.076zm.277.19l2.754 7.214.16-.061-2.754-7.214zm2.75 7.2l.022.123.169-.031-.022-.123zm.021.107a.13.13 0 0 1-.042.1l.121.121a.3.3 0 0 0 .092-.217zm-.042.1a.13.13 0 0 1-.1.042v.171a.3.3 0 0 0 .217-.092zm-.1.042h-.568v.171h.568zm-.568 0a.206.206 0 0 1-.135-.036l-.11.132a.373.373 0 0 0 .245.076zm-.129-.031a.262.262 0 0 1-.069-.1l-.162.054a.431.431 0 0 0 .11.167zm-.07-.1l-.613-1.584-.16.062.613 1.583zm-.693-1.638h-3.657v.171h3.657zm-3.737.055l-.614 1.584.16.062.613-1.583zm-.615 1.587a.235.235 0 0 1-.075.1l.111.13a.4.4 0 0 0 .126-.172zm-.074.1a.185.185 0 0 1-.124.036v.171a.354.354 0 0 0 .233-.076zm-.124.036h-.569v.171h.569zm4.306-2.677l-1.505-3.958-.16.061 1.505 3.958zm-1.666-3.958l-1.505 3.958.16.061 1.505-3.958zm-1.425 4.075h3.01v-.171h-3.01zm6.143 4.687l-.06.061zm0-7.761l.061.061zm.881 0l-.065.056.01.009zm.078.669h-.086a.086.086 0 0 0 .155.051zm3.579-.123l-.067.053zm.636 1.9h-.086zm0 .758l-.085-.007zm-.636 1.9l.067.054zm-3.557-.1l.068-.052a.086.086 0 0 0-.154.052zm-.067 2.765l-.061-.06zm2.787-3.323l-.069-.051zm.4-1.293l-.085-.008v.005zm-2.709-1.918l-.068-.052zm-.413 1.2h-.086zm-.011.423h-.085zm.011.435h-.086zm.424 1.149l.066-.054zm-1.216 3.315a.173.173 0 0 1-.129-.053l-.121.121a.342.342 0 0 0 .25.1zm-.129-.053a.157.157 0 0 1-.042-.118h-.172a.325.325 0 0 0 .092.239zm-.042-.118v-7.4h-.172v7.4zm0-7.4a.157.157 0 0 1 .042-.118l-.121-.121a.324.324 0 0 0-.092.239zm.042-.118a.173.173 0 0 1 .129-.053v-.172a.342.342 0 0 0-.25.1zm.129-.053h.513v-.172h-.513zm.513 0a.137.137 0 0 1 .113.048l.13-.111a.309.309 0 0 0-.244-.108zm.123.058a.137.137 0 0 1 .048.113h.171a.309.309 0 0 0-.108-.243zm.048.113v.49h.171v-.49zm.155.541a2.033 2.033 0 0 1 1.759-.823v-.171a2.2 2.2 0 0 0-1.9.894zm1.759-.823a2.007 2.007 0 0 1 1.683.7l.135-.106a2.177 2.177 0 0 0-1.818-.768zm1.683.7a3.045 3.045 0 0 1 .617 1.845l.171-.007a3.218 3.218 0 0 0-.654-1.946zm.617 1.85c.007.078.011.2.011.372h.171c0-.171 0-.3-.012-.387zm.011.372c0 .171 0 .294-.011.372l.17.015c.008-.086.012-.216.012-.387zm-.011.376a3.08 3.08 0 0 1-.617 1.846l.134.106a3.25 3.25 0 0 0 .654-1.945zm-.617 1.845a2.025 2.025 0 0 1-1.683.7v.171a2.2 2.2 0 0 0 1.817-.768zm-1.683.7a2.068 2.068 0 0 1-1.739-.8l-.136.1a2.239 2.239 0 0 0 1.874.87zm-1.892-.75v2.587h.172v-2.587zm0 2.587a.156.156 0 0 1-.042.118l.121.121a.325.325 0 0 0 .092-.239zm-.046.123a.138.138 0 0 1-.114.048v.172a.308.308 0 0 0 .244-.108zm-.114.048h-.546v.172h.546zm1.817-2.739a1.408 1.408 0 0 0 1.218-.526l-.138-.1a1.24 1.24 0 0 1-1.079.455zm1.217-.525a2.355 2.355 0 0 0 .419-1.341l-.171-.007a2.182 2.182 0 0 1-.385 1.246zm.418-1.336c.008-.079.012-.19.012-.332h-.172c0 .14 0 .245-.011.315zm.012-.332a2.726 2.726 0 0 0-.407-1.632 1.448 1.448 0 0 0-1.24-.562v.171a1.278 1.278 0 0 1 1.1.492 2.565 2.565 0 0 1 .374 1.53zm-1.647-2.193a1.452 1.452 0 0 0-1.228.547l.136.1a1.282 1.282 0 0 1 1.091-.479zm-1.228.547a2.2 2.2 0 0 0-.43 1.252l.172.008a2.028 2.028 0 0 1 .4-1.157zm-.43 1.254l-.011.424h.171l.011-.424zm-.011.428l.011.435h.172l-.011-.435zm.011.436a1.95 1.95 0 0 0 .443 1.2l.133-.109a1.776 1.776 0 0 1-.4-1.1zm.443 1.2a1.484 1.484 0 0 0 1.214.522v-.171a1.314 1.314 0 0 1-1.082-.459zm5.828 1.117l.037-.077zm-.747-.6l-.07.049zm.335-2.063l.052.068zm1.65-.624l.012.085zm1.661-.234l.012.085a.086.086 0 0 0 .074-.085zm-2.107-1.249l.046.072zm-.468.48l-.075-.042a.083.083 0 0 0-.006.015zm-.089.145l-.054-.067-.007.006zm-.792-.022l-.065.056.009.009zm-.067-.178h-.086zm.245-.6l-.07-.049zm.747-.591l.038.077zm3.033.334l-.063.058zm.468 5.252l.06.061zm-.881 0l-.065.056a.043.043 0 0 0 .009.009zm-.067-.669h.086a.086.086 0 0 0-.156-.048zm-.714.6l-.04-.076zm.223-1.059l-.062-.06zm.468-1.684h.086a.086.086 0 0 0-.1-.085zm-1.293.189l.012.085zm-1.193.379l.046.072zm-.033 1.349l-.047.071zm.635.985a2.241 2.241 0 0 1-.978-.215l-.074.155a2.412 2.412 0 0 0 1.051.231zm-.978-.215a1.859 1.859 0 0 1-.715-.576l-.138.1a2.024 2.024 0 0 0 .779.629zm-.713-.573a1.4 1.4 0 0 1-.253-.81h-.172a1.571 1.571 0 0 0 .283.907zm-.253-.81a1.374 1.374 0 0 1 .569-1.136l-.105-.135a1.544 1.544 0 0 0-.635 1.272zm.569-1.137a3.316 3.316 0 0 1 1.609-.607l-.024-.17a3.481 3.481 0 0 0-1.691.642zm1.609-.607l1.661-.234-.024-.17-1.662.234zm1.735-.319v-.323h-.171v.323zm0-.323a1.156 1.156 0 0 0-.355-.917 1.536 1.536 0 0 0-1.035-.306v.172a1.37 1.37 0 0 1 .922.263.986.986 0 0 1 .3.788zm-1.39-1.223a1.486 1.486 0 0 0-.851.227l.1.142a1.316 1.316 0 0 1 .755-.2zm-.849.226a1.452 1.452 0 0 0-.5.51l.15.084a1.286 1.286 0 0 1 .44-.449zm-.5.524a.226.226 0 0 1-.062.105l.107.134a.391.391 0 0 0 .117-.185zm-.068.112a.1.1 0 0 1-.073.019v.171a.266.266 0 0 0 .194-.07zm-.073.019h-.48v.171h.48zm-.48 0a.18.18 0 0 1-.122-.046l-.112.13a.352.352 0 0 0 .234.087zm-.113-.037a.18.18 0 0 1-.047-.123h-.171a.352.352 0 0 0 .087.234zm-.047-.119a1.1 1.1 0 0 1 .23-.557l-.14-.1a1.253 1.253 0 0 0-.261.648zm.23-.556a1.843 1.843 0 0 1 .715-.564l-.075-.154a2.018 2.018 0 0 0-.78.618zm.716-.564a2.611 2.611 0 0 1 1.2-.247v-.171a2.781 2.781 0 0 0-1.277.266zm1.2-.247a2.268 2.268 0 0 1 1.732.563l.126-.116a2.435 2.435 0 0 0-1.858-.618zm1.733.564a1.945 1.945 0 0 1 .523 1.391h.171a2.117 2.117 0 0 0-.57-1.508zm.523 1.391v3.613h.171v-3.613zm0 3.613a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.157.157 0 0 1-.118.042v.171a.326.326 0 0 0 .239-.092zm-.118.042h-.513v.171h.513zm-.513 0a.2.2 0 0 1-.134-.046l-.111.13a.367.367 0 0 0 .245.088zm-.124-.037a.194.194 0 0 1-.047-.134h-.171a.366.366 0 0 0 .087.245zm-.047-.134v-.479h-.171v.479zm-.156-.528a1.846 1.846 0 0 1-.683.575l.079.152a2.012 2.012 0 0 0 .745-.629zm-.683.575a2.476 2.476 0 0 1-1.153.236v.171a2.644 2.644 0 0 0 1.233-.255zm-.919-.429a1.666 1.666 0 0 0 1.244-.494l-.123-.12a1.493 1.493 0 0 1-1.121.442zm1.244-.494a1.969 1.969 0 0 0 .492-1.431h-.171a1.8 1.8 0 0 1-.444 1.312zm.492-1.431v-.312h-.171v.312zm-.1-.4l-1.293.189.025.17 1.293-.189zm-1.293.189a3 3 0 0 0-1.228.393l.095.143a2.837 2.837 0 0 1 1.158-.365zm-1.227.392a.845.845 0 0 0-.441.73h.172a.676.676 0 0 1 .362-.586zm-.441.73a.869.869 0 0 0 .406.762l.095-.142a.7.7 0 0 1-.33-.62zm.408.764a1.673 1.673 0 0 0 .916.247v-.171a1.5 1.5 0 0 1-.823-.221zm5.686.329l-.061.06zm-.714-1.9h-.085zm-.011-.446h-.085zm.011-.446h-.085zm.714-1.885l.061.061zm3.234-.39l-.04.076zm.825.713l-.073.046zm.3.848h-.086zm-.067.178l.056.065zm-.892.022l.054-.067zm-.112-.178l-.081.029zm-.535-.758l-.048.071zm-1.974.2l-.062-.059zm-.435 1.3h-.086zm-.011.4h-.086zm.011.379h-.086zm.435 1.316l-.062.059zm1.974.2l.046.072zm.535-.769l-.079-.033zm.112-.178l.054.067.007-.006zm.892.022l-.061.06zm.067.178l-.085-.009zm-.3.847l-.072-.046zm-.825.714l-.04-.076zm-1.36.2a2.471 2.471 0 0 1-1.814-.644l-.12.122a2.64 2.64 0 0 0 1.933.694zm-1.813-.643a2.653 2.653 0 0 1-.689-1.839l-.171.006a2.822 2.822 0 0 0 .738 1.952zm-.689-1.838l-.011-.446h-.171l.011.446zm-.011-.442l.011-.446h-.171l-.011.446zm.011-.445a2.611 2.611 0 0 1 .689-1.827l-.122-.121a2.78 2.78 0 0 0-.738 1.942zm.689-1.827a2.447 2.447 0 0 1 1.813-.655v-.171a2.617 2.617 0 0 0-1.934.705zm1.813-.655a2.836 2.836 0 0 1 1.32.28l.079-.152a3 3 0 0 0-1.4-.3zm1.32.28a1.99 1.99 0 0 1 .792.683l.145-.091a2.158 2.158 0 0 0-.858-.744zm.793.685a1.617 1.617 0 0 1 .287.8l.171-.009a1.789 1.789 0 0 0-.315-.89zm.287.809a.11.11 0 0 1-.037.1l.112.13a.281.281 0 0 0 .1-.252zm-.037.1a.2.2 0 0 1-.134.046v.171a.369.369 0 0 0 .246-.088zm-.134.046h-.535v.171h.535zm-.535 0a.184.184 0 0 1-.114-.026l-.107.134a.345.345 0 0 0 .221.064zm-.114-.026a.389.389 0 0 1-.086-.144l-.158.066a.533.533 0 0 0 .137.212zm-.084-.14a1.514 1.514 0 0 0-.57-.8l-.093.144a1.343 1.343 0 0 1 .5.715zm-.568-.8a1.6 1.6 0 0 0-.918-.249v.171a1.435 1.435 0 0 1 .822.219zm-.918-.249a1.535 1.535 0 0 0-1.166.462l.124.118a1.364 1.364 0 0 1 1.042-.408zm-1.166.462a2.036 2.036 0 0 0-.458 1.36l.171.006a1.872 1.872 0 0 1 .411-1.249zm-.458 1.361l-.011.4h.171l.011-.4zm-.011.406l.011.379.171-.005-.011-.379zm.011.38a2.052 2.052 0 0 0 .458 1.371l.124-.118a1.889 1.889 0 0 1-.411-1.26zm.458 1.371a1.533 1.533 0 0 0 1.166.451v-.172a1.363 1.363 0 0 1-1.042-.4zm1.166.451a1.661 1.661 0 0 0 .916-.237l-.093-.144a1.491 1.491 0 0 1-.823.209zm.918-.238a1.576 1.576 0 0 0 .568-.812l-.162-.057a1.409 1.409 0 0 1-.5.727zm.566-.807a.39.39 0 0 1 .086-.144l-.107-.134a.533.533 0 0 0-.137.213zm.093-.151a.144.144 0 0 1 .107-.031v-.171a.31.31 0 0 0-.228.081zm.107-.031h.535v-.171h-.535zm.535 0a.173.173 0 0 1 .129.053l.121-.121a.344.344 0 0 0-.25-.1zm.134.057a.11.11 0 0 1 .037.1l.17.017a.281.281 0 0 0-.1-.252zm.037.109a1.664 1.664 0 0 1-.288.806l.144.092a1.839 1.839 0 0 0 .315-.889zm-.288.806a1.989 1.989 0 0 1-.792.683l.079.152a2.162 2.162 0 0 0 .858-.744zm-.793.684a2.8 2.8 0 0 1-1.32.28v.171a2.96 2.96 0 0 0 1.4-.3zm2.568.187l-.065.056.01.009zm0-7.772l.061.06zm.926 0l-.065.056.009.009zm.078 2.776h-.085a.086.086 0 0 0 .153.053zm.758-.624l.038.077zm2.743.468l-.065.056zm.524 5.151l-.061-.06zm-.925 0l-.065.056.009.009zm-.457-4.5l-.065.056zm-2.23.011l-.062-.059zm-.49 4.493l-.061-.06zm-.736-.019a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.367.367 0 0 0 .087.245zm-.046-.134v-7.4h-.172v7.4zm0-7.4a.156.156 0 0 1 .042-.118l-.121-.121a.326.326 0 0 0-.092.239zm.042-.118a.172.172 0 0 1 .129-.053v-.171a.343.343 0 0 0-.25.1zm.129-.053h.557v-.171h-.557zm.557 0a.137.137 0 0 1 .113.048l.13-.112a.308.308 0 0 0-.244-.108zm.122.057a.137.137 0 0 1 .048.113h.172a.309.309 0 0 0-.108-.243zm.048.113v2.6h.172v-2.6zm.153 2.651a2.076 2.076 0 0 1 .728-.6l-.075-.154a2.248 2.248 0 0 0-.788.649zm.73-.6a2.272 2.272 0 0 1 1.043-.214v-.171a2.438 2.438 0 0 0-1.121.232zm1.043-.214a1.982 1.982 0 0 1 1.6.661l.13-.112a2.152 2.152 0 0 0-1.727-.721zm1.6.663a2.557 2.557 0 0 1 .581 1.761h.171a2.727 2.727 0 0 0-.624-1.874zm.581 1.761v3.144h.171v-3.144zm0 3.144a.173.173 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm-.557 0a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.368.368 0 0 0 .087.245zm-.046-.134V823.8h-.172v3.088zm0-3.088a1.859 1.859 0 0 0-.412-1.284l-.128.114a1.69 1.69 0 0 1 .368 1.169zm-.411-1.283a1.471 1.471 0 0 0-1.169-.464v.171a1.3 1.3 0 0 1 1.039.406zm-1.169-.464a1.566 1.566 0 0 0-1.188.473l.124.118a1.4 1.4 0 0 1 1.064-.419zm-1.188.473a1.779 1.779 0 0 0-.436 1.275h.172a1.609 1.609 0 0 1 .389-1.156zm-.436 1.275v3.088h.172V823.8zm0 3.088a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm6.449-.505l-.062.059zm-.747-1.94h-.086zm-.012-.379h-.085v.005zm.012-.368l-.086-.006zm.758-1.918l-.061-.06zm3.735.078l-.065.056zm.6 2.5l.061.061zm-4.036.067v-.086a.086.086 0 0 0-.086.086zm0 .1h-.086zm.435 1.238l-.068.053zm1.918.3l.045.073zm.491-.435l-.069-.051zm.145-.156l.039.077h.006zm.9.022l-.055.066zm-.245.747l-.064-.057zm-.858.6l.035.078zm.267-3.189v.086a.086.086 0 0 0 .086-.086zm-.424-1.282l-.066.055zm-2.23 0l-.065-.055zm-.4 1.282h-.086a.086.086 0 0 0 .086.086zm1.528 3.349a2.38 2.38 0 0 1-1.779-.677l-.122.12a2.55 2.55 0 0 0 1.9.728zm-1.778-.676a2.86 2.86 0 0 1-.724-1.886l-.171.009a3.027 3.027 0 0 0 .771 1.995zm-.723-1.884l-.011-.379h-.171l.011.379zm-.011-.374l.011-.368-.172-.005-.011.368zm.011-.365a2.871 2.871 0 0 1 .735-1.864l-.124-.118a3.042 3.042 0 0 0-.782 1.971zm.734-1.864a2.331 2.331 0 0 1 1.756-.687v-.171a2.5 2.5 0 0 0-1.879.74zm1.756-.687a2.307 2.307 0 0 1 1.853.762l.13-.112a2.477 2.477 0 0 0-1.983-.821zm1.854.762a3.03 3.03 0 0 1 .659 2.062h.172a3.2 3.2 0 0 0-.7-2.175zm.659 2.062v.19h.172v-.19zm0 .19a.172.172 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-3.858v.171h3.858zm-3.944.086v.1h.172v-.1zm0 .1a2.2 2.2 0 0 0 .453 1.287l.135-.106a2.027 2.027 0 0 1-.417-1.189zm.454 1.288a1.418 1.418 0 0 0 1.148.533v-.171a1.247 1.247 0 0 1-1.015-.47zm1.148.533a1.647 1.647 0 0 0 .882-.214l-.09-.146a1.481 1.481 0 0 1-.791.188zm.882-.214a1.777 1.777 0 0 0 .515-.458l-.14-.1a1.613 1.613 0 0 1-.466.412zm.513-.456a1.251 1.251 0 0 1 .081-.1.28.28 0 0 1 .026-.025l.008-.006-.077-.153a.326.326 0 0 0-.083.068 1.55 1.55 0 0 0-.092.113zm.12-.134a.328.328 0 0 1 .146-.021v-.171a.468.468 0 0 0-.234.046zm.146-.021h.547v-.171h-.547zm.547 0a.166.166 0 0 1 .112.036l.11-.132a.337.337 0 0 0-.222-.076zm.112.036a.107.107 0 0 1 .036.09h.171a.277.277 0 0 0-.1-.222zm.036.09a.9.9 0 0 1-.291.534l.128.115a1.055 1.055 0 0 0 .334-.649zm-.291.535a2.42 2.42 0 0 1-.83.581l.072.156a2.6 2.6 0 0 0 .888-.624zm-.829.58a2.964 2.964 0 0 1-1.224.238v.171a3.133 3.133 0 0 0 1.295-.253zm.389-3.111v-.033h-.171v.033zm0-.033a1.9 1.9 0 0 0-.445-1.306l-.129.114a1.731 1.731 0 0 1 .4 1.192zm-.444-1.3a1.466 1.466 0 0 0-1.181-.521v.172a1.3 1.3 0 0 1 1.049.46zm-1.181-.521a1.466 1.466 0 0 0-1.18.521l.131.11a1.3 1.3 0 0 1 1.049-.46zm-1.181.521a1.965 1.965 0 0 0-.422 1.3h.172a1.794 1.794 0 0 1 .382-1.194zm-.422 1.3v.033h.172v-.033zm.086.119h3.055v-.171h-3.055z" fill="#51504f" data-name="Path 10" transform="translate(-1460.636 -807.945)"></path>
<path id="Path_11" d="M1519.066 884.011a.581.581 0 0 1-.567-.567 1.151 1.151 0 0 1 .028-.312l7.026-18.328a.881.881 0 0 1 .906-.623h1.926a.882.882 0 0 1 .907.623l7 18.328.057.312a.583.583 0 0 1-.567.567h-1.445a.735.735 0 0 1-.482-.142.9.9 0 0 1-.226-.34l-1.558-4.023h-9.292l-1.558 4.023a.8.8 0 0 1-.255.34.688.688 0 0 1-.453.142zm12.181-6.94l-3.824-10.056-3.823 10.055zm8.184-10.538a.592.592 0 0 1-.652-.651v-1.53a.714.714 0 0 1 .17-.482.656.656 0 0 1 .482-.2h1.785a.677.677 0 0 1 .68.68v1.53a.655.655 0 0 1-.2.481.713.713 0 0 1-.481.17zm.227 17.479a.593.593 0 0 1-.652-.652v-13.428a.611.611 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.359a.679.679 0 0 1 .652.651v13.427a.655.655 0 0 1-.2.482.613.613 0 0 1-.453.17zm6.861 0a.592.592 0 0 1-.651-.652v-13.4a.715.715 0 0 1 .17-.481.656.656 0 0 1 .482-.2h1.3a.677.677 0 0 1 .68.68v1.246a4.255 4.255 0 0 1 3.966-1.926h1.1a.679.679 0 0 1 .651.651v1.161a.566.566 0 0 1-.2.453.612.612 0 0 1-.453.17h-1.7a3.2 3.2 0 0 0-2.408.907 3.253 3.253 0 0 0-.879 2.408v8.328a.656.656 0 0 1-.2.482.716.716 0 0 1-.482.17zm12.234 0a.593.593 0 0 1-.651-.652v-11.814h-2.408a.592.592 0 0 1-.651-.651v-.963a.611.611 0 0 1 .17-.453.654.654 0 0 1 .481-.2h2.408v-1.417q0-4.816 4.872-4.815h1.586a.679.679 0 0 1 .652.651v.963a.656.656 0 0 1-.2.481.613.613 0 0 1-.453.17h-1.529a2.1 2.1 0 0 0-1.785.68 3.248 3.248 0 0 0-.51 2.011v1.275h6.062V863.7a.613.613 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.3a.679.679 0 0 1 .652.651v19.659a.655.655 0 0 1-.2.482.613.613 0 0 1-.454.17h-1.3a.592.592 0 0 1-.652-.652v-11.811h-6.062v11.813a.657.657 0 0 1-.2.482.614.614 0 0 1-.454.17zm20.9.283a6.487 6.487 0 0 1-4.844-1.757 6.837 6.837 0 0 1-1.813-4.674l-.029-1.218.029-1.218a6.732 6.732 0 0 1 1.841-4.646 7.389 7.389 0 0 1 9.631 0 6.736 6.736 0 0 1 1.841 4.646q.028.311.028 1.218t-.028 1.218a6.772 6.772 0 0 1-1.841 4.674 6.391 6.391 0 0 1-4.82 1.756zm0-2.181a3.582 3.582 0 0 0 2.8-1.133 4.931 4.931 0 0 0 1.133-3.258q.028-.283.028-1.076t-.028-1.076a4.931 4.931 0 0 0-1.133-3.258 3.582 3.582 0 0 0-2.8-1.133 3.671 3.671 0 0 0-2.833 1.133 4.83 4.83 0 0 0-1.1 3.258l-.028 1.076.028 1.076a4.83 4.83 0 0 0 1.1 3.258 3.671 3.671 0 0 0 2.828 1.132zm13.755 1.9a.846.846 0 0 1-.566-.17 1.321 1.321 0 0 1-.34-.538l-4.023-13.144-.056-.283a.575.575 0 0 1 .17-.425.641.641 0 0 1 .425-.17h1.246a.612.612 0 0 1 .453.17.646.646 0 0 1 .255.312l3.145 10.679 3.371-10.566a.761.761 0 0 1 .255-.4.726.726 0 0 1 .538-.2h.963a.728.728 0 0 1 .539.2.76.76 0 0 1 .255.4l3.371 10.566 3.144-10.679a.655.655 0 0 1 .2-.312.714.714 0 0 1 .482-.17h1.275a.542.542 0 0 1 .4.17.576.576 0 0 1 .17.425l-.057.283-3.994 13.144a1.323 1.323 0 0 1-.34.538.9.9 0 0 1-.6.17h-1.1a.86.86 0 0 1-.935-.708l-3.286-10.141-3.286 10.141a.928.928 0 0 1-.963.708z" fill="#51504f" data-name="Path 11" transform="translate(-1454.66 -838.62)"></path>
</g>
</g>
</g>
</svg>
</a>
</div>
<div id="content-close-button">
<svg xmlns="http://www.w3.org/2000/svg" width="19.799" height="19.799" viewBox="0 0 19.799 19.799">
<g id="Group_1574" data-name="Group 1574" transform="translate(-41.892 290.899)">
<g id="Group_1291" data-name="Group 1291" transform="rotate(-45 -308.114 -187.077)">
<rect id="Rectangle_461" width="26" height="2" fill="#51504f" data-name="Rectangle 461" rx="1" transform="translate(-.209)"></rect>
</g>
<g id="Group_1292" data-name="Group 1292" transform="rotate(45 372.48 -93.011)">
<rect id="Rectangle_462" width="26" height="2" fill="#51504f" data-name="Rectangle 462" rx="1" transform="translate(-.209 -.178)"></rect>
</g>
</g>
</svg>
</div>
</nav>
<div class="content-drawer-container" id="content-drawer">
<div class="content-drawer">
<div class="td-sidebar">
<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
<a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<span class="bodytext__medium--greyish-brown">Version: </span><span class="version">2.0.0</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
</div>
<script type="application/x-template" id="version-item-template">
<a class="dropdown-item"></a>
</script>
</div>
<div class="searchb-box">
<form class="search-form" action="search.html" method="get">
<input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
<button class="search-form__button" type="submit">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<g id="Group_1579" data-name="Group 1579" transform="translate(-41.001 -41)">
<path id="Path_169" d="M71.415 64.687a7.215 7.215 0 1 0-6.729 6.728 7.222 7.222 0 0 0 6.729-6.728z" fill="none" data-name="Path 169" transform="translate(-14.277 -14.276)"></path>
<path id="Path_170" d="M60.863 59.8l-6.093-6.09a7.78 7.78 0 1 0-1.06 1.06l6.09 6.093a.468.468 0 0 0 .662 0l.4-.4a.468.468 0 0 0 .001-.663zM42.512 49.183a6.274 6.274 0 1 1 5.851 5.85 6.28 6.28 0 0 1-5.851-5.85z" fill="#51504f" data-name="Path 170"></path>
</g>
</svg>
</button>
</form>
</div>
<style>
.searchb-box {
margin-bottom: 26px;
}
.searchb-box .search-form {
width: 100%;
margin-top: 20px;
}
</style>
<div class="toctree" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Content</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="project.html">Project</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
<li class="toctree-l1"><a class="reference internal" href="start.html">Quick Start</a></li>
<li class="toctree-l1"><a class="reference internal" href="start.html#basic-airflow-architecture">Basic Airflow architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Upgrading to Airflow 2.0+</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#step-1-upgrade-to-python-3">Step 1: Upgrade to Python 3</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-2-upgrade-to-airflow-1-10-14-a-k-a-our-bridge-release">Step 2: Upgrade to Airflow 1.10.14 (a.k.a our &quot;bridge&quot; release)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-3-install-and-run-the-upgrade-check-scripts">Step 3: Install and run the Upgrade check scripts</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-4-import-operators-from-backport-providers">Step 4: Import Operators from Backport Providers</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-5-upgrade-airflow-dags">Step 5: Upgrade Airflow DAGs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-6-upgrade-configuration-settings">Step 6: Upgrade Configuration settings</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-7-upgrade-to-airflow-2-0">Step 7: Upgrade to Airflow 2.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="#appendix">Appendix</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#changed-parameters-for-the-kubernetespodoperator">Changed Parameters for the KubernetesPodOperator</a></li>
<li class="toctree-l3"><a class="reference internal" href="#migration-guide-from-experimental-api-to-stable-api-v1">Migration Guide from Experimental API to Stable API v1</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes-to-exception-handling-for-from-dag-callbacks">Changes to Exception handling for from DAG callbacks</a></li>
<li class="toctree-l3"><a class="reference internal" href="#airflow-cli-changes-in-2-0">Airflow CLI changes in 2.0</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes-to-airflow-plugins">Changes to Airflow Plugins</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes-to-extras-names">Changes to extras names</a></li>
<li class="toctree-l3"><a class="reference internal" href="#support-for-airflow-1-10-x-releases">Support for Airflow 1.10.x releases</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="upgrade-check.html">Upgrade Check Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial_taskflow_api.html">Tutorial on the Taskflow API</a></li>
<li class="toctree-l1"><a class="reference internal" href="howto/index.html">How-to Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="ui.html">UI / Screenshots</a></li>
<li class="toctree-l1"><a class="reference internal" href="concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="scheduler.html">Scheduler</a></li>
<li class="toctree-l1"><a class="reference internal" href="executor/index.html">Executor</a></li>
<li class="toctree-l1"><a class="reference internal" href="dag-run.html">DAG Runs</a></li>
<li class="toctree-l1"><a class="reference internal" href="plugins.html">Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="security/index.html">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="logging-monitoring/index.html">Logging &amp; Monitoring</a></li>
<li class="toctree-l1"><a class="reference internal" href="timezone.html">Time zones</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage-cli.html">Using the CLI</a></li>
<li class="toctree-l1"><a class="reference internal" href="integration.html">Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="kubernetes.html">Kubernetes</a></li>
<li class="toctree-l1"><a class="reference internal" href="lineage.html">Lineage</a></li>
<li class="toctree-l1"><a class="reference internal" href="dag-serialization.html">DAG Serialization</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules_management.html">Modules Management</a></li>
<li class="toctree-l1"><a class="reference internal" href="smart-sensor.html">Smart Sensor</a></li>
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
<li class="toctree-l1"><a class="reference internal" href="best-practices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="production-deployment.html">Production Deployment</a></li>
<li class="toctree-l1"><a class="reference internal" href="backport-providers.html">Backport Providers</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="privacy_notice.html">Privacy Notice</a></li>
</ul>
<p class="caption"><span class="caption-text">References</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="operators-and-hooks-ref.html">Operators and hooks</a></li>
<li class="toctree-l1"><a class="reference internal" href="cli-and-env-variables-ref.html">CLI</a></li>
<li class="toctree-l1"><a class="reference internal" href="macros-ref.html">Macros</a></li>
<li class="toctree-l1"><a class="reference internal" href="python-api-ref.html">Python API</a></li>
<li class="toctree-l1"><a class="reference internal" href="rest-api-ref.html">Experimental REST API</a></li>
<li class="toctree-l1"><a class="reference internal" href="stable-rest-api-ref.html">Stable REST API</a></li>
<li class="toctree-l1"><a class="reference internal" href="configurations-ref.html">Configurations</a></li>
<li class="toctree-l1"><a class="reference internal" href="extra-packages-ref.html">Extra packages</a></li>
</ul>
</div>
<style type="text/css">
.toctree {
}
.toctree li {
list-style: none;
}
.toctree .caption {
font-family: Roboto;
font-size: 18px;
font-weight: bold;
font-stretch: normal;
font-style: normal;
line-height: 1.33;
letter-spacing: normal;
color: #51504f;
padding-bottom: 13px;
text-transform: uppercase;
margin-bottom: 0;
}
.toctree .current > a:not([href="#"]) {
color: #017cee;
}
.toctree > ul {
padding-left: 0;
}
.toctree ul {
padding-left: 15px;
display: none;
}
.toctree > ul,
.toctree li.current > ul {
display: block;
}
.toctree a .toctree-expand {
display: inline-block;
position: relative;
height: 1em;
}
.toctree a .toctree-expand:before {
position: absolute;
top: 6px;
left: -12px;
content: '►';
font-size: 7px;
}
.toctree .current > a > .toctree-expand:before {
content: '▼';
}
.toctree .current {
color: #017cee;
}
.toctree li {
font-family: Roboto;
font-size: 16px;
font-weight: normal;
font-stretch: normal;
font-style: normal;
line-height: 1.63;
letter-spacing: normal;
color: #707070;
}
</style>
</div>
</div>
</div>
</div>
<div class="d-flex">
<div class="td-sidebar desktop-only d-print-none">
<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
<a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<span class="bodytext__medium--greyish-brown">Version: </span><span class="version">2.0.0</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
</div>
<script type="application/x-template" id="version-item-template">
<a class="dropdown-item"></a>
</script>
</div>
<div class="searchb-box">
<form class="search-form" action="search.html" method="get">
<input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
<button class="search-form__button" type="submit">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<g id="Group_1579" data-name="Group 1579" transform="translate(-41.001 -41)">
<path id="Path_169" d="M71.415 64.687a7.215 7.215 0 1 0-6.729 6.728 7.222 7.222 0 0 0 6.729-6.728z" fill="none" data-name="Path 169" transform="translate(-14.277 -14.276)"></path>
<path id="Path_170" d="M60.863 59.8l-6.093-6.09a7.78 7.78 0 1 0-1.06 1.06l6.09 6.093a.468.468 0 0 0 .662 0l.4-.4a.468.468 0 0 0 .001-.663zM42.512 49.183a6.274 6.274 0 1 1 5.851 5.85 6.28 6.28 0 0 1-5.851-5.85z" fill="#51504f" data-name="Path 170"></path>
</g>
</svg>
</button>
</form>
</div>
<style>
.searchb-box {
margin-bottom: 26px;
}
.searchb-box .search-form {
width: 100%;
margin-top: 20px;
}
</style>
<div class="toctree" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Content</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="project.html">Project</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
<li class="toctree-l1"><a class="reference internal" href="start.html">Quick Start</a></li>
<li class="toctree-l1"><a class="reference internal" href="start.html#basic-airflow-architecture">Basic Airflow architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Upgrading to Airflow 2.0+</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#step-1-upgrade-to-python-3">Step 1: Upgrade to Python 3</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-2-upgrade-to-airflow-1-10-14-a-k-a-our-bridge-release">Step 2: Upgrade to Airflow 1.10.14 (a.k.a our &quot;bridge&quot; release)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-3-install-and-run-the-upgrade-check-scripts">Step 3: Install and run the Upgrade check scripts</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-4-import-operators-from-backport-providers">Step 4: Import Operators from Backport Providers</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-5-upgrade-airflow-dags">Step 5: Upgrade Airflow DAGs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-6-upgrade-configuration-settings">Step 6: Upgrade Configuration settings</a></li>
<li class="toctree-l2"><a class="reference internal" href="#step-7-upgrade-to-airflow-2-0">Step 7: Upgrade to Airflow 2.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="#appendix">Appendix</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#changed-parameters-for-the-kubernetespodoperator">Changed Parameters for the KubernetesPodOperator</a></li>
<li class="toctree-l3"><a class="reference internal" href="#migration-guide-from-experimental-api-to-stable-api-v1">Migration Guide from Experimental API to Stable API v1</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes-to-exception-handling-for-from-dag-callbacks">Changes to Exception handling for from DAG callbacks</a></li>
<li class="toctree-l3"><a class="reference internal" href="#airflow-cli-changes-in-2-0">Airflow CLI changes in 2.0</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes-to-airflow-plugins">Changes to Airflow Plugins</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes-to-extras-names">Changes to extras names</a></li>
<li class="toctree-l3"><a class="reference internal" href="#support-for-airflow-1-10-x-releases">Support for Airflow 1.10.x releases</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="upgrade-check.html">Upgrade Check Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial_taskflow_api.html">Tutorial on the Taskflow API</a></li>
<li class="toctree-l1"><a class="reference internal" href="howto/index.html">How-to Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="ui.html">UI / Screenshots</a></li>
<li class="toctree-l1"><a class="reference internal" href="concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="scheduler.html">Scheduler</a></li>
<li class="toctree-l1"><a class="reference internal" href="executor/index.html">Executor</a></li>
<li class="toctree-l1"><a class="reference internal" href="dag-run.html">DAG Runs</a></li>
<li class="toctree-l1"><a class="reference internal" href="plugins.html">Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="security/index.html">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="logging-monitoring/index.html">Logging &amp; Monitoring</a></li>
<li class="toctree-l1"><a class="reference internal" href="timezone.html">Time zones</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage-cli.html">Using the CLI</a></li>
<li class="toctree-l1"><a class="reference internal" href="integration.html">Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="kubernetes.html">Kubernetes</a></li>
<li class="toctree-l1"><a class="reference internal" href="lineage.html">Lineage</a></li>
<li class="toctree-l1"><a class="reference internal" href="dag-serialization.html">DAG Serialization</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules_management.html">Modules Management</a></li>
<li class="toctree-l1"><a class="reference internal" href="smart-sensor.html">Smart Sensor</a></li>
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li>
<li class="toctree-l1"><a class="reference internal" href="best-practices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="production-deployment.html">Production Deployment</a></li>
<li class="toctree-l1"><a class="reference internal" href="backport-providers.html">Backport Providers</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="privacy_notice.html">Privacy Notice</a></li>
</ul>
<p class="caption"><span class="caption-text">References</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="operators-and-hooks-ref.html">Operators and hooks</a></li>
<li class="toctree-l1"><a class="reference internal" href="cli-and-env-variables-ref.html">CLI</a></li>
<li class="toctree-l1"><a class="reference internal" href="macros-ref.html">Macros</a></li>
<li class="toctree-l1"><a class="reference internal" href="python-api-ref.html">Python API</a></li>
<li class="toctree-l1"><a class="reference internal" href="rest-api-ref.html">Experimental REST API</a></li>
<li class="toctree-l1"><a class="reference internal" href="stable-rest-api-ref.html">Stable REST API</a></li>
<li class="toctree-l1"><a class="reference internal" href="configurations-ref.html">Configurations</a></li>
<li class="toctree-l1"><a class="reference internal" href="extra-packages-ref.html">Extra packages</a></li>
</ul>
</div>
<style type="text/css">
.toctree {
}
.toctree li {
list-style: none;
}
.toctree .caption {
font-family: Roboto;
font-size: 18px;
font-weight: bold;
font-stretch: normal;
font-style: normal;
line-height: 1.33;
letter-spacing: normal;
color: #51504f;
padding-bottom: 13px;
text-transform: uppercase;
margin-bottom: 0;
}
.toctree .current > a:not([href="#"]) {
color: #017cee;
}
.toctree > ul {
padding-left: 0;
}
.toctree ul {
padding-left: 15px;
display: none;
}
.toctree > ul,
.toctree li.current > ul {
display: block;
}
.toctree a .toctree-expand {
display: inline-block;
position: relative;
height: 1em;
}
.toctree a .toctree-expand:before {
position: absolute;
top: 6px;
left: -12px;
content: '►';
font-size: 7px;
}
.toctree .current > a > .toctree-expand:before {
content: '▼';
}
.toctree .current {
color: #017cee;
}
.toctree li {
font-family: Roboto;
font-size: 16px;
font-weight: normal;
font-stretch: normal;
font-style: normal;
line-height: 1.63;
letter-spacing: normal;
color: #707070;
}
</style>
</div>
<main class="col-12 col-md-9 col-xl-8" role="main">
<div role="navigation" aria-label="breadcrumbs navigation" class="d-none d-md-block d-print-none">
<ul class="breadcrumb">
<li class="breadcrumb-item"><a href="index.html" class="icon icon-home"> Home</a></li>
<li class="breadcrumb-item"><a href="upgrading-to-2.html"> Upgrading to Airflow 2.0+</a></li>
</ul>
</div>
<div class="rst-content">
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="upgrading-to-airflow-2-0">
<h1>Upgrading to Airflow 2.0+<a class="headerlink" href="#upgrading-to-airflow-2-0" title="Permalink to this headline"></a></h1>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#step-1-upgrade-to-python-3" id="id1">Step 1: Upgrade to Python 3</a></p></li>
<li><p><a class="reference internal" href="#step-2-upgrade-to-airflow-1-10-14-a-k-a-our-bridge-release" id="id2">Step 2: Upgrade to Airflow 1.10.14 (a.k.a our &quot;bridge&quot; release)</a></p></li>
<li><p><a class="reference internal" href="#step-3-install-and-run-the-upgrade-check-scripts" id="id3">Step 3: Install and run the Upgrade check scripts</a></p></li>
<li><p><a class="reference internal" href="#step-4-import-operators-from-backport-providers" id="id4">Step 4: Import Operators from Backport Providers</a></p></li>
<li><p><a class="reference internal" href="#step-5-upgrade-airflow-dags" id="id5">Step 5: Upgrade Airflow DAGs</a></p></li>
<li><p><a class="reference internal" href="#step-6-upgrade-configuration-settings" id="id6">Step 6: Upgrade Configuration settings</a></p></li>
<li><p><a class="reference internal" href="#step-7-upgrade-to-airflow-2-0" id="id7">Step 7: Upgrade to Airflow 2.0</a></p></li>
<li><p><a class="reference internal" href="#appendix" id="id8">Appendix</a></p>
<ul>
<li><p><a class="reference internal" href="#changed-parameters-for-the-kubernetespodoperator" id="id9">Changed Parameters for the KubernetesPodOperator</a></p></li>
<li><p><a class="reference internal" href="#migration-guide-from-experimental-api-to-stable-api-v1" id="id10">Migration Guide from Experimental API to Stable API v1</a></p></li>
<li><p><a class="reference internal" href="#changes-to-exception-handling-for-from-dag-callbacks" id="id11">Changes to Exception handling for from DAG callbacks</a></p></li>
<li><p><a class="reference internal" href="#airflow-cli-changes-in-2-0" id="id12">Airflow CLI changes in 2.0</a></p></li>
<li><p><a class="reference internal" href="#changes-to-airflow-plugins" id="id13">Changes to Airflow Plugins</a></p></li>
<li><p><a class="reference internal" href="#changes-to-extras-names" id="id14">Changes to extras names</a></p></li>
<li><p><a class="reference internal" href="#support-for-airflow-1-10-x-releases" id="id15">Support for Airflow 1.10.x releases</a></p></li>
</ul>
</li>
</ul>
</div>
<p>Apache Airflow 2.0 is a major release and the purpose of this document is to assist
users to migrate from Airflow 1.10.x to Airflow 2.0.</p>
<div class="section" id="step-1-upgrade-to-python-3">
<h2><a class="toc-backref" href="#id1">Step 1: Upgrade to Python 3</a><a class="headerlink" href="#step-1-upgrade-to-python-3" title="Permalink to this headline"></a></h2>
<p>Airflow 1.10 will be the last release series to support Python 2. Airflow 2.0.0 will
require Python 3.6+ and at this point in time has been tested with Python versions 3.6, 3.7,
and 3.8, but does not yet support Python 3.9.</p>
<p>If you have a specific task that still requires Python 2 then you can use the <a class="reference internal" href="_api/airflow/operators/python/index.html#airflow.operators.python.PythonVirtualenvOperator" title="airflow.operators.python.PythonVirtualenvOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">PythonVirtualenvOperator</span></code></a> or the <code class="docutils literal notranslate"><span class="pre">KubernetesPodOperator</span></code> for this.</p>
<p>For a list of breaking changes between Python 2 and Python 3, please refer to this
[handy blog](<a class="reference external" href="https://blog.couchbase.com/tips-and-tricks-for-upgrading-from-python-2-to-python-3/">https://blog.couchbase.com/tips-and-tricks-for-upgrading-from-python-2-to-python-3/</a>)
from the CouchBaseDB team.</p>
</div>
<div class="section" id="step-2-upgrade-to-airflow-1-10-14-a-k-a-our-bridge-release">
<h2><a class="toc-backref" href="#id2">Step 2: Upgrade to Airflow 1.10.14 (a.k.a our &quot;bridge&quot; release)</a><a class="headerlink" href="#step-2-upgrade-to-airflow-1-10-14-a-k-a-our-bridge-release" title="Permalink to this headline"></a></h2>
<p>To minimize friction for users upgrading from Airflow 1.10 to Airflow 2.0 and beyond, Airflow 1.10.14 &quot;a bridge release&quot; has
been created. This is intended to be the final 1.10 feature release. Airflow 1.10.14 includes support for various features
that have been backported from Airflow 2.0 to make it easy for users to test their Airflow
environment before upgrading to Airflow 2.0.</p>
<p>We strongly recommend that all users upgrading to Airflow 2.0, first
upgrade to Airflow 1.10.14 and test their Airflow deployment and only then upgrade to Airflow 2.0. After the
Airflow 2.0 GA (General Availability) release, it is expected that all future Airflow development would be
based on Airflow 2.0. The Airflow 1.10.x release tree will be supported for a limited time after the GA
release of Airflow 2.0.</p>
<p>Features in 1.10.14 include:</p>
<p>1. Most breaking DAG and architecture changes of Airflow 2.0 have been backported to Airflow 1.10.14. This backward-compatibility does not mean
that 1.10.14 will process these DAGs the same way as Airflow 2.0. Instead, this means that most Airflow 2.0
compatible DAGs will work in Airflow 1.10.14. This backport will give users time to modify their DAGs over time
without any service disruption.</p>
<p>2. We have also backported the updated Airflow 2.0 CLI commands to Airflow 1.10.4, so that users can modify their scripts
to be compatible with Airflow 2.0 before the upgrade.</p>
<p>3. For users of the KubernetesExecutor, we have backported the <code class="docutils literal notranslate"><span class="pre">pod_template_file</span></code> capability for the KubernetesExecutor
as well as a script that will generate a <code class="docutils literal notranslate"><span class="pre">pod_template_file</span></code> based on your <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code> settings. To generate this file
simply run the following command:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow generate_pod_template -o &lt;output file path&gt;
</pre></div>
</div>
<p>Once you have performed this step, simply write out the file path to this file in the <code class="docutils literal notranslate"><span class="pre">pod_template_file</span></code> config of the <code class="docutils literal notranslate"><span class="pre">kubernetes</span></code>
section of your <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code></p>
</div>
<div class="section" id="step-3-install-and-run-the-upgrade-check-scripts">
<h2><a class="toc-backref" href="#id3">Step 3: Install and run the Upgrade check scripts</a><a class="headerlink" href="#step-3-install-and-run-the-upgrade-check-scripts" title="Permalink to this headline"></a></h2>
<p>After upgrading to Airflow 1.10.14, we recommend that you install the &quot;upgrade check&quot; scripts. These scripts will read through your <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code> and all of your DAGs and will give a detailed report of all changes required before upgrading. We are testing this script diligently, and our goal is that any Airflow setup that can pass these tests will be able to upgrade to 2.0 without any issues.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip install apache-airflow-upgrade-check
</pre></div>
</div>
<p>Once this is installed, please run the upgrade check script.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow upgrade_check
</pre></div>
</div>
<p>More details about this process are here <a class="reference internal" href="upgrade-check.html#upgrade-check"><span class="std std-ref">Upgrade Check Scripts</span></a>.</p>
</div>
<div class="section" id="step-4-import-operators-from-backport-providers">
<h2><a class="toc-backref" href="#id4">Step 4: Import Operators from Backport Providers</a><a class="headerlink" href="#step-4-import-operators-from-backport-providers" title="Permalink to this headline"></a></h2>
<p>Now that you are set up in Airflow 1.10.14 with Python a 3.6+ environment, you are ready to start porting your DAGs to Airflow 2.0 compliance!</p>
<p>The most important step in this transition is also the easiest step to do in pieces. All Airflow 2.0 operators are backwards compatible with Airflow 1.10
using the backport provider packages. In your own time, you can transition to using these backport-providers
by pip installing the provider via <code class="docutils literal notranslate"><span class="pre">pypi</span></code> and changing the import path.</p>
<p>For example: While historically you might have imported the DockerOperator in this fashion:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.operators.docker_operator</span> <span class="kn">import</span> <span class="n">DockerOperator</span>
</pre></div>
</div>
<p>You would now run this command to install the provider:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip install apache-airflow-backport-providers-docker
</pre></div>
</div>
<p>and then import the operator with this path:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.providers.docker.operators.docker</span> <span class="kn">import</span> <span class="n">DockerOperator</span>
</pre></div>
</div>
<p>Please note that the backport provider packages are just backports of the provider packages compatible with Airflow 2.0.
For example:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip install <span class="s1">&#39;apache-airflow[docker]&#39;</span>
</pre></div>
</div>
<p>automatically installs the <code class="docutils literal notranslate"><span class="pre">apache-airflow-providers-docker</span></code> package.
But you can manage/upgrade/remove provider packages separately from the Airflow core.</p>
<p>After you upgrade to Apache Airflow 2.0, those provider packages are installed automatically when you install Airflow with extras.
Several of the providers (http, ftp, sqlite, imap) will also be installed automatically when you install Airflow even without extras.
You can read more about providers at <a class="reference external" href="/docs/apache-airflow-providers/index.html" title="(in apache-airflow-providers vmaster)"><span>Provider packages</span></a>.</p>
</div>
<div class="section" id="step-5-upgrade-airflow-dags">
<h2><a class="toc-backref" href="#id5">Step 5: Upgrade Airflow DAGs</a><a class="headerlink" href="#step-5-upgrade-airflow-dags" title="Permalink to this headline"></a></h2>
<p><strong>Change to undefined variable handling in templates</strong></p>
<p>Prior to Airflow 2.0 Jinja Templates would permit the use of undefined variables. They would render as an
empty string, with no indication to the user an undefined variable was used. With this release, any template
rendering involving undefined variables will fail the task, as well as displaying an error in the UI when
rendering.</p>
<p>The behavior can be reverted when instantiating a DAG.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">jinja2</span>
<span class="n">dag</span> <span class="o">=</span> <span class="n">DAG</span><span class="p">(</span><span class="s1">&#39;simple_dag&#39;</span><span class="p">,</span> <span class="n">template_undefined</span><span class="o">=</span><span class="n">jinja2</span><span class="o">.</span><span class="n">Undefined</span><span class="p">)</span>
</pre></div>
</div>
<p>Alternatively, it is also possible to override each Jinja Template variable on an individual basis
by using the <code class="docutils literal notranslate"><span class="pre">|</span> <span class="pre">default</span></code> Jinja filter as shown below.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="p">{{</span> <span class="n">a</span> <span class="o">|</span> <span class="n">default</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">}}</span>
</pre></div>
</div>
<p><strong>Changes to the KubernetesPodOperator</strong></p>
<p>Much like the <code class="docutils literal notranslate"><span class="pre">KubernetesExecutor</span></code>, the <code class="docutils literal notranslate"><span class="pre">KubernetesPodOperator</span></code> will no longer take Airflow custom classes and will
instead expect either a pod_template yaml file, or <code class="docutils literal notranslate"><span class="pre">kubernetes.client.models</span></code> objects.</p>
<p>The one notable exception is that we will continue to support the <code class="docutils literal notranslate"><span class="pre">airflow.kubernetes.secret.Secret</span></code> class.</p>
<p>Whereas previously a user would import each individual class to build the pod as so:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.kubernetes.pod</span> <span class="kn">import</span> <span class="n">Port</span>
<span class="kn">from</span> <span class="nn">airflow.kubernetes.volume</span> <span class="kn">import</span> <span class="n">Volume</span>
<span class="kn">from</span> <span class="nn">airflow.kubernetes.secret</span> <span class="kn">import</span> <span class="n">Secret</span>
<span class="kn">from</span> <span class="nn">airflow.kubernetes.volume_mount</span> <span class="kn">import</span> <span class="n">VolumeMount</span>
<span class="n">volume_config</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;persistentVolumeClaim&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;claimName&#39;</span><span class="p">:</span> <span class="s1">&#39;test-volume&#39;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">volume</span> <span class="o">=</span> <span class="n">Volume</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span> <span class="n">configs</span><span class="o">=</span><span class="n">volume_config</span><span class="p">)</span>
<span class="n">volume_mount</span> <span class="o">=</span> <span class="n">VolumeMount</span><span class="p">(</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span>
<span class="n">mount_path</span><span class="o">=</span><span class="s1">&#39;/root/mount_file&#39;</span><span class="p">,</span>
<span class="n">sub_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">read_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">port</span> <span class="o">=</span> <span class="n">Port</span><span class="p">(</span><span class="s1">&#39;http&#39;</span><span class="p">,</span> <span class="mi">80</span><span class="p">)</span>
<span class="n">secret_file</span> <span class="o">=</span> <span class="n">Secret</span><span class="p">(</span><span class="s1">&#39;volume&#39;</span><span class="p">,</span> <span class="s1">&#39;/etc/sql_conn&#39;</span><span class="p">,</span> <span class="s1">&#39;airflow-secrets&#39;</span><span class="p">,</span> <span class="s1">&#39;sql_alchemy_conn&#39;</span><span class="p">)</span>
<span class="n">secret_env</span> <span class="o">=</span> <span class="n">Secret</span><span class="p">(</span><span class="s1">&#39;env&#39;</span><span class="p">,</span> <span class="s1">&#39;SQL_CONN&#39;</span><span class="p">,</span> <span class="s1">&#39;airflow-secrets&#39;</span><span class="p">,</span> <span class="s1">&#39;sql_alchemy_conn&#39;</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo&quot;</span><span class="p">,</span> <span class="s2">&quot;10&quot;</span><span class="p">],</span>
<span class="n">labels</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;foo&quot;</span><span class="p">:</span> <span class="s2">&quot;bar&quot;</span><span class="p">},</span>
<span class="n">secrets</span><span class="o">=</span><span class="p">[</span><span class="n">secret_file</span><span class="p">,</span> <span class="n">secret_env</span><span class="p">],</span>
<span class="n">ports</span><span class="o">=</span><span class="p">[</span><span class="n">port</span><span class="p">],</span>
<span class="n">volumes</span><span class="o">=</span><span class="p">[</span><span class="n">volume</span><span class="p">],</span>
<span class="n">volume_mounts</span><span class="o">=</span><span class="p">[</span><span class="n">volume_mount</span><span class="p">],</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;airflow-test-pod&quot;</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="n">affinity</span><span class="o">=</span><span class="n">affinity</span><span class="p">,</span>
<span class="n">is_delete_operator_pod</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">hostnetwork</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">tolerations</span><span class="o">=</span><span class="n">tolerations</span><span class="p">,</span>
<span class="n">configmaps</span><span class="o">=</span><span class="n">configmaps</span><span class="p">,</span>
<span class="n">init_containers</span><span class="o">=</span><span class="p">[</span><span class="n">init_container</span><span class="p">],</span>
<span class="n">priority_class_name</span><span class="o">=</span><span class="s2">&quot;medium&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>Now the user can use the <code class="docutils literal notranslate"><span class="pre">kubernetes.client.models</span></code> class as a single point of entry for creating all k8s objects.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="kn">from</span> <span class="nn">airflow.kubernetes.secret</span> <span class="kn">import</span> <span class="n">Secret</span>
<span class="n">configmaps</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;test-configmap-1&#39;</span><span class="p">,</span> <span class="s1">&#39;test-configmap-2&#39;</span><span class="p">]</span>
<span class="n">volume</span> <span class="o">=</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1Volume</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span>
<span class="n">persistent_volume_claim</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1PersistentVolumeClaimVolumeSource</span><span class="p">(</span><span class="n">claim_name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">port</span> <span class="o">=</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1ContainerPort</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;http&#39;</span><span class="p">,</span> <span class="n">container_port</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span>
<span class="n">secret_file</span> <span class="o">=</span> <span class="n">Secret</span><span class="p">(</span><span class="s1">&#39;volume&#39;</span><span class="p">,</span> <span class="s1">&#39;/etc/sql_conn&#39;</span><span class="p">,</span> <span class="s1">&#39;airflow-secrets&#39;</span><span class="p">,</span> <span class="s1">&#39;sql_alchemy_conn&#39;</span><span class="p">)</span>
<span class="n">secret_env</span> <span class="o">=</span> <span class="n">Secret</span><span class="p">(</span><span class="s1">&#39;env&#39;</span><span class="p">,</span> <span class="s1">&#39;SQL_CONN&#39;</span><span class="p">,</span> <span class="s1">&#39;airflow-secrets&#39;</span><span class="p">,</span> <span class="s1">&#39;sql_alchemy_conn&#39;</span><span class="p">)</span>
<span class="n">secret_all_keys</span> <span class="o">=</span> <span class="n">Secret</span><span class="p">(</span><span class="s1">&#39;env&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">&#39;airflow-secrets-2&#39;</span><span class="p">)</span>
<span class="n">volume_mount</span> <span class="o">=</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1VolumeMount</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span> <span class="n">mount_path</span><span class="o">=</span><span class="s1">&#39;/root/mount_file&#39;</span><span class="p">,</span> <span class="n">sub_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">read_only</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo&quot;</span><span class="p">,</span> <span class="s2">&quot;10&quot;</span><span class="p">],</span>
<span class="n">labels</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;foo&quot;</span><span class="p">:</span> <span class="s2">&quot;bar&quot;</span><span class="p">},</span>
<span class="n">secrets</span><span class="o">=</span><span class="p">[</span><span class="n">secret_file</span><span class="p">,</span> <span class="n">secret_env</span><span class="p">],</span>
<span class="n">ports</span><span class="o">=</span><span class="p">[</span><span class="n">port</span><span class="p">],</span>
<span class="n">volumes</span><span class="o">=</span><span class="p">[</span><span class="n">volume</span><span class="p">],</span>
<span class="n">volume_mounts</span><span class="o">=</span><span class="p">[</span><span class="n">volume_mount</span><span class="p">],</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;airflow-test-pod&quot;</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="n">is_delete_operator_pod</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">hostnetwork</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>
</div>
<p>We decided to keep the Secret class as users seem to really like that simplifies the complexity of mounting
Kubernetes secrets into workers.</p>
<p>For a more detailed list of changes to the KubernetesPodOperator API, please read the section in the Appendix titled &quot;Changed Parameters for the KubernetesPodOperator&quot;</p>
<p><strong>Change default value for dag_run_conf_overrides_params</strong></p>
<p>DagRun configuration dictionary will now by default overwrite params dictionary. If you pass some key-value pairs
through <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">backfill</span> <span class="pre">-c</span></code> or <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">trigger</span> <span class="pre">-c</span></code>, the key-value pairs will
override the existing ones in params. You can revert this behaviour by setting <code class="docutils literal notranslate"><span class="pre">dag_run_conf_overrides_params</span></code> to <code class="docutils literal notranslate"><span class="pre">False</span></code>
in your <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code>.</p>
<p><strong>DAG discovery safe mode is now case insensitive</strong></p>
<p>When <code class="docutils literal notranslate"><span class="pre">DAG_DISCOVERY_SAFE_MODE</span></code> is active, Airflow will now filter all files that contain the string <code class="docutils literal notranslate"><span class="pre">airflow</span></code> and <code class="docutils literal notranslate"><span class="pre">dag</span></code>
in a case insensitive mode. This is being changed to better support the new <code class="docutils literal notranslate"><span class="pre">&#64;dag</span></code> decorator.</p>
<p><strong>Change to Permissions</strong></p>
<p>The DAG-level permission actions, <code class="docutils literal notranslate"><span class="pre">can_dag_read</span></code> and <code class="docutils literal notranslate"><span class="pre">can_dag_edit</span></code> are deprecated as part of Airflow 2.0. They are
being replaced with <code class="docutils literal notranslate"><span class="pre">can_read</span></code> and <code class="docutils literal notranslate"><span class="pre">can_edit</span></code>. When a role is given DAG-level access, the resource name (or &quot;view menu&quot;,
in Flask App-Builder parlance) will now be prefixed with <code class="docutils literal notranslate"><span class="pre">DAG:</span></code>. So the action <code class="docutils literal notranslate"><span class="pre">can_dag_read</span></code> on <code class="docutils literal notranslate"><span class="pre">example_dag_id</span></code>, is
now represented as <code class="docutils literal notranslate"><span class="pre">can_read</span></code> on <code class="docutils literal notranslate"><span class="pre">DAG:example_dag_id</span></code>.
There is a special view called <code class="docutils literal notranslate"><span class="pre">DAGs</span></code> (it was called <code class="docutils literal notranslate"><span class="pre">all_dags</span></code> in versions 1.10.x) which allows the role to access
all the DAGs. The default <code class="docutils literal notranslate"><span class="pre">Admin</span></code>, <code class="docutils literal notranslate"><span class="pre">Viewer</span></code>, <code class="docutils literal notranslate"><span class="pre">User</span></code>, <code class="docutils literal notranslate"><span class="pre">Op</span></code> roles can all access the <code class="docutils literal notranslate"><span class="pre">DAGs</span></code> view.</p>
<p><em>As part of running ``airflow db upgrade``, existing permissions will be migrated for you.</em></p>
<p>When DAGs are initialized with the <code class="docutils literal notranslate"><span class="pre">access_control</span></code> variable set, any usage of the old permission names will automatically be updated in the database, so this won't be a breaking change. A DeprecationWarning will be raised.</p>
<p><strong>Drop legacy UI in favor of FAB RBAC UI</strong></p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Breaking change</p>
<p>Previously we were using two versions of UI, which were hard to maintain as we need to implement/update the same feature
in both versions. With this release we've removed the older UI in favor of Flask App Builder RBAC UI. No need to set the
RBAC UI explicitly in the configuration now as this is the only default UI. We did it to avoid
the huge maintenance burden of two independent user interfaces</p>
</div>
<p>Please note that that custom auth backends will need re-writing to target new FAB based UI.</p>
<p>As part of this change, a few configuration items in <code class="docutils literal notranslate"><span class="pre">[webserver]</span></code> section are removed and no longer applicable,
including <code class="docutils literal notranslate"><span class="pre">authenticate</span></code>, <code class="docutils literal notranslate"><span class="pre">filter_by_owner</span></code>, <code class="docutils literal notranslate"><span class="pre">owner_mode</span></code>, and <code class="docutils literal notranslate"><span class="pre">rbac</span></code>.</p>
<p>Before upgrading to this release, we recommend activating the new FAB RBAC UI. For that, you should set
the <code class="docutils literal notranslate"><span class="pre">rbac</span></code> options in <code class="docutils literal notranslate"><span class="pre">[webserver]</span></code> in the <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code> file to <code class="docutils literal notranslate"><span class="pre">true</span></code></p>
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[webserver]</span>
<span class="na">rbac</span> <span class="o">=</span> <span class="s">true</span>
</pre></div>
</div>
<p>In order to login to the interface, you need to create an administrator account.</p>
<p>Assuming you have already installed Airflow 1.10.14, you can create a user with
Airflow 2.0 CLI command syntax <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">users</span> <span class="pre">create</span></code>.
You don't need to make changes to the configuration file as the FAB RBAC UI is
the only supported UI.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow users create <span class="se">\</span>
--role Admin <span class="se">\</span>
--username admin <span class="se">\</span>
--firstname FIRST_NAME <span class="se">\</span>
--lastname LAST_NAME <span class="se">\</span>
--email EMAIL@example.org
</pre></div>
</div>
<p><strong>Breaking Change in OAuth</strong></p>
<p>The <code class="docutils literal notranslate"><span class="pre">flask-ouathlib</span></code> has been replaced with <code class="docutils literal notranslate"><span class="pre">authlib</span></code> because <code class="docutils literal notranslate"><span class="pre">flask-outhlib</span></code> has
been deprecated in favor of <code class="docutils literal notranslate"><span class="pre">authlib</span></code>.
The Old and New provider configuration keys that have changed are as follows</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 57%" />
<col style="width: 43%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Old Keys</p></th>
<th class="head"><p>New keys</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">consumer_key</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">client_id</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">consumer_secret</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">client_secret</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">base_url</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">api_base_url</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">request_token_params</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">client_kwargs</span></code></p></td>
</tr>
</tbody>
</table>
<p>For more information, visit <a class="reference external" href="https://flask-appbuilder.readthedocs.io/en/latest/security.html#authentication-oauth">https://flask-appbuilder.readthedocs.io/en/latest/security.html#authentication-oauth</a></p>
</div>
<div class="section" id="step-6-upgrade-configuration-settings">
<h2><a class="toc-backref" href="#id6">Step 6: Upgrade Configuration settings</a><a class="headerlink" href="#step-6-upgrade-configuration-settings" title="Permalink to this headline"></a></h2>
<p>Airflow 2.0 is stricter with respect to expectations on configuration data and requires explicit
specifications of configuration values in more cases rather than defaulting to a generic value.</p>
<p>Some of these are detailed in the Upgrade Check guide, but a significant area of change is with
respect to the Kubernetes Executor. This is called out below for users of the Kubernetes Executor.</p>
<p><strong>Upgrade KubernetesExecutor settings</strong></p>
<p><em>The KubernetesExecutor Will No Longer Read from the airflow.cfg for Base Pod Configurations.</em></p>
<p>In Airflow 2.0, the KubernetesExecutor will require a base pod template written in yaml. This file can exist
anywhere on the host machine and will be linked using the <code class="docutils literal notranslate"><span class="pre">pod_template_file</span></code> configuration in the <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code> file.
You can create a <code class="docutils literal notranslate"><span class="pre">pod_template_file</span></code> by running the following command: <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">generate_pod_template</span></code></p>
<p>The <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code> will still accept values for the <code class="docutils literal notranslate"><span class="pre">worker_container_repository</span></code>, the <code class="docutils literal notranslate"><span class="pre">worker_container_tag</span></code>, and
the default namespace.</p>
<p>The following <code class="docutils literal notranslate"><span class="pre">airflow.cfg</span></code> values will be deprecated:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">worker_container_image_pull_policy</span>
<span class="n">airflow_configmap</span>
<span class="n">airflow_local_settings_configmap</span>
<span class="n">dags_in_image</span>
<span class="n">dags_volume_subpath</span>
<span class="n">dags_volume_mount_point</span>
<span class="n">dags_volume_claim</span>
<span class="n">logs_volume_subpath</span>
<span class="n">logs_volume_claim</span>
<span class="n">dags_volume_host</span>
<span class="n">logs_volume_host</span>
<span class="n">env_from_configmap_ref</span>
<span class="n">env_from_secret_ref</span>
<span class="n">git_repo</span>
<span class="n">git_branch</span>
<span class="n">git_sync_depth</span>
<span class="n">git_subpath</span>
<span class="n">git_sync_rev</span>
<span class="n">git_user</span>
<span class="n">git_password</span>
<span class="n">git_sync_root</span>
<span class="n">git_sync_dest</span>
<span class="n">git_dags_folder_mount_point</span>
<span class="n">git_ssh_key_secret_name</span>
<span class="n">git_ssh_known_hosts_configmap_name</span>
<span class="n">git_sync_credentials_secret</span>
<span class="n">git_sync_container_repository</span>
<span class="n">git_sync_container_tag</span>
<span class="n">git_sync_init_container_name</span>
<span class="n">git_sync_run_as_user</span>
<span class="n">worker_service_account_name</span>
<span class="n">image_pull_secrets</span>
<span class="n">gcp_service_account_keys</span>
<span class="n">affinity</span>
<span class="n">tolerations</span>
<span class="n">run_as_user</span>
<span class="n">fs_group</span>
<span class="p">[</span><span class="n">kubernetes_node_selectors</span><span class="p">]</span>
<span class="p">[</span><span class="n">kubernetes_annotations</span><span class="p">]</span>
<span class="p">[</span><span class="n">kubernetes_environment_variables</span><span class="p">]</span>
<span class="p">[</span><span class="n">kubernetes_secrets</span><span class="p">]</span>
<span class="p">[</span><span class="n">kubernetes_labels</span><span class="p">]</span>
</pre></div>
</div>
<p><strong>The ``executor_config`` Will Now Expect a ``kubernetes.client.models.V1Pod`` Class When Launching Tasks</strong></p>
<p>In Airflow 1.10.x, users could modify task pods at runtime by passing a dictionary to the <code class="docutils literal notranslate"><span class="pre">executor_config</span></code> variable.
Users will now have full access the Kubernetes API via the <code class="docutils literal notranslate"><span class="pre">kubernetes.client.models.V1Pod</span></code>.</p>
<p>While in the deprecated version a user would mount a volume using the following dictionary:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">second_task</span> <span class="o">=</span> <span class="n">PythonOperator</span><span class="p">(</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;four_task&quot;</span><span class="p">,</span>
<span class="n">python_callable</span><span class="o">=</span><span class="n">test_volume_mount</span><span class="p">,</span>
<span class="n">executor_config</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;KubernetesExecutor&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;volumes&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;example-kubernetes-test-volume&quot;</span><span class="p">,</span>
<span class="s2">&quot;hostPath&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;path&quot;</span><span class="p">:</span> <span class="s2">&quot;/tmp/&quot;</span><span class="p">},</span>
<span class="p">},</span>
<span class="p">],</span>
<span class="s2">&quot;volume_mounts&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;mountPath&quot;</span><span class="p">:</span> <span class="s2">&quot;/foo/&quot;</span><span class="p">,</span>
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;example-kubernetes-test-volume&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
</pre></div>
</div>
<p>In the new model a user can accomplish the same thing using the following code under the <code class="docutils literal notranslate"><span class="pre">pod_override</span></code> key:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">second_task</span> <span class="o">=</span> <span class="n">PythonOperator</span><span class="p">(</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;four_task&quot;</span><span class="p">,</span>
<span class="n">python_callable</span><span class="o">=</span><span class="n">test_volume_mount</span><span class="p">,</span>
<span class="n">executor_config</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;pod_override&quot;</span><span class="p">:</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1Pod</span><span class="p">(</span>
<span class="n">spec</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1PodSpec</span><span class="p">(</span>
<span class="n">containers</span><span class="o">=</span><span class="p">[</span>
<span class="n">k8s</span><span class="o">.</span><span class="n">V1Container</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;base&quot;</span><span class="p">,</span>
<span class="n">volume_mounts</span><span class="o">=</span><span class="p">[</span>
<span class="n">k8s</span><span class="o">.</span><span class="n">V1VolumeMount</span><span class="p">(</span>
<span class="n">mount_path</span><span class="o">=</span><span class="s2">&quot;/foo/&quot;</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;example-kubernetes-test-volume&quot;</span>
<span class="p">)</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="p">],</span>
<span class="n">volumes</span><span class="o">=</span><span class="p">[</span>
<span class="n">k8s</span><span class="o">.</span><span class="n">V1Volume</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;example-kubernetes-test-volume&quot;</span><span class="p">,</span>
<span class="n">host_path</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1HostPathVolumeSource</span><span class="p">(</span>
<span class="n">path</span><span class="o">=</span><span class="s2">&quot;/tmp/&quot;</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">}</span>
<span class="p">)</span>
</pre></div>
</div>
<p>For Airflow 2.0, the traditional <code class="docutils literal notranslate"><span class="pre">executor_config</span></code> will continue operation with a deprecation warning,
but will be removed in a future version.</p>
</div>
<div class="section" id="step-7-upgrade-to-airflow-2-0">
<h2><a class="toc-backref" href="#id7">Step 7: Upgrade to Airflow 2.0</a><a class="headerlink" href="#step-7-upgrade-to-airflow-2-0" title="Permalink to this headline"></a></h2>
<p>After running the upgrade checks as described above, installing the backported providers, modifying
the DAGs to be compatible, and updating the configuration settings, you should be ready to upgrade to Airflow 2.0.</p>
<p>A final run of the upgrade checks is always a good idea to make sure you have missed anything. At
this stage the problems detected should be either be zero or minimal which you plan to fix after
upgrading the Airflow version.</p>
<p>At this point, just follow the standard Airflow version upgrade process:</p>
<ul>
<li><p>Make sure your Airflow meta database is backed up</p></li>
<li><p>Pause all the DAGs and make sure there is nothing actively running</p>
<ul class="simple">
<li><p>The reason to pause DAGs is to make sure that nothing is actively being written to the database during the database upgrade which will follow in a later step.</p></li>
<li><p>To be extra careful, it is best to have a database backup after the DAGs have been paused.</p></li>
</ul>
</li>
<li><p>Install / upgrade the Airflow version to the 2.0 version of choice</p></li>
<li><p>Make sure to install the right providers</p>
<ul class="simple">
<li><p>This can be done by using the &quot;extras&quot; option as part of the Airflow installation, or by individually installing the providers.</p></li>
<li><p>Please note that you may have to uninstall the backport providers before installing the new providers, if you are installing using pip. This would not apply if you are installing using an Airflow Docker image with a set of specified requirements, where the change automatically gets a fresh set of modules.</p></li>
<li><p>You can read more about providers at <a class="reference external" href="/docs/apache-airflow-providers/index.html" title="(in apache-airflow-providers vmaster)"><span>Provider packages</span></a>.</p></li>
</ul>
</li>
<li><p>Upgrade the Airflow meta database using <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">db</span> <span class="pre">upgrade</span></code>.</p>
<ul class="simple">
<li><p>The above command may be unfamiliar, since it is shown using the Airflow 2.0 CLI syntax.</p></li>
<li><p>The database upgrade may modify the database schema as needed and also map the existing data to be compliant with the update database schema.</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The database upgrade may take a while depending on the number of DAGs in the database and the volume of history
stored in the database for task history, xcom variables, etc.
In our testing, we saw that performing the Airflow database upgrade from Airflow 1.10.14 to Airflow 2.0
took between two to three minutes on an Airflow database on PostgreSQL with around 35,000 task instances and
500 DAGs.
For a faster database upgrade and for better overall performance, it is recommended that you periodically archive
the old historical elements which are no longer of value.</p>
</div>
</li>
<li><p>Restart Airflow Scheduler, Webserver, and Workers</p></li>
</ul>
</div>
<div class="section" id="appendix">
<h2><a class="toc-backref" href="#id8">Appendix</a><a class="headerlink" href="#appendix" title="Permalink to this headline"></a></h2>
<div class="section" id="changed-parameters-for-the-kubernetespodoperator">
<h3><a class="toc-backref" href="#id9">Changed Parameters for the KubernetesPodOperator</a><a class="headerlink" href="#changed-parameters-for-the-kubernetespodoperator" title="Permalink to this headline"></a></h3>
<p><strong>Port has migrated from a List[Port] to a List[V1ContainerPort]</strong></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.kubernetes.pod</span> <span class="kn">import</span> <span class="n">Port</span>
<span class="n">port</span> <span class="o">=</span> <span class="n">Port</span><span class="p">(</span><span class="s1">&#39;http&#39;</span><span class="p">,</span> <span class="mi">80</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">ports</span><span class="o">=</span><span class="p">[</span><span class="n">port</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">port</span> <span class="o">=</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1ContainerPort</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;http&#39;</span><span class="p">,</span> <span class="n">container_port</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">ports</span><span class="o">=</span><span class="p">[</span><span class="n">port</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>Volume_mounts have migrated from a List[VolumeMount] to a List[V1VolumeMount]</strong></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.kubernetes.volume_mount</span> <span class="kn">import</span> <span class="n">VolumeMount</span>
<span class="n">volume_mount</span> <span class="o">=</span> <span class="n">VolumeMount</span><span class="p">(</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span>
<span class="n">mount_path</span><span class="o">=</span><span class="s1">&#39;/root/mount_file&#39;</span><span class="p">,</span>
<span class="n">sub_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">read_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">volume_mounts</span><span class="o">=</span><span class="p">[</span><span class="n">volume_mount</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">volume_mount</span> <span class="o">=</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1VolumeMount</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span> <span class="n">mount_path</span><span class="o">=</span><span class="s1">&#39;/root/mount_file&#39;</span><span class="p">,</span> <span class="n">sub_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">read_only</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">volume_mounts</span><span class="o">=</span><span class="p">[</span><span class="n">volume_mount</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>Volume has migrated from a List[Volume] to a List[V1Volume]</strong></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.kubernetes.volume</span> <span class="kn">import</span> <span class="n">Volume</span>
<span class="n">volume_config</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;persistentVolumeClaim&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;claimName&#39;</span><span class="p">:</span> <span class="s1">&#39;test-volume&#39;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">volume</span> <span class="o">=</span> <span class="n">Volume</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span> <span class="n">configs</span><span class="o">=</span><span class="n">volume_config</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">volumes</span><span class="o">=</span><span class="p">[</span><span class="n">volume</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">volume</span> <span class="o">=</span> <span class="n">k8s</span><span class="o">.</span><span class="n">V1Volume</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">,</span>
<span class="n">persistent_volume_claim</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1PersistentVolumeClaimVolumeSource</span><span class="p">(</span><span class="n">claim_name</span><span class="o">=</span><span class="s1">&#39;test-volume&#39;</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">volumes</span><span class="o">=</span><span class="p">[</span><span class="n">volume</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>env_vars has migrated from a Dict to a List[V1EnvVar]</strong></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">env_vars</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ENV1&quot;</span><span class="p">:</span> <span class="s2">&quot;val1&quot;</span><span class="p">,</span> <span class="s2">&quot;ENV2&quot;</span><span class="p">:</span> <span class="s2">&quot;val2&quot;</span><span class="p">},</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">env_vars</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">k8s</span><span class="o">.</span><span class="n">V1EnvVar</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;ENV1&quot;</span><span class="p">,</span>
<span class="n">value</span><span class="o">=</span><span class="s2">&quot;val1&quot;</span>
<span class="p">),</span>
<span class="n">k8s</span><span class="o">.</span><span class="n">V1EnvVar</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;ENV2&quot;</span><span class="p">,</span>
<span class="n">value</span><span class="o">=</span><span class="s2">&quot;val2&quot;</span>
<span class="p">)]</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">env_vars</span><span class="o">=</span><span class="n">env_vars</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>PodRuntimeInfoEnv has been removed</strong></p>
<p>PodRuntimeInfoEnv can now be added to the <code class="docutils literal notranslate"><span class="pre">env_vars</span></code> variable as a <code class="docutils literal notranslate"><span class="pre">V1EnvVarSource</span></code></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.kubernetes.pod_runtime_info_env</span> <span class="kn">import</span> <span class="n">PodRuntimeInfoEnv</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">pod_runtime_info_envs</span><span class="o">=</span><span class="p">[</span><span class="n">PodRuntimeInfoEnv</span><span class="p">(</span><span class="s2">&quot;ENV3&quot;</span><span class="p">,</span> <span class="s2">&quot;status.podIP&quot;</span><span class="p">)],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">env_vars</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">k8s</span><span class="o">.</span><span class="n">V1EnvVar</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;ENV3&quot;</span><span class="p">,</span>
<span class="n">value_from</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1EnvVarSource</span><span class="p">(</span>
<span class="n">field_ref</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1ObjectFieldSelector</span><span class="p">(</span>
<span class="n">field_path</span><span class="o">=</span><span class="s2">&quot;status.podIP&quot;</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">]</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">env_vars</span><span class="o">=</span><span class="n">env_vars</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>configmaps has been removed</strong></p>
<p>Configmaps can now be added to the <code class="docutils literal notranslate"><span class="pre">env_from</span></code> variable as a <code class="docutils literal notranslate"><span class="pre">V1EnvVarSource</span></code></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">configmaps</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;test-configmap&#39;</span><span class="p">],</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">configmap</span> <span class="o">=</span><span class="s2">&quot;test-configmap&quot;</span>
<span class="n">env_from</span> <span class="o">=</span> <span class="p">[</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1EnvFromSource</span><span class="p">(</span>
<span class="n">config_map_ref</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1ConfigMapEnvSource</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="n">configmap</span>
<span class="p">)</span>
<span class="p">)]</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">env_from</span><span class="o">=</span><span class="n">env_from</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>Resources has migrated from a Dict to a V1ResourceRequirements</strong></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">resources</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;limit_cpu&#39;</span><span class="p">:</span> <span class="mf">0.25</span><span class="p">,</span>
<span class="s1">&#39;limit_memory&#39;</span><span class="p">:</span> <span class="s1">&#39;64Mi&#39;</span><span class="p">,</span>
<span class="s1">&#39;limit_ephemeral_storage&#39;</span><span class="p">:</span> <span class="s1">&#39;2Gi&#39;</span><span class="p">,</span>
<span class="s1">&#39;request_cpu&#39;</span><span class="p">:</span> <span class="s1">&#39;250m&#39;</span><span class="p">,</span>
<span class="s1">&#39;request_memory&#39;</span><span class="p">:</span> <span class="s1">&#39;64Mi&#39;</span><span class="p">,</span>
<span class="s1">&#39;request_ephemeral_storage&#39;</span><span class="p">:</span> <span class="s1">&#39;1Gi&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">labels</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;foo&quot;</span><span class="p">:</span> <span class="s2">&quot;bar&quot;</span><span class="p">},</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_current_task_name</span><span class="p">(),</span>
<span class="n">in_cluster</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">do_xcom_push</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">resources</span><span class="o">=</span><span class="n">resources</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kubernetes.client</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">as</span> <span class="n">k8s</span>
<span class="n">resources</span><span class="o">=</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1ResourceRequirements</span><span class="p">(</span>
<span class="n">requests</span><span class="o">=</span><span class="p">{</span>
<span class="s1">&#39;memory&#39;</span><span class="p">:</span> <span class="s1">&#39;64Mi&#39;</span><span class="p">,</span>
<span class="s1">&#39;cpu&#39;</span><span class="p">:</span> <span class="s1">&#39;250m&#39;</span><span class="p">,</span>
<span class="s1">&#39;ephemeral-storage&#39;</span><span class="p">:</span> <span class="s1">&#39;1Gi&#39;</span>
<span class="p">},</span>
<span class="n">limits</span><span class="o">=</span><span class="p">{</span>
<span class="s1">&#39;memory&#39;</span><span class="p">:</span> <span class="s1">&#39;64Mi&#39;</span><span class="p">,</span>
<span class="s1">&#39;cpu&#39;</span><span class="p">:</span> <span class="mf">0.25</span><span class="p">,</span>
<span class="s1">&#39;nvidia.com/gpu&#39;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
<span class="s1">&#39;ephemeral-storage&#39;</span><span class="p">:</span> <span class="s1">&#39;2Gi&#39;</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">labels</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;foo&quot;</span><span class="p">:</span> <span class="s2">&quot;bar&quot;</span><span class="p">},</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;test-&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1000000</span><span class="p">)),</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_current_task_name</span><span class="p">(),</span>
<span class="n">in_cluster</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">do_xcom_push</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">resources</span><span class="o">=</span><span class="n">resources</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<p><strong>image_pull_secrets has migrated from a String to a List[k8s.V1LocalObjectReference]</strong></p>
<p>Before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">k</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s2">&quot;ubuntu:16.04&quot;</span><span class="p">,</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;echo 10&quot;</span><span class="p">],</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task&quot;</span><span class="p">,</span>
<span class="n">image_pull_secrets</span><span class="o">=</span><span class="s2">&quot;fake-secret&quot;</span><span class="p">,</span>
<span class="n">cluster_context</span><span class="o">=</span><span class="s1">&#39;default&#39;</span>
<span class="p">)</span>
</pre></div>
</div>
<p>After:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">quay_k8s</span> <span class="o">=</span> <span class="n">KubernetesPodOperator</span><span class="p">(</span>
<span class="n">namespace</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span>
<span class="n">image</span><span class="o">=</span><span class="s1">&#39;quay.io/apache/bash&#39;</span><span class="p">,</span>
<span class="n">image_pull_secrets</span><span class="o">=</span><span class="p">[</span><span class="n">k8s</span><span class="o">.</span><span class="n">V1LocalObjectReference</span><span class="p">(</span><span class="s1">&#39;testquay&#39;</span><span class="p">)],</span>
<span class="n">cmds</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;bash&quot;</span><span class="p">,</span> <span class="s2">&quot;-cx&quot;</span><span class="p">],</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;airflow-private-image-pod&quot;</span><span class="p">,</span>
<span class="n">task_id</span><span class="o">=</span><span class="s2">&quot;task-two&quot;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="migration-guide-from-experimental-api-to-stable-api-v1">
<h3><a class="toc-backref" href="#id10">Migration Guide from Experimental API to Stable API v1</a><a class="headerlink" href="#migration-guide-from-experimental-api-to-stable-api-v1" title="Permalink to this headline"></a></h3>
<p>In Airflow 2.0, we added the new REST API. Experimental API still works, but support may be dropped in the future.</p>
<p>The experimental API however does not require authentication, so it is disabled by default. You need to explicitly enable the experimental API if you want to use it.
If your application is still using the experimental API, you should <strong>seriously</strong> consider migrating to the stable API.</p>
<p>The stable API exposes many endpoints available through the webserver. Here are the
differences between the two endpoints that will help you migrate from the
experimental REST API to the stable REST API.</p>
<p><strong>Base Endpoint</strong></p>
<p>The base endpoint for the stable API v1 is <code class="docutils literal notranslate"><span class="pre">/api/v1/</span></code>. You must change the
experimental base endpoint from <code class="docutils literal notranslate"><span class="pre">/api/experimental/</span></code> to <code class="docutils literal notranslate"><span class="pre">/api/v1/</span></code>.
The table below shows the differences:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 17%" />
<col style="width: 42%" />
<col style="width: 41%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Purpose</p></th>
<th class="head"><p>Experimental REST API Endpoint</p></th>
<th class="head"><p>Stable REST API Endpoint</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Create a DAGRuns(POST)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/dags/&lt;DAG_ID&gt;/dag_runs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>List DAGRuns(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/dags/&lt;DAG_ID&gt;/dag_runs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Check Health status(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/test</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/health</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Task information(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/dags/&lt;DAG_ID&gt;/tasks/&lt;TASK_ID&gt;</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1//dags/{dag_id}/tasks/{task_id}</span></code></p></td>
</tr>
<tr class="row-even"><td><p>TaskInstance public variable(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/dags/&lt;DAG_ID&gt;/dag_runs/&lt;string:execution_date&gt;/tasks/&lt;TASK_ID&gt;</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Pause DAG(PATCH)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/dags/&lt;DAG_ID&gt;/paused/&lt;string:paused&gt;</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Information of paused DAG(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/dags/&lt;DAG_ID&gt;/paused</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Latest DAG Runs(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/latest_runs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Get all pools(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/pools</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/pools</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Create a pool(POST)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/pools</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/pools</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Delete a pool(DELETE)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/pools/&lt;string:name&gt;</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/pools/{pool_name}</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>DAG Lineage(GET)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/experimental/lineage/&lt;DAG_ID&gt;/&lt;string:execution_date&gt;/</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries</span></code></p></td>
</tr>
</tbody>
</table>
<p>This endpoint <code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns</span></code> also allows you to filter dag_runs with parameters such as <code class="docutils literal notranslate"><span class="pre">start_date</span></code>, <code class="docutils literal notranslate"><span class="pre">end_date</span></code>, <code class="docutils literal notranslate"><span class="pre">execution_date</span></code> etc in the query string.
Therefore the operation previously performed by this endpoint:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>/api/experimental/dags/&lt;string:dag_id&gt;/dag_runs/&lt;string:execution_date&gt;
</pre></div>
</div>
<p>can now be handled with filter parameters in the query string.
Getting information about latest runs can be accomplished with the help of
filters in the query string of this endpoint(<code class="docutils literal notranslate"><span class="pre">/api/v1/dags/{dag_id}/dagRuns</span></code>). Please check the Stable API
reference documentation for more information</p>
</div>
<div class="section" id="changes-to-exception-handling-for-from-dag-callbacks">
<h3><a class="toc-backref" href="#id11">Changes to Exception handling for from DAG callbacks</a><a class="headerlink" href="#changes-to-exception-handling-for-from-dag-callbacks" title="Permalink to this headline"></a></h3>
<p>Exception from DAG callbacks used to crash the Airflow Scheduler. As part
of our efforts to make the Scheduler more performant and reliable, we have changed this behavior to log the exception
instead. On top of that, a new dag.callback_exceptions counter metric has
been added to help better monitor callback exceptions.</p>
</div>
<div class="section" id="airflow-cli-changes-in-2-0">
<h3><a class="toc-backref" href="#id12">Airflow CLI changes in 2.0</a><a class="headerlink" href="#airflow-cli-changes-in-2-0" title="Permalink to this headline"></a></h3>
<p>The Airflow CLI has been organized so that related commands are grouped together as subcommands,
which means that if you use these commands in your scripts, you have to make changes to them.</p>
<p>This section describes the changes that have been made, and what you need to do to update your scripts.
The ability to manipulate users from the command line has been changed. <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">create_user</span></code>, <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">delete_user</span></code>
and <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">list_users</span></code> has been grouped to a single command <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">users</span></code> with optional flags <code class="docutils literal notranslate"><span class="pre">create</span></code>, <code class="docutils literal notranslate"><span class="pre">list</span></code> and <code class="docutils literal notranslate"><span class="pre">delete</span></code>.
The <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">list_dags</span></code> command is now <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">list</span></code>, <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">pause</span></code> is <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">pause</span></code>, etc.</p>
<p>In Airflow 1.10 and 2.0 there is an <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">config</span></code> command but there is a difference in behavior. In Airflow 1.10,
it prints all config options while in Airflow 2.0, it's a command group. <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">config</span></code> is now <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">config</span> <span class="pre">list</span></code>.
You can check other options by running the command <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">config</span> <span class="pre">--help</span></code></p>
<p>For a complete list of updated CLI commands, see <a class="reference external" href="https://airflow.apache.org/cli.html">https://airflow.apache.org/cli.html</a>.</p>
<p>You can learn about the commands by running <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">--help</span></code>. For example to get help about the <code class="docutils literal notranslate"><span class="pre">celery</span></code> group command,
you have to run the help command: <code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">--help</span></code>.</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 35%" />
<col style="width: 40%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Old command</p></th>
<th class="head"><p>New command</p></th>
<th class="head"><p>Group</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">worker</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">worker</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">celery</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">flower</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">flower</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">celery</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">trigger_dag</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">trigger</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">delete_dag</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">delete</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">show_dag</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">show</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">list_dag</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">list</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dag_status</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">status</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">backfill</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">backfill</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">list_dag_runs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">list-runs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">pause</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">pause</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">unpause</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">unpause</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">next_execution</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">next-execution</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">dags</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">test</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">test</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">clear</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">clear</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">list_tasks</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">list</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">task_failed_deps</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">failed-deps</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">task_state</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">state</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">run</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">run</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">render</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">render</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">tasks</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">initdb</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">db</span> <span class="pre">init</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">db</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">resetdb</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">db</span> <span class="pre">reset</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">db</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">upgradedb</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">db</span> <span class="pre">upgrade</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">db</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">checkdb</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">db</span> <span class="pre">check</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">db</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">shell</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">db</span> <span class="pre">shell</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">db</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">pool</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">pools</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">pools</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">create_user</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">users</span> <span class="pre">create</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">users</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">delete_user</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">users</span> <span class="pre">delete</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">users</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">list_users</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">users</span> <span class="pre">list</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">users</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">rotate_fernet_key</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">rotate-fernet-key</span></code></p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">sync_perm</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">sync-perm</span></code></p></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>Example Usage for the ``users`` group</strong></p>
<p>To create a new user:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow users create --username jondoe --lastname doe --firstname jon --email jdoe@apache.org --role Viewer --password <span class="nb">test</span>
</pre></div>
</div>
<p>To list users:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow users list
</pre></div>
</div>
<p>To delete a user:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow users delete --username jondoe
</pre></div>
</div>
<p>To add a user to a role:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow users add-role --username jondoe --role Public
</pre></div>
</div>
<p>To remove a user from a role:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>airflow users remove-role --username jondoe --role Public
</pre></div>
</div>
<p><strong>Use exactly single character for short option style change in CLI</strong></p>
<p>For Airflow short option, use exactly one single character. New commands are available according to the following table:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Old command</p></th>
<th class="head"><p>New command</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">(dags\|tasks\|scheduler)</span> <span class="pre">[-sd,</span> <span class="pre">--subdir]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">(dags\|tasks\|scheduler)</span> <span class="pre">[-S,</span> <span class="pre">--subdir]</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">test</span> <span class="pre">[-dr,</span> <span class="pre">--dry_run]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">test</span> <span class="pre">[-n,</span> <span class="pre">--dry-run]</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">test</span> <span class="pre">[-tp,</span> <span class="pre">--task_params]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">test</span> <span class="pre">[-t,</span> <span class="pre">--task-params]</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">test</span> <span class="pre">[-pm,</span> <span class="pre">--post_mortem]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">test</span> <span class="pre">[-m,</span> <span class="pre">--post-mortem]</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">run</span> <span class="pre">[-int,</span> <span class="pre">--interactive]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">run</span> <span class="pre">[-N,</span> <span class="pre">--interactive]</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">backfill</span> <span class="pre">[-dr,</span> <span class="pre">--dry_run]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">dags</span> <span class="pre">backfill</span> <span class="pre">[-n,</span> <span class="pre">--dry-run]</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">clear</span> <span class="pre">[-dx,</span> <span class="pre">--dag_regex]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">tasks</span> <span class="pre">clear</span> <span class="pre">[-R,</span> <span class="pre">--dag-regex]</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">kerberos</span> <span class="pre">[-kt,</span> <span class="pre">--keytab]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">kerberos</span> <span class="pre">[-k,</span> <span class="pre">--keytab]</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">webserver</span> <span class="pre">[-hn,</span> <span class="pre">--hostname]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">webserver</span> <span class="pre">[-H,</span> <span class="pre">--hostname]</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">worker</span> <span class="pre">[-cn,</span> <span class="pre">--celery_hostname]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">worker</span> <span class="pre">[-H,</span> <span class="pre">--celery-hostname]</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">flower</span> <span class="pre">[-hn,</span> <span class="pre">--hostname]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">flower</span> <span class="pre">[-H,</span> <span class="pre">--hostname]</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">flower</span> <span class="pre">[-fc,</span> <span class="pre">--flower_conf]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">flower</span> <span class="pre">[-c,</span> <span class="pre">--flower-conf]</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">flower</span> <span class="pre">[-ba,</span> <span class="pre">--basic_auth]</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">airflow</span> <span class="pre">celery</span> <span class="pre">flower</span> <span class="pre">[-A,</span> <span class="pre">--basic-auth]</span></code></p></td>
</tr>
</tbody>
</table>
<p>For Airflow long option, use [kebab-case](<a class="reference external" href="https://en.wikipedia.org/wiki/Letter_case">https://en.wikipedia.org/wiki/Letter_case</a>) instead of [snake_case](<a class="reference external" href="https://en.wikipedia.org/wiki/Snake_case">https://en.wikipedia.org/wiki/Snake_case</a>)</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 49%" />
<col style="width: 51%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Old option</p></th>
<th class="head"><p>New option</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--task_regex</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--task-regex</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--start_date</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--start-date</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--end_date</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--end-date</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--dry_run</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--dry-run</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--no_backfill</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--no-backfill</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--mark_success</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--mark-success</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--donot_pickle</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--donot-pickle</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--ignore_dependencies</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ignore-dependencies</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--ignore_first_depends_on_past</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ignore-first-depends-on-past</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--delay_on_limit</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--delay-on-limit</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--reset_dagruns</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--reset-dagruns</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--rerun_failed_tasks</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--rerun-failed-tasks</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--run_backwards</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--run-backwards</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--only_failed</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--only-failed</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--only_running</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--only-running</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--exclude_subdags</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--exclude-subdags</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--exclude_parentdag</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--exclude-parentdag</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--dag_regex</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--dag-regex</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--run_id</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--run-id</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--exec_date</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--exec-date</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--ignore_all_dependencies</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ignore-all-dependencies</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--ignore_depends_on_past</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ignore-depends-on-past</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--ship_dag</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ship-dag</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--job_id</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--job-id</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--cfg_path</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--cfg-path</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--ssl_cert</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ssl-cert</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--ssl_key</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--ssl-key</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--worker_timeout</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--worker-timeout</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--access_logfile</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--access-logfile</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--error_logfile</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--error-logfile</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--dag_id</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--dag-id</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--num_runs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--num-runs</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--do_pickle</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--do-pickle</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--celery_hostname</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--celery-hostname</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--broker_api</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--broker-api</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--flower_conf</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--flower-conf</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--url_prefix</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--url-prefix</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--basic_auth</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--basic-auth</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--task_params</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--task-params</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--post_mortem</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--post-mortem</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_uri</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-uri</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_type</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-type</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_host</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-host</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_login</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-login</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_password</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-password</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_schema</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-schema</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_port</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-port</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--conn_extra</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--conn-extra</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--use_random_password</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--use-random-password</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">--skip_serve_logs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">--skip-serve-logs</span></code></p></td>
</tr>
</tbody>
</table>
<p><strong>Remove serve_logs command from CLI</strong></p>
<p>The <code class="docutils literal notranslate"><span class="pre">serve_logs</span></code> command has been deleted. This command should be run only by internal application mechanisms
and there is no need for it to be accessible from the CLI interface.</p>
<p><strong>dag_state CLI command</strong></p>
<p>If the DAGRun was triggered with conf key/values passed in, they will also be printed in the dag_state CLI response
ie. running, {&quot;name&quot;: &quot;bob&quot;}
whereas in in prior releases it just printed the state:
ie. running</p>
<p><strong>Deprecating ignore_first_depends_on_past on backfill command and default it to True</strong></p>
<p>When doing backfill with <code class="docutils literal notranslate"><span class="pre">depends_on_past</span></code> dags, users will need to pass <code class="docutils literal notranslate"><span class="pre">--ignore-first-depends-on-past</span></code>.
We should default it as <code class="docutils literal notranslate"><span class="pre">true</span></code> to avoid confusion</p>
</div>
<div class="section" id="changes-to-airflow-plugins">
<h3><a class="toc-backref" href="#id13">Changes to Airflow Plugins</a><a class="headerlink" href="#changes-to-airflow-plugins" title="Permalink to this headline"></a></h3>
<p>If you are using Airflow Plugins and were passing <code class="docutils literal notranslate"><span class="pre">admin_views</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">menu_links</span></code> which were used in the
non-RBAC UI (<code class="docutils literal notranslate"><span class="pre">flask-admin</span></code> based UI), update it to use <code class="docutils literal notranslate"><span class="pre">flask_appbuilder_views</span></code> and <code class="docutils literal notranslate"><span class="pre">flask_appbuilder_menu_links</span></code>.</p>
<p><strong>Old</strong>:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.plugins_manager</span> <span class="kn">import</span> <span class="n">AirflowPlugin</span>
<span class="kn">from</span> <span class="nn">flask_admin</span> <span class="kn">import</span> <span class="n">BaseView</span><span class="p">,</span> <span class="n">expose</span>
<span class="kn">from</span> <span class="nn">flask_admin.base</span> <span class="kn">import</span> <span class="n">MenuLink</span>
<span class="k">class</span> <span class="nc">TestView</span><span class="p">(</span><span class="n">BaseView</span><span class="p">):</span>
<span class="nd">@expose</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># in this example, put your test_plugin/test.html template at airflow/plugins/templates/test_plugin/test.html</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s2">&quot;test_plugin/test.html&quot;</span><span class="p">,</span> <span class="n">content</span><span class="o">=</span><span class="s2">&quot;Hello galaxy!&quot;</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">TestView</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">&quot;Test Plugin&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;Test View&quot;</span><span class="p">)</span>
<span class="n">ml</span> <span class="o">=</span> <span class="n">MenuLink</span><span class="p">(</span>
<span class="n">category</span><span class="o">=</span><span class="s1">&#39;Test Plugin&#39;</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;Test Menu Link&#39;</span><span class="p">,</span>
<span class="n">url</span><span class="o">=</span><span class="s1">&#39;https://airflow.apache.org/&#39;</span>
<span class="p">)</span>
<span class="k">class</span> <span class="nc">AirflowTestPlugin</span><span class="p">(</span><span class="n">AirflowPlugin</span><span class="p">):</span>
<span class="n">admin_views</span> <span class="o">=</span> <span class="p">[</span><span class="n">v</span><span class="p">]</span>
<span class="n">menu_links</span> <span class="o">=</span> <span class="p">[</span><span class="n">ml</span><span class="p">]</span>
</pre></div>
</div>
<p><strong>Change it to</strong>:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">airflow.plugins_manager</span> <span class="kn">import</span> <span class="n">AirflowPlugin</span>
<span class="kn">from</span> <span class="nn">flask_appbuilder</span> <span class="kn">import</span> <span class="n">expose</span><span class="p">,</span> <span class="n">BaseView</span> <span class="k">as</span> <span class="n">AppBuilderBaseView</span>
<span class="k">class</span> <span class="nc">TestAppBuilderBaseView</span><span class="p">(</span><span class="n">AppBuilderBaseView</span><span class="p">):</span>
<span class="n">default_view</span> <span class="o">=</span> <span class="s2">&quot;test&quot;</span>
<span class="nd">@expose</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s2">&quot;test_plugin/test.html&quot;</span><span class="p">,</span> <span class="n">content</span><span class="o">=</span><span class="s2">&quot;Hello galaxy!&quot;</span><span class="p">)</span>
<span class="n">v_appbuilder_view</span> <span class="o">=</span> <span class="n">TestAppBuilderBaseView</span><span class="p">()</span>
<span class="n">v_appbuilder_package</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Test View&quot;</span><span class="p">,</span>
<span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="s2">&quot;Test Plugin&quot;</span><span class="p">,</span>
<span class="s2">&quot;view&quot;</span><span class="p">:</span> <span class="n">v_appbuilder_view</span><span class="p">}</span>
<span class="c1"># Creating a flask appbuilder Menu Item</span>
<span class="n">appbuilder_mitem</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Google&quot;</span><span class="p">,</span>
<span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="s2">&quot;Search&quot;</span><span class="p">,</span>
<span class="s2">&quot;category_icon&quot;</span><span class="p">:</span> <span class="s2">&quot;fa-th&quot;</span><span class="p">,</span>
<span class="s2">&quot;href&quot;</span><span class="p">:</span> <span class="s2">&quot;https://www.google.com&quot;</span><span class="p">}</span>
<span class="c1"># Defining the plugin class</span>
<span class="k">class</span> <span class="nc">AirflowTestPlugin</span><span class="p">(</span><span class="n">AirflowPlugin</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;test_plugin&quot;</span>
<span class="n">appbuilder_views</span> <span class="o">=</span> <span class="p">[</span><span class="n">v_appbuilder_package</span><span class="p">]</span>
<span class="n">appbuilder_menu_items</span> <span class="o">=</span> <span class="p">[</span><span class="n">appbuilder_mitem</span><span class="p">]</span>
</pre></div>
</div>
</div>
<div class="section" id="changes-to-extras-names">
<h3><a class="toc-backref" href="#id14">Changes to extras names</a><a class="headerlink" href="#changes-to-extras-names" title="Permalink to this headline"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">all</span></code> extra were reduced to include only user-facing dependencies. This means
that this extra does not contain development dependencies. If you were using it and
depending on the development packages then you should use <code class="docutils literal notranslate"><span class="pre">devel_all</span></code>.</p>
</div>
<div class="section" id="support-for-airflow-1-10-x-releases">
<h3><a class="toc-backref" href="#id15">Support for Airflow 1.10.x releases</a><a class="headerlink" href="#support-for-airflow-1-10-x-releases" title="Permalink to this headline"></a></h3>
<p>As mentioned earlier in Step 2, the 1.10.14 release is intended to be a &quot;bridge release&quot;
which would be a step in the migration to Airflow 2.0.</p>
<p>After the Airflow 2.0 GA (General Availability) release, it expected that all
future Airflow development would be based on Airflow 2.0, including a series of
patch releases such as 2.0.1, 2.0.2 and then feature releases such as 2.1.</p>
<p>We plan to take a strict Semantic Versioning approach to our versioning and release process. This
means that we do not plan to make any backwards-incompatible changes in the 2.* releases. Any
breaking changes, including the removal of features deprecated in Airflow 2.0 will happen as part
of the Airflow 3.0 release.</p>
<p>The Airflow 1.10.x release tree will be supported for a limited time after the
GA release of Airflow 2.0 to give users time to upgrade from one of the Airflow 1.10.x releases.
Specifically, only &quot;critical fixes&quot; defined as fixes
to bugs that take down Production systems, will be backported to 1.10.x core for
six months after Airflow 2.0.0 is released.</p>
<p>In addition, Backport providers within
1.10.x, will be supported for critical fixes for three months after Airflow 2.0.0
is released.</p>
</div>
</div>
</div>
<div class="pager" role="navigation" aria-label="related navigation">
<a rel="prev" title="Installation" href="installation.html" >
<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="p">Previous</button>
</a>
<a rel="next" title="Upgrade Check Script" href="upgrade-check.html" >
<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" accesskey="n">Next</button>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="rating-container">
<p class="bodytext__medium--greyish-brown font-weight-500">Was this entry helpful?</p>
<div class="rating">
<div id="rate-star-5" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-4" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-3" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-2" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-1" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
</div>
</div>
</main>
<nav class="wy-nav-side-toc">
<div class="wy-menu-vertical">
<ul>
<li><a class="reference internal" href="#">Upgrading to Airflow 2.0+</a><ul>
<li><a class="reference internal" href="#step-1-upgrade-to-python-3">Step 1: Upgrade to Python 3</a></li>
<li><a class="reference internal" href="#step-2-upgrade-to-airflow-1-10-14-a-k-a-our-bridge-release">Step 2: Upgrade to Airflow 1.10.14 (a.k.a our &quot;bridge&quot; release)</a></li>
<li><a class="reference internal" href="#step-3-install-and-run-the-upgrade-check-scripts">Step 3: Install and run the Upgrade check scripts</a></li>
<li><a class="reference internal" href="#step-4-import-operators-from-backport-providers">Step 4: Import Operators from Backport Providers</a></li>
<li><a class="reference internal" href="#step-5-upgrade-airflow-dags">Step 5: Upgrade Airflow DAGs</a></li>
<li><a class="reference internal" href="#step-6-upgrade-configuration-settings">Step 6: Upgrade Configuration settings</a></li>
<li><a class="reference internal" href="#step-7-upgrade-to-airflow-2-0">Step 7: Upgrade to Airflow 2.0</a></li>
<li><a class="reference internal" href="#appendix">Appendix</a><ul>
<li><a class="reference internal" href="#changed-parameters-for-the-kubernetespodoperator">Changed Parameters for the KubernetesPodOperator</a></li>
<li><a class="reference internal" href="#migration-guide-from-experimental-api-to-stable-api-v1">Migration Guide from Experimental API to Stable API v1</a></li>
<li><a class="reference internal" href="#changes-to-exception-handling-for-from-dag-callbacks">Changes to Exception handling for from DAG callbacks</a></li>
<li><a class="reference internal" href="#airflow-cli-changes-in-2-0">Airflow CLI changes in 2.0</a></li>
<li><a class="reference internal" href="#changes-to-airflow-plugins">Changes to Airflow Plugins</a></li>
<li><a class="reference internal" href="#changes-to-extras-names">Changes to extras names</a></li>
<li><a class="reference internal" href="#support-for-airflow-1-10-x-releases">Support for Airflow 1.10.x releases</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</nav>
</div>
<div class="base-layout--button">
<a href="https://github.com/apache/airflow/edit/master/docs/apache-airflow/upgrading-to-2.rst" rel="nofollow">
<button class="btn-hollow btn-brown btn-with-icon with-box-shadow button-fixed">
<svg xmlns="http://www.w3.org/2000/svg" width="30.76" height="30">
<path d="M15.379 0a15.381 15.381 0 00-4.86 29.974c.769.141 1.05-.334 1.05-.741 0-.365-.013-1.332-.021-2.616-4.278.929-5.181-2.062-5.181-2.062a4.071 4.071 0 00-1.708-2.25c-1.4-.954.106-.935.106-.935a3.231 3.231 0 012.356 1.585 3.274 3.274 0 004.476 1.278 3.287 3.287 0 01.976-2.056c-3.415-.388-7.005-1.707-7.005-7.6a5.947 5.947 0 011.583-4.127 5.53 5.53 0 01.151-4.07s1.291-.413 4.229 1.577a14.577 14.577 0 017.7 0c2.936-1.99 4.225-1.577 4.225-1.577a5.523 5.523 0 01.153 4.07 5.937 5.937 0 011.581 4.127c0 5.909-3.6 7.209-7.022 7.589a3.672 3.672 0 011.044 2.848c0 2.056-.019 3.715-.019 4.219 0 .411.277.89 1.057.74A15.382 15.382 0 0015.378.001z" data-name="Path 224" fill="#51504f" fill-rule="evenodd"></path>
</svg>
<span class="bodytext__medium--brownish-grey">Suggest a change on this page</span>
</button>
</a>
</div>
</div>
<footer>
<div class="footer-section footer-section__media-section">
<div class="d-flex align-items-center">
<a class="footer-section__media-section--link" target="_blank" href="https://github.com">
<svg xmlns="http://www.w3.org/2000/svg" width="46.14" height="45" viewBox="0 0 46.14 45">
<path id="Path_207" d="M228.962 1078.578a23.072 23.072 0 0 0-7.29 44.96c1.154.212 1.574-.5 1.574-1.112 0-.548-.02-2-.031-3.924-6.417 1.394-7.771-3.093-7.771-3.093a6.109 6.109 0 0 0-2.562-3.375c-2.095-1.431.159-1.4.159-1.4a4.846 4.846 0 0 1 3.533 2.377c2.058 3.525 5.4 2.507 6.714 1.917a4.926 4.926 0 0 1 1.464-3.084c-5.123-.582-10.508-2.562-10.508-11.4a8.919 8.919 0 0 1 2.374-6.191 8.3 8.3 0 0 1 .226-6.105s1.937-.62 6.344 2.365a21.857 21.857 0 0 1 11.551 0c4.4-2.985 6.338-2.365 6.338-2.365a8.284 8.284 0 0 1 .23 6.105 8.9 8.9 0 0 1 2.371 6.191c0 8.862-5.393 10.812-10.533 11.384a5.506 5.506 0 0 1 1.566 4.272c0 3.084-.028 5.572-.028 6.329 0 .617.415 1.334 1.586 1.109a23.073 23.073 0 0 0-7.308-44.958z" fill="#fff" fill-rule="evenodd" data-name="Path 207" transform="translate(-205.894 -1078.578)"></path>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://jira.atlassian.com/">
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45">
<g id="Group_210" data-name="Group 210" transform="translate(-339.789 -1315.282)">
<path id="Path_218" d="M394.82 1315.282h-21.671a9.784 9.784 0 0 0 9.784 9.778h3.986v3.857a9.784 9.784 0 0 0 9.784 9.771v-21.523a1.884 1.884 0 0 0-1.883-1.883z" fill="#fff" data-name="Path 218" transform="translate(-11.914)"></path>
<path id="Path_219" d="M378.14 1332.072h-21.671a9.778 9.778 0 0 0 9.778 9.778h4.018v3.857a9.784 9.784 0 0 0 9.752 9.778v-21.536a1.877 1.877 0 0 0-1.877-1.877z" fill="#fff" data-name="Path 219" transform="translate(-5.957 -5.996)"></path>
<path id="Path_220" d="M361.46 1348.862h-21.671a9.778 9.778 0 0 0 9.778 9.778h3.992v3.857a9.778 9.778 0 0 0 9.778 9.778v-21.529a1.883 1.883 0 0 0-1.877-1.884z" fill="#fff" data-name="Path 220" transform="translate(0 -11.993)"></path>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://slack.com">
<svg xmlns="http://www.w3.org/2000/svg" width="45.073" height="45.073" viewBox="0 0 45.073 45.073">
<g id="Group_208" data-name="Group 208" transform="translate(-661.145 -806.287)">
<g id="Group_204" data-name="Group 204" transform="translate(661.145 830.01)">
<path id="Path_208" d="M670.634 856.859a4.744 4.744 0 1 1-4.744-4.744h4.744z" fill="#fff" data-name="Path 208" transform="translate(-661.145 -852.115)"></path>
<path id="Path_209" d="M684.059 856.859a4.744 4.744 0 0 1 9.489 0v11.861a4.744 4.744 0 1 1-9.489 0z" fill="#fff" data-name="Path 209" transform="translate(-672.198 -852.115)"></path>
</g>
<g id="Group_205" data-name="Group 205" transform="translate(661.145 806.287)">
<path id="Path_210" d="M688.8 815.776a4.744 4.744 0 1 1 4.744-4.745v4.745z" fill="#fff" data-name="Path 210" transform="translate(-672.198 -806.287)"></path>
<path id="Path_211" d="M677.751 829.2a4.744 4.744 0 0 1 0 9.489H665.89a4.744 4.744 0 1 1 0-9.489z" fill="#fff" data-name="Path 211" transform="translate(-661.145 -817.34)"></path>
</g>
<g id="Group_206" data-name="Group 206" transform="translate(684.868 806.287)">
<path id="Path_212" d="M729.887 833.945a4.744 4.744 0 1 1 4.745 4.745h-4.745z" fill="#fff" data-name="Path 212" transform="translate(-718.026 -817.34)"></path>
<path id="Path_213" d="M716.462 822.893a4.744 4.744 0 1 1-9.489 0v-11.862a4.744 4.744 0 0 1 9.489 0z" fill="#fff" data-name="Path 213" transform="translate(-706.973 -806.287)"></path>
</g>
<g id="Group_207" data-name="Group 207" transform="translate(684.868 830.01)">
<path id="Path_214" d="M711.718 875.029a4.744 4.744 0 1 1-4.745 4.744v-4.744z" fill="#fff" data-name="Path 214" transform="translate(-706.973 -863.168)"></path>
<path id="Path_215" d="M711.718 861.6a4.744 4.744 0 1 1 0-9.489h11.861a4.744 4.744 0 0 1 0 9.489z" fill="#fff" data-name="Path 215" transform="translate(-706.973 -852.115)"></path>
</g>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://stackoverflow.com">
<svg xmlns="http://www.w3.org/2000/svg" width="37.647" height="44.6" viewBox="0 0 37.647 44.6">
<g id="Group_209" data-name="Group 209" transform="translate(-645.2 -975.455)">
<path id="Path_216" d="M677.028 1043.1v-11.948h3.966v15.914H645.2v-15.914h3.966v11.948z" fill="#fff" data-name="Path 216" transform="translate(0 -27.014)"></path>
<path id="Path_217" d="M661.012 1003.008l19.467 4.069.824-3.914-19.467-4.069zm2.575-9.27l18.025 8.395 1.648-3.605-18.025-8.446zm5-8.858l15.3 12.721 2.524-3.039-15.3-12.721zm9.888-9.425l-3.193 2.369 11.845 15.965 3.193-2.369zm-17.875 36.617h19.879v-3.966H660.6z" fill="#fff" data-name="Path 217" transform="translate(-7.469)"></path>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://twitter.com">
<svg xmlns="http://www.w3.org/2000/svg" width="44.355" height="44.355" viewBox="0 0 44.355 44.355">
<g id="Group_211" data-name="Group 211" transform="translate(-503 -1382.2)">
<path id="Path_221" d="M541.811 1382.2h-33.267a5.546 5.546 0 0 0-5.544 5.544v33.266a5.547 5.547 0 0 0 5.544 5.545h33.267a5.546 5.546 0 0 0 5.544-5.545v-33.266a5.546 5.546 0 0 0-5.544-5.544zm-5.611 16.533c.011.244.011.488.011.732 0 7.507-5.722 16.178-16.179 16.178a16.173 16.173 0 0 1-8.7-2.539 10.92 10.92 0 0 0 1.353.078 11.4 11.4 0 0 0 7.064-2.44 5.685 5.685 0 0 1-5.311-3.947 5.725 5.725 0 0 0 2.561-.1 5.7 5.7 0 0 1-4.557-5.578v-.078a5.752 5.752 0 0 0 2.572.71 5.709 5.709 0 0 1-1.763-7.6 16.146 16.146 0 0 0 11.721 5.944 6.282 6.282 0 0 1-.144-1.3 5.688 5.688 0 0 1 9.836-3.892 11.3 11.3 0 0 0 3.615-1.375 5.721 5.721 0 0 1-2.506 3.149 11.538 11.538 0 0 0 3.271-.9 11.585 11.585 0 0 1-2.844 2.958z" fill="#fff" data-name="Path 221"></path>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://youtube.com">
<svg xmlns="http://www.w3.org/2000/svg" width="49.594" height="34.941" viewBox="0 0 49.594 34.941">
<path id="Path_223" d="M1124.557 1230a6.232 6.232 0 0 0-4.385-4.413c-3.867-1.043-19.376-1.043-19.376-1.043s-15.508 0-19.376 1.043a6.232 6.232 0 0 0-4.385 4.413c-1.036 3.893-1.036 12.014-1.036 12.014s0 8.122 1.036 12.015a6.232 6.232 0 0 0 4.385 4.413c3.867 1.043 19.376 1.043 19.376 1.043s15.509 0 19.376-1.043a6.232 6.232 0 0 0 4.385-4.413c1.036-3.893 1.036-12.015 1.036-12.015s.001-8.123-1.036-12.014zm-28.833 19.388v-14.748l12.962 7.374z" fill="#fff" data-name="Path 223" transform="translate(-1076 -1224.542)"></path>
</svg>
</a>
</div>
<div class="footer-section__media-section--button-with-text">
<span class="footer-section__media-section--text">Want to be a part of Apache Airflow?</span>
<a href="/community">
<button id="" class="btn-filled bodytext__medium--white ">Join community</button>
</a>
</div>
</div>
<div class="footer-section footer-section__policies-section">
<div class="footer-section">
<span>© The Apache Software Foundation 2019</span>
<div class="footer-section__policies-section--policies">
<a href="https://www.apache.org/licenses/" class="footer-section__policies-section--policy-item">
<span>License</span>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html" class="footer-section__policies-section--policy-item">
<span>Donate</span>
</a>
<a href="https://www.apache.org/foundation/thanks.html" class="footer-section__policies-section--policy-item">
<span>Thanks</span>
</a>
<a href="https://www.apache.org/security/" class="footer-section__policies-section--policy-item">
<span>Security</span>
</a>
</div>
</div>
<span class="footer-section__policies-section--disclaimer">
Apache Airflow, Apache, Airflow, the Airflow logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.
All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.
</span>
</div>
</footer>
<script type="text/javascript" src="_static/_gen/js/docs.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/language_data.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/jira-links.js"></script>
</body>
</html>