diff --git a/pr/573/.buildinfo b/pr/573/.buildinfo deleted file mode 100644 index 10252be3..00000000 --- a/pr/573/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 2c4109b91d43324c1448317b16995357 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/pr/573/_static/_sphinx_javascript_frameworks_compat.js b/pr/573/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 8549469d..00000000 --- a/pr/573/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,134 +0,0 @@ -/* - * _sphinx_javascript_frameworks_compat.js - * ~~~~~~~~~~ - * - * Compatability shim for jQuery and underscores.js. - * - * WILL BE REMOVED IN Sphinx 6.0 - * xref RemovedInSphinx60Warning - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} diff --git a/pr/573/_static/antsibull-minimal.css b/pr/573/_static/antsibull-minimal.css deleted file mode 100644 index 85c1ce33..00000000 --- a/pr/573/_static/antsibull-minimal.css +++ /dev/null @@ -1,3 +0,0 @@ -@charset "UTF-8"; -/* Copyright (c) Ansible and contributors */ -/* GNU General Public License v3.0+ (see https://www.gnu.org/licenses/gpl-3.0.txt) */.ansible-links{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ansible-links>a{padding:4px 12px;margin:2px 4px;cursor:pointer;border-radius:3px;background-color:#5bbdbf;color:#fff}.ansible-links>a:active,.ansible-links>a:focus,.ansible-links>a:hover{background-color:#91d9db}.ansible-links>a:focus{outline:3px solid #204748}table.documentation-table{border-bottom:1px solid #000;border-right:1px solid #000}table.documentation-table th{background-color:#6ab0de}table.documentation-table td,table.documentation-table th{padding:4px;border-left:1px solid #000;border-top:1px solid #000}table.documentation-table td.elbow-placeholder{border-top:0;width:30px;min-width:30px}table.documentation-table td{vertical-align:top}table.documentation-table td:first-child{white-space:nowrap}table.documentation-table tr .ansibleOptionLink{display:inline-block;visibility:hidden}table.documentation-table tr .ansibleOptionLink:after{content:"🔗"}table.documentation-table tr:hover .ansibleOptionLink:after{visibility:visible}table.documentation-table tr:nth-child(odd){background-color:#fff}table.documentation-table tr:nth-child(2n){background-color:#e7f2fa}table.ansible-option-table{display:table;border-color:#000!important;height:1px}table.ansible-option-table tr{height:100%}table.ansible-option-table td,table.ansible-option-table th{border-color:#000!important;border-bottom:none!important;vertical-align:top!important}table.ansible-option-table th>p{font-size:medium!important}table.ansible-option-table thead tr{background-color:#6ab0de}table.ansible-option-table tbody .row-odd td{background-color:#fff!important}table.ansible-option-table tbody .row-even td{background-color:#e7f2fa!important}table.ansible-option-table ul>li>p{margin:0!important}table.ansible-option-table ul>li>div[class^=highlight]{margin-bottom:4px!important}table.ansible-option-table p.ansible-option-title{display:inline}table.ansible-option-table .ansible-option-type-line{font-size:small;margin-bottom:0}table.ansible-option-table .ansible-option-elements,table.ansible-option-table .ansible-option-type{color:purple}table.ansible-option-table .ansible-option-required{color:red}table.ansible-option-table .ansible-option-versionadded{font-style:italic;font-size:small;color:#006400}table.ansible-option-table .ansible-option-aliases{color:#006400;white-space:normal}table.ansible-option-table .ansible-option-line{margin-top:8px}table.ansible-option-table .ansible-option-choices{font-weight:700}table.ansible-option-table .ansible-option-choices-default-mark,table.ansible-option-table .ansible-option-default{color:#00f}table.ansible-option-table .ansible-option-default-bold{color:#00f;font-weight:700}table.ansible-option-table .ansible-option-returned-bold{font-weight:700}table.ansible-option-table .ansible-option-sample{color:#00f;word-wrap:break-word;word-break:break-all}table.ansible-option-table .ansible-option-sample-bold{color:#000;font-weight:700}table.ansible-option-table .ansible-option-configuration{font-weight:700}table.ansible-option-table .ansibleOptionLink{display:inline-block;visibility:hidden}table.ansible-option-table .ansibleOptionLink:after{content:"🔗"}table.ansible-option-table p{margin:0 0 8px}table.ansible-option-table tr:hover .ansibleOptionLink:after{visibility:visible}table.ansible-option-table td{padding:0!important;white-space:normal}table.ansible-option-table td>div.ansible-option-cell{padding:8px 16px;border-top:1px solid #000}table.ansible-option-table td:first-child{height:inherit;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}table.ansible-option-table td:first-child>div.ansible-option-cell{height:inherit;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;white-space:nowrap;max-width:100%}table.ansible-option-table .ansible-option-indent{margin-left:2em;border-right:1px solid #000}table.ansible-option-table .ansible-attribute-support-label{display:none}table.ansible-option-table .ansible-attribute-support-label,table.ansible-option-table .ansible-attribute-support-property{font-weight:700}table.ansible-option-table .ansible-attribute-support-none{font-weight:700;color:red}table.ansible-option-table .ansible-attribute-support-partial{font-weight:700;color:#a5a500}table.ansible-option-table .ansible-attribute-support-full{font-weight:700;color:green}table.ansible-option-table .ansible-attribute-details{font-style:italic}@media (max-width:1200px){table.ansible-option-table{display:block;height:unset;border:none!important}table.ansible-option-table thead{display:none}table.ansible-option-table tbody,table.ansible-option-table td,table.ansible-option-table tr{display:block;border:none!important}table.ansible-option-table tbody .row-even td,table.ansible-option-table tbody .row-odd td{background-color:unset!important}table.ansible-option-table td>div.ansible-option-cell{border-top:none}table.ansible-option-table td:first-child>div.ansible-option-cell{background-color:#e7f2fa!important}table.ansible-option-table td:not(:first-child){display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}table.ansible-option-table td:not(:first-child)>div.ansible-option-cell{margin-left:1em}table.ansible-option-table .ansible-option-indent,table.ansible-option-table .ansible-option-indent-desc{margin-left:1em;border:none;border-right:3px solid #e7f2fa}table.ansible-option-table .ansible-attribute-support-label{display:unset}}.ansible-version-added{font-style:italic} \ No newline at end of file diff --git a/pr/573/_static/basic.css b/pr/573/_static/basic.css deleted file mode 100644 index eeb0519a..00000000 --- a/pr/573/_static/basic.css +++ /dev/null @@ -1,899 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} -dl.field-list > dt:after { - content: ":"; -} - - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/pr/573/_static/css/ansible.css b/pr/573/_static/css/ansible.css deleted file mode 100644 index bf839ba4..00000000 --- a/pr/573/_static/css/ansible.css +++ /dev/null @@ -1,490 +0,0 @@ -@import 'theme.css'; -/*! minified with http://css-minify.online-domain-tools.com/ - all comments - * must have ! to preserve during minifying with that tool */ -/*! Fix for read the docs theme: - * https://rackerlabs.github.io/docs-rackspace/tools/rtd-tables.html - */ -/*! override table width restrictions */ -@media screen and (min-width: 767px) { - /*! If we ever publish to read the docs, we need to use !important for - * these two styles as read the docs itself loads their theme in a way that - * we can't otherwise override it. - */ - .wy-table-responsive table td { - white-space: normal; - } - .wy-table-responsive { - overflow: visible; - } -} -/*! - * We use the class documentation-table for attribute tables where the first - * column is the name of an attribute and the second column is the description. - */ -/*! These tables look like this: - * - * Attribute Name Description - * -------------- ----------- - * **NAME** This is a multi-line description - * str/required that can span multiple lines - * added in x.y - * With multiple paragraphs - * -------------- ----------- - * - * **NAME** is given the class .value-name - * str is given the class .value-type - * / is given the class .value-separator - * required is given the class .value-required - * added in x.y is given the class .value-added-in - */ -/*! The extra .rst-content is so this will override rtd theme */ -.rst-content table.documentation-table td { - vertical-align: top; -} -table.documentation-table td:first-child { - white-space: nowrap; - vertical-align: top; -} -table.documentation-table td:first-child p:first-child { - font-weight: 700; - display: inline; -} -/*! This is now redundant with above position-based styling */ -/*! -table.documentation-table .value-name { - font-weight: bold; - display: inline; -} -*/ -table.documentation-table .value-type { - font-size: x-small; - color: purple; - display: inline; -} -table.documentation-table .value-separator { - font-size: x-small; - display: inline; -} -table.documentation-table .value-required { - font-size: x-small; - color: red; - display: inline; -} -.value-added-in { - font-size: x-small; - font-style: italic; - color: green; - display: inline; -} -/*! Ansible-specific CSS pulled out of rtd theme for 2.9 */ -.DocSiteProduct-header { - flex: 1; - -webkit-flex: 1; - padding: 10px 20px 20px; - display: flex; - display: -webkit-flex; - flex-direction: column; - -webkit-flex-direction: column; - align-items: center; - -webkit-align-items: center; - justify-content: flex-start; - -webkit-justify-content: flex-start; - margin-left: 20px; - margin-right: 20px; - text-decoration: none; - font-weight: 400; - font-family: "Open Sans", sans-serif; -} -.DocSiteProduct-header:active, -.DocSiteProduct-header:focus, -.DocSiteProduct-header:visited { - color: #fff; -} -.DocSiteProduct-header--core { - font-size: 25px; - background-color: #5bbdbf; - border: 2px solid #5bbdbf; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - color: #fff; - padding-left: 2px; - margin-left: 2px; -} -.DocSiteProduct-headerAlign { - width: 100%; -} -.DocSiteProduct-logo { - width: 60px; - height: 60px; - margin-bottom: -9px; -} -.DocSiteProduct-logoText { - margin-top: 6px; - font-size: 25px; - text-align: left; -} -.DocSiteProduct-CheckVersionPara { - margin-left: 2px; - padding-bottom: 4px; - margin-right: 2px; - margin-bottom: 10px; -} -/*! Ansible color scheme */ -.wy-nav-top, -.wy-side-nav-search { - background-color: #5bbdbf; -} -.wy-menu-vertical header, -.wy-menu-vertical p.caption { - color: #5bbdbf; -} -.wy-menu-vertical a { - padding: 0; -} -.wy-menu-vertical a.reference.internal { - padding: 0.4045em 1.618em; -} -/*! Override sphinx rtd theme max-with of 800px */ -.wy-nav-content { - max-width: 100%; -} -/*! - * Override sphinx_rtd_theme - keeps left-nav from overwriting - * Documentation title - **/ -.wy-nav-side { - top: 45px; -} -/*! - * Ansible - changed absolute to relative to remove extraneous side scroll bar - **/ -.wy-grid-for-nav { - position: relative; -} -/*! Ansible narrow the search box */ -.wy-side-nav-search input[type="text"] { - width: 90%; - padding-left: 24px; -} -/*! Ansible - remove so highlight indenting is correct */ -.rst-content .highlighted { - padding: 0; -} -.DocSiteBanner { - display: flex; - display: -webkit-flex; - justify-content: center; - -webkit-justify-content: center; - flex-wrap: wrap; - -webkit-flex-wrap: wrap; - margin-bottom: 25px; -} -.DocSiteBanner-imgWrapper { - max-width: 100%; -} -td, -th { - min-width: 100px; -} -table { - overflow-x: auto; - max-width: 100%; -} -.documentation-table td, -.documentation-table th { - padding: 4px; - border-left: 1px solid #000; - border-top: 1px solid #000; -} -.documentation-table { - border-right: 1px solid #000; - border-bottom: 1px solid #000; -} -@media print { - * { - background: 0 0 !important; - color: #000 !important; - text-shadow: none !important; - filter: none !important; - -ms-filter: none !important; - } - #nav, - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - /*! Don't show links for images, or javascript/internal links */ - pre, - blockquote { - border: 0 solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - /*! h5bp.com/t */ - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - h2, - h3, - p { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - #google_image_div, - .DocSiteBanner { - display: none !important; - } -} -#sideBanner, -.DocSite-globalNav { - display: none; -} -.DocSite-sideNav { - display: block; - margin-bottom: 40px; -} -.DocSite-nav { - display: none; -} -.ansibleNav { - background: #000; - padding: 0 20px; - width: auto; - border-bottom: 1px solid #444; - font-size: 14px; - z-index: 1; -} -.ansibleNav ul { - list-style: none; - padding-left: 0; - margin-top: 0; -} -.ansibleNav ul li { - padding: 7px 0; - border-bottom: 1px solid #444; -} -.ansibleNav ul li:last-child { - border: none; -} -.ansibleNav ul li a { - color: #fff; - text-decoration: none; - text-transform: uppercase; - padding: 6px 0; -} -.ansibleNav ul li a:hover { - color: #5bbdbf; - background: 0 0; -} -h4 { - font-size: 105%; -} -h5 { - font-size: 90%; -} -h6 { - font-size: 80%; -} -@media screen and (min-width: 768px) { - .DocSite-globalNav { - display: block; - position: fixed; - } - #sideBanner { - display: block; - } - .DocSite-sideNav { - display: none; - } - .DocSite-nav { - flex: initial; - -webkit-flex: initial; - display: flex; - display: -webkit-flex; - flex-direction: row; - -webkit-flex-direction: row; - justify-content: flex-start; - -webkit-justify-content: flex-start; - padding: 15px; - background-color: #000; - text-decoration: none; - font-family: "Open Sans", sans-serif; - } - .DocSiteNav-logo { - width: 28px; - height: 28px; - margin-right: 8px; - margin-top: -6px; - position: fixed; - z-index: 1; - } - .DocSiteNav-title { - color: #fff; - font-size: 20px; - position: fixed; - margin-left: 40px; - margin-top: -4px; - z-index: 1; - } - .ansibleNav { - height: 45px; - width: 100%; - font-size: 13px; - padding: 0 60px 0 0; - } - .ansibleNav ul { - float: right; - display: flex; - flex-wrap: nowrap; - margin-top: 13px; - } - .ansibleNav ul li { - padding: 0; - border-bottom: none; - } - .ansibleNav ul li a { - color: #fff; - text-decoration: none; - text-transform: uppercase; - padding: 8px 13px; - } - h4 { - font-size: 105%; - } - h5 { - font-size: 90%; - } - h6 { - font-size: 80%; - } -} -@media screen and (min-width: 768px) { - #sideBanner, - .DocSite-globalNav { - display: block; - } - .DocSite-sideNav { - display: none; - } - .DocSite-nav { - flex: initial; - -webkit-flex: initial; - display: flex; - display: -webkit-flex; - flex-direction: row; - -webkit-flex-direction: row; - justify-content: flex-start; - -webkit-justify-content: flex-start; - padding: 15px; - background-color: #000; - text-decoration: none; - font-family: "Open Sans", sans-serif; - } - .DocSiteNav-logo { - width: 28px; - height: 28px; - margin-right: 8px; - margin-top: -6px; - position: fixed; - } - .DocSiteNav-title { - color: #fff; - font-size: 20px; - position: fixed; - margin-left: 40px; - margin-top: -4px; - } - .ansibleNav { - height: 45px; - font-size: 13px; - padding: 0 60px 0 0; - } - .ansibleNav ul { - float: right; - display: flex; - flex-wrap: nowrap; - margin-top: 13px; - } - .ansibleNav ul li { - padding: 0; - border-bottom: none; - } - .ansibleNav ul li a { - color: #fff; - text-decoration: none; - text-transform: uppercase; - padding: 8px 13px; - } - h4 { - font-size: 105%; - } - h5 { - font-size: 90%; - } - h6 { - font-size: 80%; - } -} -/* ansibleOptionLink is adapted from h1 .headerlink in sphinx_rtd_theme */ -/* This definition lives in the antsibull Sphinx extension; we update it here to use the icon from FontAwesome */ -/* https://github.com/ansible-community/antsibull/blob/main/sphinx_antsibull_ext/css/antsibull-minimal.scss */ -tr .ansibleOptionLink::after { - content: "" !important; - font-family: FontAwesome; -} -tr .ansibleOptionLink { - font: normal normal normal 14px/1 FontAwesome; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -@media screen and (min-width: 767px) { - /* Move anchors a bit up so that they aren't hidden by the header bar */ - section [id] { - padding-top: 45px; - margin-top: -45px; - } - /* - * Without this, - * for example most links in the page's TOC aren't usable anymore - * */ - section a[id] { - padding-top: 0; - margin-top: 0; - } -} - -/* Assure reading examples does not require horizontal scrolling */ -.rst-content div[class^="highlight"] pre { - white-space: pre-wrap; -} - -.rst-content dl dt { margin-bottom: 0; } - -/*! Make sure that environment variable links are blue */ -.rst-content code.xref.std-envvar { color: #2980b9; } diff --git a/pr/573/_static/css/badge_only.css b/pr/573/_static/css/badge_only.css deleted file mode 100644 index c718cee4..00000000 --- a/pr/573/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/pr/573/_static/css/fonts/Roboto-Slab-Bold.woff b/pr/573/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb60000..00000000 Binary files a/pr/573/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/Roboto-Slab-Bold.woff2 b/pr/573/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e231..00000000 Binary files a/pr/573/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/pr/573/_static/css/fonts/Roboto-Slab-Regular.woff b/pr/573/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f..00000000 Binary files a/pr/573/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/Roboto-Slab-Regular.woff2 b/pr/573/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5b..00000000 Binary files a/pr/573/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/pr/573/_static/css/fonts/fontawesome-webfont.eot b/pr/573/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca9..00000000 Binary files a/pr/573/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/pr/573/_static/css/fonts/fontawesome-webfont.svg b/pr/573/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e..00000000 --- a/pr/573/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pr/573/_static/css/fonts/fontawesome-webfont.ttf b/pr/573/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2f..00000000 Binary files a/pr/573/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/pr/573/_static/css/fonts/fontawesome-webfont.woff b/pr/573/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4..00000000 Binary files a/pr/573/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/fontawesome-webfont.woff2 b/pr/573/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60..00000000 Binary files a/pr/573/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-bold-italic.woff b/pr/573/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b9..00000000 Binary files a/pr/573/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-bold-italic.woff2 b/pr/573/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804..00000000 Binary files a/pr/573/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-bold.woff b/pr/573/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51f..00000000 Binary files a/pr/573/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-bold.woff2 b/pr/573/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043..00000000 Binary files a/pr/573/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-normal-italic.woff b/pr/573/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc0..00000000 Binary files a/pr/573/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-normal-italic.woff2 b/pr/573/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37e..00000000 Binary files a/pr/573/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-normal.woff b/pr/573/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307ff..00000000 Binary files a/pr/573/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/pr/573/_static/css/fonts/lato-normal.woff2 b/pr/573/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf98433..00000000 Binary files a/pr/573/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/pr/573/_static/css/rtd-ethical-ads.css b/pr/573/_static/css/rtd-ethical-ads.css deleted file mode 100644 index a146003e..00000000 --- a/pr/573/_static/css/rtd-ethical-ads.css +++ /dev/null @@ -1,4 +0,0 @@ -.ethical-sidebar, -.ethical-footer { - border-radius: 0 !important; -} diff --git a/pr/573/_static/css/theme.css b/pr/573/_static/css/theme.css deleted file mode 100644 index 09a1af86..00000000 --- a/pr/573/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dt:after,html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets,html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content dl.citation,.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content dl.citation code,.rst-content dl.citation tt,.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/pr/573/_static/doctools.js b/pr/573/_static/doctools.js deleted file mode 100644 index 527b876c..00000000 --- a/pr/573/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/pr/573/_static/documentation_options.js b/pr/573/_static/documentation_options.js deleted file mode 100644 index bcae2ea9..00000000 --- a/pr/573/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: false, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/pr/573/_static/file.png b/pr/573/_static/file.png deleted file mode 100644 index a858a410..00000000 Binary files a/pr/573/_static/file.png and /dev/null differ diff --git a/pr/573/_static/images/Ansible-Mark-RGB_Black.png b/pr/573/_static/images/Ansible-Mark-RGB_Black.png deleted file mode 100644 index 0b4e7219..00000000 Binary files a/pr/573/_static/images/Ansible-Mark-RGB_Black.png and /dev/null differ diff --git a/pr/573/_static/images/Ansible-Mark-RGB_Black.svg b/pr/573/_static/images/Ansible-Mark-RGB_Black.svg deleted file mode 100644 index c600b6ee..00000000 --- a/pr/573/_static/images/Ansible-Mark-RGB_Black.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/pr/573/_static/images/Ansible-Mark-RGB_White.png b/pr/573/_static/images/Ansible-Mark-RGB_White.png deleted file mode 100644 index 5754701a..00000000 Binary files a/pr/573/_static/images/Ansible-Mark-RGB_White.png and /dev/null differ diff --git a/pr/573/_static/images/Ansible-Mark-RGB_White.svg b/pr/573/_static/images/Ansible-Mark-RGB_White.svg deleted file mode 100644 index 2275aece..00000000 --- a/pr/573/_static/images/Ansible-Mark-RGB_White.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/pr/573/_static/jquery-3.6.0.js b/pr/573/_static/jquery-3.6.0.js deleted file mode 100644 index fc6c299b..00000000 --- a/pr/573/_static/jquery-3.6.0.js +++ /dev/null @@ -1,10881 +0,0 @@ -/*! - * jQuery JavaScript Library v3.6.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2021-03-02T17:08Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.6.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); - } ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - // Support: Chrome 86+ - // In Chrome, if an element having a focusout handler is blurred by - // clicking outside of it, it invokes the handler synchronously. If - // that handler calls `.remove()` on the element, the data is cleared, - // leaving `result` undefined. We need to guard against this. - return result && result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - // Suppress native focus or blur as it's already being fired - // in leverageNative. - _default: function() { - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ).filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ).map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.current_container_facts module – Return facts about whether the module runs in a container

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker.

-

To use it in a playbook, specify: community.docker.current_container_facts.

-
-

New in community.docker 1.1.0

- -
-

Synopsis

-
    -
  • Return facts about whether the module runs in a Docker or podman container.

  • -
  • This module attempts a best-effort detection. There might be special cases where it does not work; if you encounter one, please file an issue.

  • -
  • Docs test.

  • -
  • And another part.

  • -
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-

facts

-

Support: full

-

Action returns an ansible_facts dictionary that will update existing host facts.

-
-
-
-

Examples

-
- name: Get facts on current container
-  community.docker.current_container_facts:
-
-- name: Print information on current container when running in a container
-  ansible.builtin.debug:
-    msg: "Container ID is {{ ansible_module_container_id }}"
-  when: ansible_module_running_in_container
-
-
-
-
-

Returned Facts

-

Facts returned by this module are added/updated in the hostvars host facts and can be referenced by name just like any other host fact. They do not need to be registered in order to use them.

- - - - - - - - - - - - - - - - - -

Key

Description

-

ansible_module_container_id

-

string

-

The detected container ID.

-

Contains an empty string if no container was detected.

-

Returned: always

-
-

ansible_module_container_type

-

string

-

The detected container environment.

-

Contains an empty string if no container was detected, or a non-empty string identifying the container environment.

-

docker indicates that the module ran inside a regular Docker container.

-

azure_pipelines indicates that the module ran on Azure Pipelines. This seems to no longer be reported.

-

github_actions indicates that the module ran inside a Docker container on GitHub Actions. It is supported since community.docker 2.4.0.

-

podman indicates that the module ran inside a regular Podman container. It is supported since community.docker 3.3.0.

-

Returned: always

-

Can only return:

-
    -
  • ""

  • -
  • "docker"

  • -
  • "azure_pipelines"

  • -
  • "github_actions"

  • -
  • "podman"

  • -
-
-

ansible_module_running_in_container

-

boolean

-

Whether the module was able to detect that it runs in a container or not.

-

Returned: always

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_api_connection.html b/pr/573/docker_api_connection.html deleted file mode 100644 index bdd0565b..00000000 --- a/pr/573/docker_api_connection.html +++ /dev/null @@ -1,507 +0,0 @@ - - - - - - - community.docker.docker_api connection – Run tasks in docker containers — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_api connection – Run tasks in docker containers

-
-

Note

-

This connection plugin is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this connection plugin, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_api.

-
-

New in community.docker 1.1.0

- -
-

Synopsis

-
    -
  • Run commands or put/fetch files to an existing docker container.

  • -
  • Uses the requests library to interact directly with the Docker daemon instead of using the Docker CLI. Use the community.docker.docker connection plugin if you want to use the Docker CLI.

  • -
-
-
-

Requirements

-

The below requirements are needed on the local controller node that executes this connection.

-
    -
  • requests

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-

Configuration:

-
    -
  • Variable: ansible_docker_api_version

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-

Configuration:

-
    -
  • Variable: ansible_docker_ca_cert

  • -
-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-

Configuration:

-
    -
  • Variable: ansible_docker_client_cert

  • -
-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-

Configuration:

-
    -
  • Variable: ansible_docker_client_key

  • -
-
-

container_timeout

-

integer

-

Controls how long we can wait to access reading output from the container once execution started.

-

Default: 10

-

Configuration:

-
    -
  • INI entries:

    -
    [defaults]
    -timeout = 10
    -
    -
    -
    [docker_connection]
    -timeout = 10
    -
    -
    -

    added in community.docker 2.2.0

    -
  • -
  • Environment variable: ANSIBLE_TIMEOUT

  • -
  • Environment variable: ANSIBLE_DOCKER_TIMEOUT

    -

    added in community.docker 2.2.0

    -
  • -
  • Variable: ansible_docker_timeout

    -

    added in community.docker 2.2.0

    -
  • -
  • CLI argument: –timeout

  • -
-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-

Configuration:

-
    -
  • Variable: ansible_docker_docker_host

  • -
-
-

remote_addr

-

string

-

The name of the container you want to access.

-

Default: "inventory_hostname"

-

Configuration:

-
    -
  • Variable: inventory_hostname

  • -
  • Variable: ansible_host

  • -
  • Variable: ansible_docker_host

  • -
-
-

remote_user

-

string

-

The user to execute as inside the container.

-

Configuration:

-
    -
  • INI entry:

    -
    [defaults]
    -remote_user = VALUE
    -
    -
    -
  • -
  • Environment variable: ANSIBLE_REMOTE_USER

  • -
  • Variable: ansible_user

  • -
  • Variable: ansible_docker_user

  • -
  • Keyword: remote_user

  • -
  • CLI argument: –user

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-

Configuration:

-
    -
  • Variable: ansible_docker_ssl_version

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-

Configuration:

-
    -
  • Variable: ansible_docker_timeout

  • -
-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-

Configuration:

-
    -
  • Variable: ansible_docker_tls

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-

Configuration:

-
    -
  • Variable: ansible_docker_tls_hostname

  • -
-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-

Configuration:

-
    -
  • Variable: ansible_docker_validate_certs

  • -
-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
-

Hint

-

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.

-
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_compose_module.html b/pr/573/docker_compose_module.html deleted file mode 100644 index f4b58408..00000000 --- a/pr/573/docker_compose_module.html +++ /dev/null @@ -1,1067 +0,0 @@ - - - - - - - community.docker.docker_compose module – Manage multi-container Docker applications with Docker Compose. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_compose module – Manage multi-container Docker applications with Docker Compose.

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_compose.

-
- -
-

Synopsis

-
    -
  • Uses Docker Compose to start, shutdown and scale services. This module requires docker-compose < 2.0.0.

  • -
  • Configuration can be read from a docker-compose.yml or docker-compose.yaml file or inline using the definition option.

  • -
  • See the examples for more details.

  • -
  • Supports check mode.

  • -
  • This module was called docker_service before Ansible 2.8. The usage did not change.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). Note that both modules should *not* be installed at the same time. Also note that when both modules are installed and one of them is uninstalled, the other might no longer function and a reinstall of it is required.

  • -
  • Docker SDK for Python >= 1.8.0

  • -
  • PyYAML >= 3.11

  • -
  • docker-compose >= 1.7.0, < 2.0.0

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

build

-

boolean

-

Use with state present to always build images prior to starting the application.

-

Same as running docker-compose build with the pull option.

-

Images will only be rebuilt if Docker detects a change in the Dockerfile or build directory contents.

-

Use the nocache option to ignore the image cache when performing the build.

-

If an existing image is replaced, services using the image will be recreated unless recreate is never.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

definition

-

dictionary

-

Compose file describing one or more services, networks and volumes.

-

Mutually exclusive with project_src and files.

-
-

dependencies

-

boolean

-

When state is present specify whether or not to include linked services.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

env_file

-

path

-

added in community.docker 1.9.0

-

By default environment files are loaded from a .env file located directly under the project_src directory.

-

env_file can be used to specify the path of a custom environment file instead.

-

The path is relative to the project_src directory.

-

Requires docker-compose version 1.25.0 or greater.

-

Note: docker-compose versions <=1.28 load the env file from the current working directory of the docker-compose command rather than project_src.

-
-

files

-

list / elements=path

-

List of Compose file names relative to project_src. Overrides docker-compose.yml or docker-compose.yaml.

-

Files are loaded and merged in the order given.

-
-

hostname_check

-

boolean

-

Whether or not to check the Docker daemon’s hostname against the name provided in the client certificate.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

nocache

-

boolean

-

Use with the build option to ignore the cache during the image build process.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

profiles

-

list / elements=string

-

added in community.docker 1.8.0

-

List of profiles to enable when starting services.

-

Equivalent to docker-compose --profile.

-

Requires docker-compose version 1.28.0 or greater.

-
-

project_name

-

string

-

Provide a project name. If not provided, the project name is taken from the basename of project_src.

-

Required when definition is provided.

-
-

project_src

-

path

-

Path to a directory containing a docker-compose.yml or docker-compose.yaml file.

-

Mutually exclusive with definition.

-

Required when no definition is provided.

-
-

pull

-

boolean

-

Use with state present to always pull images prior to starting the application.

-

Same as running docker-compose pull.

-

When a new image is pulled, services using the image will be recreated unless recreate is never.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

recreate

-

string

-

By default containers will be recreated when their configuration differs from the service definition.

-

Setting to never ignores configuration differences and leaves existing containers unchanged.

-

Setting to always forces recreation of all existing containers.

-

Choices:

-
    -
  • "always"

  • -
  • "never"

  • -
  • "smart" ← (default)

  • -
-
-

remove_images

-

string

-

Use with state absent to remove all images or only local images.

-

Choices:

-
    -
  • "all"

  • -
  • "local"

  • -
-
-

remove_orphans

-

boolean

-

Remove containers for services not defined in the Compose file.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

remove_volumes

-

boolean

-

Use with state absent to remove data volumes.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

restarted

-

boolean

-

Use with state present to restart all containers defined in the Compose file.

-

If services is defined, only the containers listed there will be restarted.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

scale

-

dictionary

-

When state is present scale services. Provide a dictionary of key/value pairs where the key is the name of the service and the value is an integer count for the number of containers.

-
-

services

-

list / elements=string

-

When state is present run docker-compose up resp. docker-compose stop (with stopped) resp. docker-compose restart (with restarted) on a subset of services.

-

If empty, which is the default, the operation will be performed on all services defined in the Compose file (or inline definition).

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

Desired state of the project.

-

Specifying present is the same as running docker-compose up resp. docker-compose stop (with stopped) resp. docker-compose restart (with restarted).

-

Specifying absent is the same as running docker-compose down.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
-
-

stopped

-

boolean

-

Use with state present to stop all containers defined in the Compose file.

-

If services is defined, only the containers listed there will be stopped.

-

Requires docker-compose version 1.17.0 or greater for full support. For older versions, the services will first be started and then stopped when the service is supposed to be created as stopped.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

timeout

-

integer

-

Timeout in seconds for container shutdown when attached or when containers are already running.

-

By default compose will use a 10s timeout unless default_grace_period is defined for a particular service in the project_src.

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

Currently ignored for this module, but might suddenly be supported later on.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
# Examples use the django example at https://docs.docker.com/compose/django. Follow it to create the
-# flask directory
-
-- name: Run using a project directory
-  hosts: localhost
-  gather_facts: false
-  tasks:
-    - name: Tear down existing services
-      community.docker.docker_compose:
-        project_src: flask
-        state: absent
-
-    - name: Create and start services
-      community.docker.docker_compose:
-        project_src: flask
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-    - name: Run `docker-compose up` again
-      community.docker.docker_compose:
-        project_src: flask
-        build: false
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-    - ansible.builtin.assert:
-        that: not output.changed
-
-    - name: Stop all services
-      community.docker.docker_compose:
-        project_src: flask
-        build: false
-        stopped: true
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-    - ansible.builtin.assert:
-        that:
-          - "not output.services.web.flask_web_1.state.running"
-          - "not output.services.db.flask_db_1.state.running"
-
-    - name: Restart services
-      community.docker.docker_compose:
-        project_src: flask
-        build: false
-        restarted: true
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-    - ansible.builtin.assert:
-        that:
-          - "output.services.web.flask_web_1.state.running"
-          - "output.services.db.flask_db_1.state.running"
-
-- name: Scale the web service to 2
-  hosts: localhost
-  gather_facts: false
-  tasks:
-    - community.docker.docker_compose:
-        project_src: flask
-        scale:
-          web: 2
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-- name: Run with inline Compose file version 2
-  # https://docs.docker.com/compose/compose-file/compose-file-v2/
-  hosts: localhost
-  gather_facts: false
-  tasks:
-    - community.docker.docker_compose:
-        project_src: flask
-        state: absent
-
-    - community.docker.docker_compose:
-        project_name: flask
-        definition:
-          version: '2'
-          services:
-            db:
-              image: postgres
-            web:
-              build: "{{ playbook_dir }}/flask"
-              command: "python manage.py runserver 0.0.0.0:8000"
-              volumes:
-                - "{{ playbook_dir }}/flask:/code"
-              ports:
-                - "8000:8000"
-              depends_on:
-                - db
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-    - ansible.builtin.assert:
-        that:
-          - "output.services.web.flask_web_1.state.running"
-          - "output.services.db.flask_db_1.state.running"
-
-- name: Run with inline Compose file version 1
-  # https://docs.docker.com/compose/compose-file/compose-file-v1/
-  hosts: localhost
-  gather_facts: false
-  tasks:
-    - community.docker.docker_compose:
-        project_src: flask
-        state: absent
-
-    - community.docker.docker_compose:
-        project_name: flask
-        definition:
-            db:
-              image: postgres
-            web:
-              build: "{{ playbook_dir }}/flask"
-              command: "python manage.py runserver 0.0.0.0:8000"
-              volumes:
-                - "{{ playbook_dir }}/flask:/code"
-              ports:
-                - "8000:8000"
-              links:
-                - db
-      register: output
-
-    - ansible.builtin.debug:
-        var: output
-
-    - ansible.builtin.assert:
-        that:
-          - "output.services.web.flask_web_1.state.running"
-          - "output.services.db.flask_db_1.state.running"
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Key

Description

-

actions

-

complex

-

Provides the actions to be taken on each service as determined by compose.

-

Returned: when in check mode or debug is true

-
-

service_name

-

complex

-

Name of the service.

-

Returned: always

-
-

action

-

list / elements=string

-

A descriptive name of the action to be performed on the service’s containers.

-

Returned: always

-
-

id

-

string

-

the container’s long ID

-

Returned: always

-
-

name

-

string

-

the container’s name

-

Returned: always

-
-

short_id

-

string

-

the container’s short ID

-

Returned: always

-
-

built_image

-

complex

-

Provides image details when a new image is built for the service.

-

Returned: on image build

-
-

id

-

string

-

image hash

-

Returned: always

-
-

name

-

string

-

name of the image

-

Returned: always

-
-

pulled_image

-

complex

-

Provides image details when a new image is pulled for the service.

-

Returned: on image pull

-
-

id

-

string

-

image hash

-

Returned: always

-
-

name

-

string

-

name of the image

-

Returned: always

-
-

services

-

complex

-

A dictionary mapping the service’s name to a dictionary of containers.

-

Returned: success

-
-

container_name

-

complex

-

Name of the container. Format is project_service_#.

-

Returned: success

-
-

cmd

-

list / elements=string

-

One or more commands to be executed in the container.

-

Returned: success

-

Sample: ["postgres"]

-
-

image

-

string

-

Name of the image from which the container was built.

-

Returned: success

-

Sample: "postgres"

-
-

labels

-

dictionary

-

Meta data assigned to the container.

-

Returned: success

-

Sample: {"...": null}

-
-

networks

-

list / elements=dictionary

-

Contains a dictionary for each network to which the container is a member.

-

Returned: success

-
-

aliases

-

list / elements=string

-

Aliases assigned to the container by the network.

-

Returned: success

-

Sample: ["db"]

-
-

globalIPv6

-

string

-

IPv6 address assigned to the container.

-

Returned: success

-

Sample: ""

-
-

globalIPv6PrefixLen

-

integer

-

IPv6 subnet length.

-

Returned: success

-

Sample: 0

-
-

IPAddress

-

string

-

The IP address assigned to the container.

-

Returned: success

-

Sample: "172.17.0.2"

-
-

IPPrefixLen

-

integer

-

Number of bits used by the subnet.

-

Returned: success

-

Sample: 16

-
- -

list / elements=string

-

List of container names to which this container is linked.

-

Returned: success

-
-

macAddress

-

string

-

Mac Address assigned to the virtual NIC.

-

Returned: success

-

Sample: "02:42:ac:11:00:02"

-
-

state

-

dictionary

-

Information regarding the current disposition of the container.

-

Returned: success

-
-

running

-

boolean

-

Whether or not the container is up with a running process.

-

Returned: success

-

Sample: true

-
-

status

-

string

-

Description of the running state.

-

Returned: success

-

Sample: "running"

-
-
-

Authors

-
    -
  • Chris Houseknecht (@chouseknecht)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_config_module.html b/pr/573/docker_config_module.html deleted file mode 100644 index b544f396..00000000 --- a/pr/573/docker_config_module.html +++ /dev/null @@ -1,654 +0,0 @@ - - - - - - - community.docker.docker_config module – Manage docker configs. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_config module – Manage docker configs.

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_config.

-
- -
-

Synopsis

-
    -
  • Create and remove Docker configs in a Swarm environment. Similar to docker config create and docker config rm.

  • -
  • Adds to the metadata of new configs ‘ansible_key’, an encrypted hash representation of the data, which is then used in future runs to test if a config has changed. If ‘ansible_key’ is not present, then a config will not be updated unless the force option is set.

  • -
  • Updates to configs are performed by removing the config and creating it again.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.30

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). This module does *not* work with docker-py.

  • -
  • Docker SDK for Python >= 2.6.0

  • -
  • Python >= 2.7

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

data

-

string

-

The value of the config.

-

Mutually exclusive with data_src. One of data and data_src is required if state=present.

-
-

data_is_b64

-

boolean

-

If set to true, the data is assumed to be Base64 encoded and will be decoded before being used.

-

To use binary data, it is better to keep it Base64 encoded and let it be decoded by this option.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

data_src

-

path

-

added in community.docker 1.10.0

-

The file on the target from which to read the config.

-

Mutually exclusive with data. One of data and data_src is required if state=present.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

force

-

boolean

-

Use with state present to always remove and recreate an existing config.

-

If true, an existing config will be replaced, even if it has not been changed.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

labels

-

dictionary

-

A map of key:value meta data, where both the key and value are expected to be a string.

-

If new meta data is provided, or existing meta data is modified, the config will be updated by removing it and creating it again.

-
-

name

-

string / required

-

The name of the config.

-
-

rolling_versions

-

boolean

-

added in community.docker 2.2.0

-

If set to true, configs are created with an increasing version number appended to their name.

-

Adds a label containing the version number to the managed configs with the name ansible_version.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

Set to present, if the config should exist, and absent, if it should not.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
-
-

template_driver

-

string

-

added in community.docker 2.5.0

-

Set to golang to use a Go template in data or a Go template file in data_src.

-

Choices:

-
    -
  • "golang"

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

versions_to_keep

-

integer

-

added in community.docker 2.2.0

-

When using rolling_versions, the number of old versions of the config to keep.

-

Extraneous old configs are deleted after the new one is created.

-

Set to -1 to keep everything or to 0 or 1 to keep only the current one.

-

Default: 5

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Create config foo (from a file on the control machine)
-  community.docker.docker_config:
-    name: foo
-    # If the file is JSON or binary, Ansible might modify it (because
-    # it is first decoded and later re-encoded). Base64-encoding the
-    # file directly after reading it prevents this to happen.
-    data: "{{ lookup('file', '/path/to/config/file') | b64encode }}"
-    data_is_b64: true
-    state: present
-
-- name: Create config foo (from a file on the target machine)
-  community.docker.docker_config:
-    name: foo
-    data_src: /path/to/config/file
-    state: present
-
-- name: Change the config data
-  community.docker.docker_config:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: baz
-      one: '1'
-    state: present
-
-- name: Add a new label
-  community.docker.docker_config:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: baz
-      one: '1'
-      # Adding a new label will cause a remove/create of the config
-      two: '2'
-    state: present
-
-- name: No change
-  community.docker.docker_config:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: baz
-      one: '1'
-      # Even though 'two' is missing, there is no change to the existing config
-    state: present
-
-- name: Update an existing label
-  community.docker.docker_config:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: monkey   # Changing a label will cause a remove/create of the config
-      one: '1'
-    state: present
-
-- name: Force the (re-)creation of the config
-  community.docker.docker_config:
-    name: foo
-    data: Goodnight everyone!
-    force: true
-    state: present
-
-- name: Remove config foo
-  community.docker.docker_config:
-    name: foo
-    state: absent
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

config_id

-

string

-

The ID assigned by Docker to the config object.

-

Returned: success and state is present

-

Sample: "hzehrmyjigmcp2gb6nlhmjqcv"

-
-

config_name

-

string

-

added in community.docker 2.2.0

-

The name of the created config object.

-

Returned: success and state is present

-

Sample: "awesome_config"

-
-
-

Authors

-
    -
  • Chris Houseknecht (@chouseknecht)

  • -
  • John Hu (@ushuz)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_connection.html b/pr/573/docker_connection.html deleted file mode 100644 index 9df5117c..00000000 --- a/pr/573/docker_connection.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - community.docker.docker connection – Run tasks in docker containers — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker connection – Run tasks in docker containers

-
-

Note

-

This connection plugin is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker.

-

To use it in a playbook, specify: community.docker.docker.

-
- -
-

Synopsis

-
    -
  • Run commands or put/fetch files to an existing docker container.

  • -
  • Uses the Docker CLI to execute commands in the container. If you prefer to directly connect to the Docker daemon, use the community.docker.docker_api connection plugin.

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-

container_timeout

-

integer

-

Controls how long we can wait to access reading output from the container once execution started.

-

Default: 10

-

Configuration:

-
    -
  • INI entries:

    -
    [defaults]
    -timeout = 10
    -
    -
    -
    [docker_connection]
    -timeout = 10
    -
    -
    -

    added in community.docker 2.2.0

    -
  • -
  • Environment variable: ANSIBLE_TIMEOUT

  • -
  • Environment variable: ANSIBLE_DOCKER_TIMEOUT

    -

    added in community.docker 2.2.0

    -
  • -
  • Variable: ansible_docker_timeout

    -

    added in community.docker 2.2.0

    -
  • -
  • CLI argument: –timeout

  • -
-
-

docker_extra_args

-

string

-

Extra arguments to pass to the docker command line.

-

Default: ""

-

Configuration:

-
    -
  • INI entry:

    -
    [docker_connection]
    -extra_cli_args = ""
    -
    -
    -
  • -
  • Variable: ansible_docker_extra_args

  • -
-
-

remote_addr

-

string

-

The name of the container you want to access.

-

Default: "inventory_hostname"

-

Configuration:

-
    -
  • Variable: inventory_hostname

  • -
  • Variable: ansible_host

  • -
  • Variable: ansible_docker_host

  • -
-
-

remote_user

-

string

-

The user to execute as inside the container.

-

If Docker is too old to allow this (< 1.7), the one set by Docker itself will be used.

-

Configuration:

-
    -
  • INI entry:

    -
    [defaults]
    -remote_user = VALUE
    -
    -
    -
  • -
  • Environment variable: ANSIBLE_REMOTE_USER

  • -
  • Variable: ansible_user

  • -
  • Variable: ansible_docker_user

  • -
  • Keyword: remote_user

  • -
  • CLI argument: –user

  • -
-
-
-

Authors

-
    -
  • Lorin Hochestein

  • -
  • Leendert Brouwer

  • -
-
-

Hint

-

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.

-
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_container_copy_into_module.html b/pr/573/docker_container_copy_into_module.html deleted file mode 100644 index cec6f877..00000000 --- a/pr/573/docker_container_copy_into_module.html +++ /dev/null @@ -1,599 +0,0 @@ - - - - - - - community.docker.docker_container_copy_into module – Copy a file into a Docker container — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_container_copy_into module – Copy a file into a Docker container

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_container_copy_into.

-
-

New in community.docker 3.4.0

- -
-

Synopsis

-
    -
  • Copy a file into a Docker container.

  • -
  • Similar to docker cp.

  • -
  • To copy files in a non-running container, you must provide the owner_id and group_id options. This is also necessary if the container does not contain a /bin/sh shell with an id tool.

  • -
-
-

Note

-

This module has a corresponding action plugin.

-
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

container

-

string / required

-

The name of the container to copy files to.

-
-

container_path

-

string / required

-

Path to a file inside the Docker container.

-

Must be an absolute path.

-
-

content

-

string

-

The file’s content.

-

If you plan to provide binary data, provide it pre-encoded to base64, and set content_is_b64=true.

-

Mutually exclusive with path. One of content and path is required.

-
-

content_is_b64

-

boolean

-

If set to true, the content in content is assumed to be Base64 encoded and will be decoded before being used.

-

To use binary content, it is better to keep it Base64 encoded and let it be decoded by this option. Otherwise you risk the data to be interpreted as UTF-8 and corrupted.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

follow

-

boolean

-

This flag indicates that filesystem links in the Docker container, if they exist, should be followed.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

force

-

boolean

-

If set to true, force writing the file (without performing any idempotency checks).

-

If set to false, only write the file if it does not exist on the target. If a filesystem object exists at the destination, the module will not do any change.

-

If this option is not specified, the module will be idempotent. To verify idempotency, it will try to get information on the filesystem object in the container, and if everything seems to match will download the file from the container to compare it to the file to upload.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

group_id

-

integer

-

The group ID to use when writing the file to disk.

-

If provided, owner_id must also be provided.

-

If not provided, the module will try to determine the user and group ID for the current user in the container. This will only work if /bin/sh is present in the container and the id binary or shell builtin is available. Also the container must be running.

-
-

local_follow

-

boolean

-

This flag indicates that filesystem links in the source tree (where the module is executed), if they exist, should be followed.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

mode

-

integer

-

The file mode to use when writing the file to disk.

-

Will use the file’s mode from the source system if this option is not provided.

-
-

owner_id

-

integer

-

The owner ID to use when writing the file to disk.

-

If provided, group_id must also be provided.

-

If not provided, the module will try to determine the user and group ID for the current user in the container. This will only work if /bin/sh is present in the container and the id binary or shell builtin is available. Also the container must be running.

-
-

path

-

path

-

Path to a file on the managed node.

-

Mutually exclusive with content. One of content and path is required.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Additional data will need to be transferred to compute diffs.

-

The module uses the MAX_FILE_SIZE_FOR_DIFF ansible-core configuration to determine for how large files diffs should be computed.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Copy a file into the container
-  community.docker.docker_container_copy_into:
-    container: mydata
-    path: /home/user/data.txt
-    container_path: /data/input.txt
-
-- name: Copy a file into the container with owner, group, and mode set
-  community.docker.docker_container_copy_into:
-    container: mydata
-    path: /home/user/bin/runme.o
-    container_path: /bin/runme
-    owner: 0  # root
-    group: 0  # root
-    mode: 0o755  # readable and executable by all users, writable by root
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

container_path

-

string

-

The actual path in the container.

-

Can only be different from container_path when follow=true.

-

Returned: success

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_container_exec_module.html b/pr/573/docker_container_exec_module.html deleted file mode 100644 index 652553ec..00000000 --- a/pr/573/docker_container_exec_module.html +++ /dev/null @@ -1,625 +0,0 @@ - - - - - - - community.docker.docker_container_exec module – Execute command in a docker container — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_container_exec module – Execute command in a docker container

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_container_exec.

-
-

New in community.docker 1.5.0

- -
-

Synopsis

-
    -
  • Executes a command in a Docker container.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

argv

-

list / elements=string

-

The command to execute.

-

Since this is a list of arguments, no quoting is needed.

-

Exactly one of argv and command must be specified.

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

chdir

-

string

-

The directory to run the command in.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

command

-

string

-

The command to execute.

-

Exactly one of argv and command must be specified.

-
-

container

-

string / required

-

The name of the container to execute the command in.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

detach

-

boolean

-

added in community.docker 2.1.0

-

Whether to run the command synchronously (detach=false, default) or asynchronously (detach=true).

-

If set to true, stdin cannot be provided, and the return values stdout, stderr and rc are not returned.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

env

-

dictionary

-

added in community.docker 2.1.0

-

Dictionary of environment variables with their respective values to be passed to the command ran inside the container.

-

Values which might be parsed as numbers, booleans or other types by the YAML parser must be quoted (for example "true") in order to avoid data loss.

-

Please note that if you are passing values in with Jinja2 templates, like "{{ value }}", you need to add | string to prevent Ansible to convert strings such as "true" back to booleans. The correct way is to use "{{ value | string }}".

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

stdin

-

string

-

Set the stdin of the command directly to the specified value.

-

Can only be used if detach=false.

-
-

stdin_add_newline

-

boolean

-

If set to true, appends a newline to stdin.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

strip_empty_ends

-

boolean

-

Strip empty lines from the end of stdout/stderr in result.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

tty

-

boolean

-

Whether to allocate a TTY.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

user

-

string

-

If specified, the user to execute this command with.

-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: none

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Does not support check_mode.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Run a simple command (command)
-  community.docker.docker_container_exec:
-    container: foo
-    command: /bin/bash -c "ls -lah"
-    chdir: /root
-  register: result
-
-- name: Print stdout
-  debug:
-    var: result.stdout
-
-- name: Run a simple command (argv)
-  community.docker.docker_container_exec:
-    container: foo
-    argv:
-      - /bin/bash
-      - "-c"
-      - "ls -lah > /dev/stderr"
-    chdir: /root
-  register: result
-
-- name: Print stderr lines
-  debug:
-    var: result.stderr_lines
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - - - - -

Key

Description

-

exec_id

-

string

-

added in community.docker 2.1.0

-

The execution ID of the command.

-

Returned: success and detach=true

-

Sample: "249d9e3075655baf705ed8f40488c5e9434049cf3431976f1bfdb73741c574c5"

-
-

rc

-

integer

-

The exit code of the command.

-

Returned: success and detach=false

-

Sample: 0

-
-

stderr

-

string

-

The standard error output of the container command.

-

Returned: success and detach=false

-
-

stdout

-

string

-

The standard output of the container command.

-

Returned: success and detach=false

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_container_info_module.html b/pr/573/docker_container_info_module.html deleted file mode 100644 index 4d5a21a1..00000000 --- a/pr/573/docker_container_info_module.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - community.docker.docker_container_info module – Retrieves facts about docker container — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_container_info module – Retrieves facts about docker container

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_container_info.

-
- -
-

Synopsis

-
    -
  • Retrieves facts about a docker container.

  • -
  • Essentially returns the output of docker inspect <name>, similar to what community.docker.docker_container returns for a non-absent container.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

name

-

string / required

-

The name of the container to inspect.

-

When identifying an existing container name may be a name or a long or short container ID.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Get infos on container
-  community.docker.docker_container_info:
-    name: mydata
-  register: result
-
-- name: Does container exist?
-  ansible.builtin.debug:
-    msg: "The container {{ 'exists' if result.exists else 'does not exist' }}"
-
-- name: Print information about container
-  ansible.builtin.debug:
-    var: result.container
-  when: result.exists
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

container

-

dictionary

-

Facts representing the current state of the container. Matches the docker inspection output.

-

Will be none if container does not exist.

-

Returned: always

-

Sample: "{ \"AppArmorProfile\": \"\", \"Args\": [], \"Config\": { \"AttachStderr\": false, \"AttachStdin\": false, \"AttachStdout\": false, \"Cmd\": [ \"/usr/bin/supervisord\" ], \"Domainname\": \"\", \"Entrypoint\": null, \"Env\": [ \"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\" ], \"ExposedPorts\": { \"443/tcp\": {}, \"80/tcp\": {} }, \"Hostname\": \"8e47bf643eb9\", \"Image\": \"lnmp_nginx:v1\", \"Labels\": {}, \"OnBuild\": null, \"OpenStdin\": false, \"StdinOnce\": false, \"Tty\": false, \"User\": \"\", \"Volumes\": { \"/tmp/lnmp/nginx-sites/logs/\": {} }, ... }"

-
-

exists

-

boolean

-

Returns whether the container exists.

-

Returned: always

-

Sample: true

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_container_module.html b/pr/573/docker_container_module.html deleted file mode 100644 index 02cf2cbc..00000000 --- a/pr/573/docker_container_module.html +++ /dev/null @@ -1,1994 +0,0 @@ - - - - - - - community.docker.docker_container module – manage Docker containers — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_container module – manage Docker containers

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_container.

-
- -
-

Synopsis

-
    -
  • Manage the life cycle of Docker containers.

  • -
  • Supports check mode. Run with --check and --diff to view config difference and list of actions to be taken.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

auto_remove

-

boolean

-

Enable auto-removal of the container on daemon side when the container’s process exits.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

blkio_weight

-

integer

-

Block IO (relative weight), between 10 and 1000.

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

cap_drop

-

list / elements=string

-

List of capabilities to drop from the container.

-
-

capabilities

-

list / elements=string

-

List of capabilities to add to the container.

-

This is equivalent to docker run --cap-add, or the docker-compose option cap_add.

-
-

cgroup_parent

-

string

-

added in community.docker 1.1.0

-

Specify the parent cgroup for the container.

-
-

cgroupns_mode

-

string

-

added in community.docker 3.0.0

-

Specify the cgroup namespace mode for the container.

-

The Docker CLI calls this simply cgroupns.

-

Choices:

-
    -
  • "host"

  • -
  • "private"

  • -
-
-

cleanup

-

boolean

-

Use with detach=false to remove the container after successful execution.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

command

-

any

-

Command to execute when the container starts. A command may be either a string or a list.

-

Prior to version 2.4, strings were split on commas.

-

See command_handling for differences in how strings and lists are handled.

-
-

command_handling

-

string

-

added in community.docker 1.9.0

-

The default behavior for command (when provided as a list) and entrypoint is to convert them to strings without considering shell quoting rules. (For comparing idempotency, the resulting string is split considering shell quoting rules.)

-

Also, setting command to an empty list of string, and setting entrypoint to an empty list will be handled as if these options are not specified. This is different from idempotency handling for other container-config related options.

-

When this is set to compatibility, which was the default until community.docker 3.0.0, the current behavior will be kept.

-

When this is set to correct, these options are kept as lists, and an empty value or empty list will be handled correctly for idempotency checks. This has been the default since community.docker 3.0.0.

-

Choices:

-
    -
  • "compatibility"

  • -
  • "correct" ← (default)

  • -
-
-

comparisons

-

dictionary

-

Allows to specify how properties of existing containers are compared with module options to decide whether the container should be recreated / updated or not.

-

Only options which correspond to the state of a container as handled by the Docker daemon can be specified, as well as networks.

-

Must be a dictionary specifying for an option one of the keys strict, ignore and allow_more_present.

-

If strict is specified, values are tested for equality, and changes always result in updating or restarting. If ignore is specified, changes are ignored.

-

allow_more_present is allowed only for lists, sets and dicts. If it is specified for lists or sets, the container will only be updated or restarted if the module option contains a value which is not present in the container’s options. If the option is specified for a dict, the container will only be updated or restarted if the module option contains a key which is not present in the container’s option, or if the value of a key present differs.

-

The wildcard option * can be used to set one of the default values strict or ignore to all comparisons which are not explicitly set to other values.

-

See the examples for details.

-
-

container_default_behavior

-

string

-

In older versions of this module, various module options used to have default values. This caused problems with containers which use different values for these options.

-

The default value is now no_defaults. To restore the old behavior, set it to compatibility, which will ensure that the default values are used when the values are not explicitly specified by the user.

-

This affects the auto_remove, detach, init, interactive, memory, paused, privileged, read_only and tty options.

-

Choices:

-
    -
  • "compatibility"

  • -
  • "no_defaults" ← (default)

  • -
-
-

cpu_period

-

integer

-

Limit CPU CFS (Completely Fair Scheduler) period.

-

See cpus for an easier to use alternative.

-
-

cpu_quota

-

integer

-

Limit CPU CFS (Completely Fair Scheduler) quota.

-

See cpus for an easier to use alternative.

-
-

cpu_shares

-

integer

-

CPU shares (relative weight).

-
-

cpus

-

float

-

Specify how much of the available CPU resources a container can use.

-

A value of 1.5 means that at most one and a half CPU (core) will be used.

-
-

cpuset_cpus

-

string

-

CPUs in which to allow execution 1,3 or 1-3.

-
-

cpuset_mems

-

string

-

Memory nodes (MEMs) in which to allow execution 0-3 or 0,1.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

default_host_ip

-

string

-

added in community.docker 1.2.0

-

Define the default host IP to use.

-

Must be an empty string, an IPv4 address, or an IPv6 address.

-

With Docker 20.10.2 or newer, this should be set to an empty string ("") to avoid the port bindings without an explicit IP address to only bind to IPv4. See https://github.com/ansible-collections/community.docker/issues/70 for details.

-

By default, the module will try to auto-detect this value from the bridge network’s com.docker.network.bridge.host_binding_ipv4 option. If it cannot auto-detect it, it will fall back to 0.0.0.0.

-
-

detach

-

boolean

-

Enable detached mode to leave the container running in background.

-

If disabled, the task will reflect the status of the container run (failed if the command failed).

-

If container_default_behavior is set to compatibility, this option has a default of true.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

device_read_bps

-

list / elements=dictionary

-

List of device path and read rate (bytes per second) from device.

-
-

path

-

string / required

-

Device path in the container.

-
-

rate

-

string / required

-

Device read limit in format <number>[<unit>].

-

Number is a positive integer. Unit can be one of B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes.

-
-

device_read_iops

-

list / elements=dictionary

-

List of device and read rate (IO per second) from device.

-
-

path

-

string / required

-

Device path in the container.

-
-

rate

-

integer / required

-

Device read limit.

-

Must be a positive integer.

-
-

device_requests

-

list / elements=dictionary

-

added in community.docker 0.1.0

-

Allows to request additional resources, such as GPUs.

-
-

capabilities

-

list / elements=list

-

List of lists of strings to request capabilities.

-

The top-level list entries are combined by OR, and for every list entry, the entries in the list it contains are combined by AND.

-

The driver tries to satisfy one of the sub-lists.

-

Available capabilities for the nvidia driver can be found at https://github.com/NVIDIA/nvidia-container-runtime.

-
-

count

-

integer

-

Number or devices to request.

-

Set to -1 to request all available devices.

-
-

device_ids

-

list / elements=string

-

List of device IDs.

-
-

driver

-

string

-

Which driver to use for this device.

-
-

options

-

dictionary

-

Driver-specific options.

-
-

device_write_bps

-

list / elements=dictionary

-

List of device and write rate (bytes per second) to device.

-
-

path

-

string / required

-

Device path in the container.

-
-

rate

-

string / required

-

Device read limit in format <number>[<unit>].

-

Number is a positive integer. Unit can be one of B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes.

-
-

device_write_iops

-

list / elements=dictionary

-

List of device and write rate (IO per second) to device.

-
-

path

-

string / required

-

Device path in the container.

-
-

rate

-

integer / required

-

Device read limit.

-

Must be a positive integer.

-
-

devices

-

list / elements=string

-

List of host device bindings to add to the container.

-

Each binding is a mapping expressed in the format <path_on_host>:<path_in_container>:<cgroup_permissions>.

-
-

dns_opts

-

list / elements=string

-

List of DNS options.

-
-

dns_search_domains

-

list / elements=string

-

List of custom DNS search domains.

-
-

dns_servers

-

list / elements=string

-

List of custom DNS servers.

-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

domainname

-

string

-

Container domainname.

-
-

entrypoint

-

list / elements=string

-

Command that overwrites the default ENTRYPOINT of the image.

-

See command_handling for differences in how strings and lists are handled.

-
-

env

-

dictionary

-

Dictionary of key,value pairs.

-

Values which might be parsed as numbers, booleans or other types by the YAML parser must be quoted (for example "true") in order to avoid data loss.

-

Please note that if you are passing values in with Jinja2 templates, like "{{ value }}", you need to add | string to prevent Ansible to convert strings such as "true" back to booleans. The correct way is to use "{{ value | string }}".

-
-

env_file

-

path

-

Path to a file, present on the target, containing environment variables FOO=BAR.

-

If variable also present in env, then the env value will override.

-
-

etc_hosts

-

dictionary

-

Dict of host-to-IP mappings, where each host name is a key in the dictionary. Each host name will be added to the container’s /etc/hosts file.

-
-
-
-

exposed_ports

-

aliases: exposed, expose

-

list / elements=string

-

List of additional container ports which informs Docker that the container listens on the specified network ports at runtime.

-

If the port is already exposed using EXPOSE in a Dockerfile, it does not need to be exposed again.

-
-
-

force_kill

-

aliases: forcekill

-

boolean

-

Use the kill command when stopping a running container.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

groups

-

list / elements=string

-

List of additional group names and/or IDs that the container process will run as.

-
-

healthcheck

-

dictionary

-

Configure a check that is run to determine whether or not containers for this service are “healthy”.

-

See the docs for the HEALTHCHECK Dockerfile instruction for details on how healthchecks work.

-

interval, timeout and start_period are specified as durations. They accept duration as a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-
-

interval

-

string

-

Time between running the check.

-

The default used by the Docker daemon is 30s.

-
-

retries

-

integer

-

Consecutive number of failures needed to report unhealthy.

-

The default used by the Docker daemon is 3.

-
-

start_period

-

string

-

Start period for the container to initialize before starting health-retries countdown.

-

The default used by the Docker daemon is 0s.

-
-

test

-

any

-

Command to run to check health.

-

Must be either a string or a list. If it is a list, the first item must be one of NONE, CMD or CMD-SHELL.

-
-

timeout

-

string

-

Maximum time to allow one check to run.

-

The default used by the Docker daemon is 30s.

-
-

hostname

-

string

-

The container’s hostname.

-
-

ignore_image

-

boolean

-

When state is present or started, the module compares the configuration of an existing container to requested configuration. The evaluation includes the image version. If the image version in the registry does not match the container, the container will be recreated. You can stop this behavior by setting ignore_image to true.

-

Warning: This option is ignored if image: ignore or *: ignore is specified in the comparisons option.

-

This option is deprecated since community.docker 3.2.0 and will be removed in community.docker 4.0.0. Use image: ignore in comparisons instead of ignore_image=true.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

image

-

string

-

Repository path and tag used to create the container. If an image is not found or pull is true, the image will be pulled from the registry. If no tag is included, latest will be used.

-

Can also be an image ID. If this is the case, the image is assumed to be available locally. The pull option is ignored for this case.

-
-

image_comparison

-

string

-

added in community.docker 3.0.0

-

Determines which image to use for idempotency checks that depend on image parameters.

-

The default, desired-image, will use the image that is provided to the module via the image parameter.

-

current-image will use the image that the container is currently using, if the container exists. It falls back to the image that is provided in case the container does not yet exist.

-

This affects the env, env_file, exposed_ports, labels, and volumes options.

-

Choices:

-
    -
  • "desired-image" ← (default)

  • -
  • "current-image"

  • -
-
-

image_label_mismatch

-

string

-

added in community.docker 2.6.0

-

How to handle labels inherited from the image that are not set explicitly.

-

When ignore, labels that are present in the image but not specified in labels will be ignored. This is useful to avoid having to specify the image labels in labels while keeping labels comparisons strict.

-

When fail, if there are labels present in the image which are not set from labels, the module will fail. This prevents introducing unexpected labels from the base image.

-

Warning: This option is ignored unless labels: strict or *: strict is specified in the comparisons option.

-

Choices:

-
    -
  • "ignore" ← (default)

  • -
  • "fail"

  • -
-
-

image_name_mismatch

-

string

-

added in community.docker 3.2.0

-

Determines what the module does if the image matches, but the image name in the container’s configuration does not match the image name provided to the module.

-

This is ignored if image: ignore is set in comparisons.

-

If set to recreate the container will be recreated.

-

If set to ignore the container will not be recreated because of this. It might still get recreated for other reasons. This has been the default behavior of the module for a long time, but might not be what users expect.

-

Choices:

-
    -
  • "recreate"

  • -
  • "ignore" ← (default)

  • -
-
-

init

-

boolean

-

Run an init inside the container that forwards signals and reaps processes.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

interactive

-

boolean

-

Keep stdin open after a container is launched, even if not attached.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

ipc_mode

-

string

-

Set the IPC mode for the container.

-

Can be one of container:<name|id> to reuse another container’s IPC namespace or host to use the host’s IPC namespace within the container.

-
-

keep_volumes

-

boolean

-

Retain anonymous volumes associated with a removed container.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

kernel_memory

-

string

-

Kernel memory limit in format <number>[<unit>]. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte). Minimum is 4M.

-

Omitting the unit defaults to bytes.

-
-

kill_signal

-

string

-

Override default signal used to kill a running container.

-
-

labels

-

dictionary

-

Dictionary of key value pairs.

-
- -

list / elements=string

-

List of name aliases for linked containers in the format container_name:alias.

-

Setting this will force container to be restarted.

-
-

log_driver

-

string

-

Specify the logging driver. Docker uses json-file by default.

-

See here for possible choices.

-
-
-

log_options

-

aliases: log_opt

-

dictionary

-

Dictionary of options specific to the chosen log_driver.

-

See https://docs.docker.com/engine/admin/logging/overview/ for details.

-

log_driver needs to be specified for log_options to take effect, even if using the default json-file driver.

-
-

mac_address

-

string

-

Container MAC address (for example, 92:d0:c6:0a:29:33).

-
-

memory

-

string

-

Memory limit in format <number>[<unit>]. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes.

-

If container_default_behavior is set to compatibility, this option has a default of "0".

-
-

memory_reservation

-

string

-

Memory soft limit in format <number>[<unit>]. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes.

-
-

memory_swap

-

string

-

Total memory limit (memory + swap) in format <number>[<unit>], or the special values unlimited or -1 for unlimited swap usage. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes.

-
-

memory_swappiness

-

integer

-

Tune a container’s memory swappiness behavior. Accepts an integer between 0 and 100.

-

If not set, the value will be remain the same if container exists and will be inherited from the host machine if it is (re-)created.

-
-

mounts

-

list / elements=dictionary

-

Specification for mounts to be added to the container. More powerful alternative to volumes.

-
-

consistency

-

string

-

The consistency requirement for the mount.

-

Choices:

-
    -
  • "cached"

  • -
  • "consistent"

  • -
  • "default"

  • -
  • "delegated"

  • -
-
-

labels

-

dictionary

-

User-defined name and labels for the volume. Only valid for the volume type.

-
-

no_copy

-

boolean

-

False if the volume should be populated with the data from the target. Only valid for the volume type.

-

The default value is false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

propagation

-

string

-

Propagation mode. Only valid for the bind type.

-

Choices:

-
    -
  • "private"

  • -
  • "rprivate"

  • -
  • "shared"

  • -
  • "rshared"

  • -
  • "slave"

  • -
  • "rslave"

  • -
-
-

read_only

-

boolean

-

Whether the mount should be read-only.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

source

-

string

-

Mount source.

-

For example, this can be a volume name or a host path.

-

If not supplied when type=volume an anonymous volume will be created.

-
-

target

-

string / required

-

Path inside the container.

-
-

tmpfs_mode

-

string

-

The permission mode for the tmpfs mount.

-
-

tmpfs_size

-

string

-

The size for the tmpfs mount in bytes in format <number>[<unit>].

-

Number is a positive integer. Unit can be one of B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes.

-
-

type

-

string

-

The mount type.

-

Note that npipe is only supported by Docker for Windows.

-

Choices:

-
    -
  • "bind"

  • -
  • "npipe"

  • -
  • "tmpfs"

  • -
  • "volume" ← (default)

  • -
-
-

volume_driver

-

string

-

Specify the volume driver. Only valid for the volume type.

-

See here for details.

-
-

volume_options

-

dictionary

-

Dictionary of options specific to the chosen volume_driver. See here for details.

-
-

name

-

string / required

-

Assign a name to a new container or match an existing container.

-

When identifying an existing container name may be a name or a long or short container ID.

-
-

network_mode

-

string

-

Connect the container to a network. Choices are bridge, host, none, container:<name|id>, <network_name> or default.

-

Since community.docker 2.0.0, if networks_cli_compatible is true and networks contains at least one network, the default value for network_mode is the name of the first network in the networks list. You can prevent this by explicitly specifying a value for network_mode, like the default value default which will be used by Docker if network_mode is not specified.

-
-

networks

-

list / elements=dictionary

-

List of networks the container belongs to.

-

For examples of the data structure and usage see EXAMPLES below.

-

To remove a container from one or more networks, use networks: strict in the comparisons option.

-

If networks_cli_compatible is set to false, this will not remove the default network if networks is specified. This is different from the behavior of docker run .... You need to explicitly use networks: strict in comparisons to enforce the removal of the default network (and all other networks not explicitly mentioned in networks) in that case.

-
-

aliases

-

list / elements=string

-

List of aliases for this container in this network. These names can be used in the network to reach this container.

-
-

ipv4_address

-

string

-

The container’s IPv4 address in this network.

-
-

ipv6_address

-

string

-

The container’s IPv6 address in this network.

-
- -

list / elements=string

-

A list of containers to link to.

-
-

name

-

string / required

-

The network’s name.

-
-

networks_cli_compatible

-

boolean

-

If networks_cli_compatible is set to true (default), this module will behave as docker run --network and will not add the default network if networks is specified. If networks is not specified, the default network will be attached.

-

When networks_cli_compatible is set to false and networks are provided to the module via the networks option, the module behaves differently than docker run --network: docker run --network other will create a container with network other attached, but the default network not attached. This module with networks: {name: other} will create a container with both default and other attached. If networks: strict or *: strict is set in comparisons, the default network will be removed afterwards.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

oom_killer

-

boolean

-

Whether or not to disable OOM Killer for the container.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

oom_score_adj

-

integer

-

An integer value containing the score given to the container in order to tune OOM killer preferences.

-
-

output_logs

-

boolean

-

If set to true, output of the container command will be printed.

-

Only effective when log_driver is set to json-file, journald, or local.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

paused

-

boolean

-

Use with the started state to pause running processes inside the container.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

pid_mode

-

string

-

Set the PID namespace mode for the container.

-
-

pids_limit

-

integer

-

Set PIDs limit for the container. It accepts an integer value.

-

Set -1 for unlimited PIDs.

-
-

platform

-

string

-

added in community.docker 3.0.0

-

Platform for the container in the format os[/arch[/variant]].

-

Please note that inspecting the container does not always return the exact platform string used to create the container. This can cause idempotency to break for this module. Use the comparisons option with platform: ignore to prevent accidental recreation of the container due to this.

-
-

privileged

-

boolean

-

Give extended privileges to the container.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

publish_all_ports

-

boolean

-

added in community.docker 1.8.0

-

Publish all ports to the host.

-

Any specified port bindings from published_ports will remain intact when true.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-
-

published_ports

-

aliases: ports

-

list / elements=string

-

List of ports to publish from the container to the host.

-

Use docker CLI syntax: 8000, 9000:8000, or 0.0.0.0:9000:8000, where 8000 is a container port, 9000 is a host port, and 0.0.0.0 is a host interface.

-

Port ranges can be used for source and destination ports. If two ranges with different lengths are specified, the shorter range will be used. Since community.general 0.2.0, if the source port range has length 1, the port will not be assigned to the first port of the destination range, but to a free port in that range. This is the same behavior as for docker command line utility.

-

Bind addresses must be either IPv4 or IPv6 addresses. Hostnames are not allowed. This is different from the docker command line utility. Use the dig lookup to resolve hostnames.

-

If networks parameter is provided, will inspect each network to see if there exists a bridge network with optional parameter com.docker.network.bridge.host_binding_ipv4. If such a network is found, then published ports where no host IP address is specified will be bound to the host IP pointed to by com.docker.network.bridge.host_binding_ipv4. Note that the first bridge network with a com.docker.network.bridge.host_binding_ipv4 value encountered in the list of networks is the one that will be used.

-

The value all was allowed in earlier versions of this module. Support for it was removed in community.docker 3.0.0. Use the publish_all_ports option instead.

-
-

pull

-

boolean

-

If true, always pull the latest version of an image. Otherwise, will only pull an image when missing.

-

Note: images are only pulled when specified by name. If the image is specified as a image ID (hash), it cannot be pulled.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

purge_networks

-

boolean

-

Remove the container from ALL networks not included in networks parameter.

-

Any default networks such as bridge, if not found in networks, will be removed as well.

-

This option is deprecated since community.docker 3.2.0 and will be removed in community.docker 4.0.0. Use networks: strict in comparisons instead of purge_networks=true and make sure that networks is specified. If you want to remove all networks, specify networks: [].

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

read_only

-

boolean

-

Mount the container’s root file system as read-only.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

recreate

-

boolean

-

Use with present and started states to force the re-creation of an existing container.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

removal_wait_timeout

-

float

-

When removing an existing container, the docker daemon API call exists after the container is scheduled for removal. Removal usually is very fast, but it can happen that during high I/O load, removal can take longer. By default, the module will wait until the container has been removed before trying to (re-)create it, however long this takes.

-

By setting this option, the module will wait at most this many seconds for the container to be removed. If the container is still in the removal phase after this many seconds, the module will fail.

-
-

restart

-

boolean

-

Use with started state to force a matching container to be stopped and restarted.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

restart_policy

-

string

-

Container restart policy.

-

Place quotes around no option.

-

Choices:

-
    -
  • "no"

  • -
  • "on-failure"

  • -
  • "always"

  • -
  • "unless-stopped"

  • -
-
-

restart_retries

-

integer

-

Use with restart policy to control maximum number of restart attempts.

-
-

runtime

-

string

-

Runtime to use for the container.

-
-

security_opts

-

list / elements=string

-

List of security options in the form of "label:user:User".

-
-

shm_size

-

string

-

Size of /dev/shm in format <number>[<unit>]. Number is positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Omitting the unit defaults to bytes. If you omit the size entirely, Docker daemon uses 64M.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

absent - A container matching the specified name will be stopped and removed. Use force_kill to kill the container rather than stopping it. Use keep_volumes to retain anonymous volumes associated with the removed container.

-

present - Asserts the existence of a container matching the name and any provided configuration parameters. If no container matches the name, a container will be created. If a container matches the name but the provided configuration does not match, the container will be updated, if it can be. If it cannot be updated, it will be removed and re-created with the requested config.

-

started - Asserts that the container is first present, and then if the container is not running moves it to a running state. Use restart to force a matching container to be stopped and restarted.

-

stopped - Asserts that the container is first present, and then if the container is running moves it to a stopped state.

-

To control what will be taken into account when comparing configuration, see the comparisons option. To avoid that the image version will be taken into account, you can also use the image: ignore in the comparisons option.

-

Use the recreate option to always force re-creation of a matching container, even if it is running.

-

If the container should be killed instead of stopped in case it needs to be stopped for recreation, or because state is stopped, please use the force_kill option. Use keep_volumes to retain anonymous volumes associated with a removed container.

-

Use keep_volumes to retain anonymous volumes associated with a removed container.

-

Choices:

-
    -
  • "absent"

  • -
  • "present"

  • -
  • "stopped"

  • -
  • "started" ← (default)

  • -
-
-

stop_signal

-

string

-

Override default signal used to stop the container.

-
-

stop_timeout

-

integer

-

Number of seconds to wait for the container to stop before sending SIGKILL. When the container is created by this module, its StopTimeout configuration will be set to this value.

-

When the container is stopped, will be used as a timeout for stopping the container. In case the container has a custom StopTimeout configuration, the behavior depends on the version of the docker daemon. New versions of the docker daemon will always use the container’s configured StopTimeout value if it has been configured.

-
-

storage_opts

-

dictionary

-

added in community.docker 1.3.0

-

Storage driver options for this container as a key-value mapping.

-
-

sysctls

-

dictionary

-

Dictionary of key,value pairs.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

tmpfs

-

list / elements=string

-

Mount a tmpfs directory.

-
-

tty

-

boolean

-

Allocate a pseudo-TTY.

-

If container_default_behavior is set to compatibility, this option has a default of false.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

ulimits

-

list / elements=string

-

List of ulimit options. A ulimit is specified as nofile:262144:262144.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

user

-

string

-

Sets the username or UID used and optionally the groupname or GID for the specified command.

-

Can be of the forms user, user:group, uid, uid:gid, user:gid or uid:group.

-
-

userns_mode

-

string

-

Set the user namespace mode for the container. Currently, the only valid value are host and the empty string.

-
-

uts

-

string

-

Set the UTS namespace mode for the container.

-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

volume_driver

-

string

-

The container volume driver.

-
-

volumes

-

list / elements=string

-

List of volumes to mount within the container.

-

Use docker CLI-style syntax: /host:/container[:mode]

-

Mount modes can be a comma-separated list of various modes such as ro, rw, consistent, delegated, cached, rprivate, private, rshared, shared, rslave, slave, and nocopy. Note that the docker daemon might not support all modes and combinations of such modes.

-

SELinux hosts can additionally use z or Z to use a shared or private label for the volume.

-

Note that Ansible 2.7 and earlier only supported one mode, which had to be one of ro, rw, z, and Z.

-
-

volumes_from

-

list / elements=string

-

List of container names or IDs to get volumes from.

-
-

working_dir

-

string

-

Path to the working directory.

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: partial

-

When trying to pull an image, the module assumes this is always changed in check mode.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • For most config changes, the container needs to be recreated. This means that the existing container has to be destroyed and a new one created. This can cause unexpected data loss and downtime. You can use the comparisons option to prevent this.

  • -
  • If the module needs to recreate the container, it will only use the options provided to the module to create the new container (except image). Therefore, always specify all options relevant to the container.

  • -
  • When restart is set to true, the module will only restart the container if no config changes are detected.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Create a data container
-  community.docker.docker_container:
-    name: mydata
-    image: busybox
-    volumes:
-      - /data
-
-- name: Re-create a redis container
-  community.docker.docker_container:
-    name: myredis
-    image: redis
-    command: redis-server --appendonly yes
-    state: present
-    recreate: true
-    exposed_ports:
-      - 6379
-    volumes_from:
-      - mydata
-
-- name: Restart a container
-  community.docker.docker_container:
-    name: myapplication
-    image: someuser/appimage
-    state: started
-    restart: true
-    links:
-     - "myredis:aliasedredis"
-    devices:
-     - "/dev/sda:/dev/xvda:rwm"
-    ports:
-     # Publish container port 9000 as host port 8080
-     - "8080:9000"
-     # Publish container UDP port 9001 as host port 8081 on interface 127.0.0.1
-     - "127.0.0.1:8081:9001/udp"
-     # Publish container port 9002 as a random host port
-     - "9002"
-     # Publish container port 9003 as a free host port in range 8000-8100
-     # (the host port will be selected by the Docker daemon)
-     - "8000-8100:9003"
-     # Publish container ports 9010-9020 to host ports 7000-7010
-     - "7000-7010:9010-9020"
-    env:
-        SECRET_KEY: "ssssh"
-        # Values which might be parsed as numbers, booleans or other types by the YAML parser need to be quoted
-        BOOLEAN_KEY: "yes"
-
-- name: Container present
-  community.docker.docker_container:
-    name: mycontainer
-    state: present
-    image: ubuntu:14.04
-    command: sleep infinity
-
-- name: Stop a container
-  community.docker.docker_container:
-    name: mycontainer
-    state: stopped
-
-- name: Start 4 load-balanced containers
-  community.docker.docker_container:
-    name: "container{{ item }}"
-    recreate: true
-    image: someuser/anotherappimage
-    command: sleep 1d
-  with_sequence: count=4
-
-- name: Remove container
-  community.docker.docker_container:
-    name: ohno
-    state: absent
-
-- name: Syslogging output
-  community.docker.docker_container:
-    name: myservice
-    image: busybox
-    log_driver: syslog
-    log_options:
-      syslog-address: tcp://my-syslog-server:514
-      syslog-facility: daemon
-      # NOTE: in Docker 1.13+ the "syslog-tag" option was renamed to "tag" for
-      # older docker installs, use "syslog-tag" instead
-      tag: myservice
-
-- name: Create db container and connect to network
-  community.docker.docker_container:
-    name: db_test
-    image: "postgres:latest"
-    networks:
-      - name: "{{ docker_network_name }}"
-
-- name: Start container, connect to network and link
-  community.docker.docker_container:
-    name: sleeper
-    image: ubuntu:14.04
-    networks:
-      - name: TestingNet
-        ipv4_address: "172.16.1.100"
-        aliases:
-          - sleepyzz
-        links:
-          - db_test:db
-      - name: TestingNet2
-
-- name: Start a container with a command
-  community.docker.docker_container:
-    name: sleepy
-    image: ubuntu:14.04
-    command: ["sleep", "infinity"]
-
-- name: Add container to networks
-  community.docker.docker_container:
-    name: sleepy
-    networks:
-      - name: TestingNet
-        ipv4_address: 172.16.1.18
-        links:
-          - sleeper
-      - name: TestingNet2
-        ipv4_address: 172.16.10.20
-
-- name: Update network with aliases
-  community.docker.docker_container:
-    name: sleepy
-    networks:
-      - name: TestingNet
-        aliases:
-          - sleepyz
-          - zzzz
-
-- name: Remove container from one network
-  community.docker.docker_container:
-    name: sleepy
-    networks:
-      - name: TestingNet2
-    comparisons:
-      networks: strict
-
-- name: Remove container from all networks
-  community.docker.docker_container:
-    name: sleepy
-    comparisons:
-      networks: strict
-
-- name: Start a container and use an env file
-  community.docker.docker_container:
-    name: agent
-    image: jenkinsci/ssh-slave
-    env_file: /var/tmp/jenkins/agent.env
-
-- name: Create a container with limited capabilities
-  community.docker.docker_container:
-    name: sleepy
-    image: ubuntu:16.04
-    command: sleep infinity
-    capabilities:
-      - sys_time
-    cap_drop:
-      - all
-
-- name: Finer container restart/update control
-  community.docker.docker_container:
-    name: test
-    image: ubuntu:18.04
-    env:
-      arg1: "true"
-      arg2: "whatever"
-    volumes:
-      - /tmp:/tmp
-    comparisons:
-      image: ignore   # do not restart containers with older versions of the image
-      env: strict   # we want precisely this environment
-      volumes: allow_more_present   # if there are more volumes, that's ok, as long as `/tmp:/tmp` is there
-
-- name: Finer container restart/update control II
-  community.docker.docker_container:
-    name: test
-    image: ubuntu:18.04
-    env:
-      arg1: "true"
-      arg2: "whatever"
-    comparisons:
-      '*': ignore  # by default, ignore *all* options (including image)
-      env: strict   # except for environment variables; there, we want to be strict
-
-- name: Start container with healthstatus
-  community.docker.docker_container:
-    name: nginx-proxy
-    image: nginx:1.13
-    state: started
-    healthcheck:
-      # Check if nginx server is healthy by curl'ing the server.
-      # If this fails or timeouts, the healthcheck fails.
-      test: ["CMD", "curl", "--fail", "http://nginx.host.com"]
-      interval: 1m30s
-      timeout: 10s
-      retries: 3
-      start_period: 30s
-
-- name: Remove healthcheck from container
-  community.docker.docker_container:
-    name: nginx-proxy
-    image: nginx:1.13
-    state: started
-    healthcheck:
-      # The "NONE" check needs to be specified
-      test: ["NONE"]
-
-- name: Start container with block device read limit
-  community.docker.docker_container:
-    name: test
-    image: ubuntu:18.04
-    state: started
-    device_read_bps:
-      # Limit read rate for /dev/sda to 20 mebibytes per second
-      - path: /dev/sda
-        rate: 20M
-    device_read_iops:
-      # Limit read rate for /dev/sdb to 300 IO per second
-      - path: /dev/sdb
-        rate: 300
-
-- name: Start container with GPUs
-  community.docker.docker_container:
-    name: test
-    image: ubuntu:18.04
-    state: started
-    device_requests:
-      - # Add some specific devices to this container
-        device_ids:
-          - '0'
-          - 'GPU-3a23c669-1f69-c64e-cf85-44e9b07e7a2a'
-      - # Add nVidia GPUs to this container
-        driver: nvidia
-        count: -1  # this means we want all
-        capabilities:
-          # We have one OR condition: 'gpu' AND 'utility'
-          - - gpu
-            - utility
-          # See https://github.com/NVIDIA/nvidia-container-runtime#supported-driver-capabilities
-          # for a list of capabilities supported by the nvidia driver
-
-- name: Start container with storage options
-  community.docker.docker_container:
-    name: test
-    image: ubuntu:18.04
-    state: started
-    storage_opts:
-      # Limit root filesystem to 12 MB - note that this requires special storage backends
-      # (https://fabianlee.org/2020/01/15/docker-use-overlay2-with-an-xfs-backing-filesystem-to-limit-rootfs-size/)
-      size: 12m
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

container

-

dictionary

-

Facts representing the current state of the container. Matches the docker inspection output.

-

Empty if state is absent.

-

If detach=false, will include Output attribute containing any output from container run.

-

Returned: success; or when state=started and detach=false, and when waiting for the container result did not fail

-

Sample: "{ \"AppArmorProfile\": \"\", \"Args\": [], \"Config\": { \"AttachStderr\": false, \"AttachStdin\": false, \"AttachStdout\": false, \"Cmd\": [ \"/usr/bin/supervisord\" ], \"Domainname\": \"\", \"Entrypoint\": null, \"Env\": [ \"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\" ], \"ExposedPorts\": { \"443/tcp\": {}, \"80/tcp\": {} }, \"Hostname\": \"8e47bf643eb9\", \"Image\": \"lnmp_nginx:v1\", \"Labels\": {}, \"OnBuild\": null, \"OpenStdin\": false, \"StdinOnce\": false, \"Tty\": false, \"User\": \"\", \"Volumes\": { \"/tmp/lnmp/nginx-sites/logs/\": {} }, ... }"

-
-

status

-

integer

-

In case a container is started without detaching, this contains the exit code of the process in the container.

-

Before community.docker 1.1.0, this was only returned when non-zero.

-

Returned: when state=started and detach=false, and when waiting for the container result did not fail

-

Sample: 0

-
-
-

Authors

-
    -
  • Cove Schneider (@cove)

  • -
  • Joshua Conner (@joshuaconner)

  • -
  • Pavel Antonov (@softzilla)

  • -
  • Thomas Steinbach (@ThomasSteinbach)

  • -
  • Philippe Jandot (@zfil)

  • -
  • Daan Oosterveld (@dusdanig)

  • -
  • Chris Houseknecht (@chouseknecht)

  • -
  • Kassian Sun (@kassiansun)

  • -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_containers_inventory.html b/pr/573/docker_containers_inventory.html deleted file mode 100644 index cd6b7324..00000000 --- a/pr/573/docker_containers_inventory.html +++ /dev/null @@ -1,676 +0,0 @@ - - - - - - - community.docker.docker_containers inventory – Ansible dynamic inventory plugin for Docker containers — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_containers inventory – Ansible dynamic inventory plugin for Docker containers

-
-

Note

-

This inventory plugin is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this inventory plugin, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_containers.

-
-

New in community.docker 1.1.0

- -
-

Synopsis

-
    -
  • Reads inventories from the Docker API.

  • -
  • Uses a YAML configuration file that ends with docker.[yml|yaml].

  • -
-
-
-

Requirements

-

The below requirements are needed on the local controller node that executes this inventory.

-
    -
  • requests

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-

add_legacy_groups

-

boolean

-

Add the same groups as the docker inventory script does. These are the following:

-

<container id>: contains the container of this ID.

-

<container name>: contains the container that has this name.

-

<container short id>: contains the containers that have this short ID (first 13 letters of ID).

-

image_<image name>: contains the containers that have the image <image name>.

-

stack_<stack name>: contains the containers that belong to the stack <stack name>.

-

service_<service name>: contains the containers that belong to the service <service name>

-

<docker_host>: contains the containers which belong to the Docker daemon docker_host. Useful if you run this plugin against multiple Docker daemons.

-

running: contains all containers that are running.

-

stopped: contains all containers that are not running.

-

If this is not set to true, you should use keyed groups to add the containers to groups. See the examples for how to do that.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

compose

-

dictionary

-

Create vars from jinja2 expressions.

-

Default: {}

-
-

configure_docker_daemon

-

boolean

-

added in community.docker 1.8.0

-

Whether to pass all Docker daemon configuration from the inventory plugin to the connection plugin.

-

Only used when connection_type=docker-api.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

connection_type

-

string

-

Which connection type to use the containers.

-

One way to connect to containers is to use SSH (ssh). For this, the options default_ip and private_ssh_port are used. This requires that a SSH daemon is running inside the containers.

-

Alternatively, docker-cli selects the docker connection plugin, and docker-api (default) selects the docker_api connection plugin.

-

When docker-api is used, all Docker daemon configuration values are passed from the inventory plugin to the connection plugin. This can be controlled with configure_docker_daemon.

-

Choices:

-
    -
  • "ssh"

  • -
  • "docker-cli"

  • -
  • "docker-api" ← (default)

  • -
-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

default_ip

-

string

-

The IP address to assign to ansible_host when the container’s SSH port is mapped to interface ‘0.0.0.0’.

-

Only used if connection_type is ssh.

-

Default: "127.0.0.1"

-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

groups

-

dictionary

-

Add hosts to group based on Jinja2 conditionals.

-

Default: {}

-
-

keyed_groups

-

list / elements=dictionary

-

Add hosts to group based on the values of a variable.

-

Default: []

-
-

default_value

-

string

-

added in ansible-core 2.12

-

The default value when the host variable’s value is an empty string.

-

This option is mutually exclusive with trailing_separator.

-
-

key

-

string

-

The key from input dictionary used to generate groups

-
-

parent_group

-

string

-

parent group for keyed group

-
-

prefix

-

string

-

A keyed group name will start with this prefix

-

Default: ""

-
-

separator

-

string

-

separator used to build the keyed group name

-

Default: "_"

-
-

trailing_separator

-

boolean

-

added in ansible-core 2.12

-

Set this option to False to omit the separator after the host variable when the value is an empty string.

-

This option is mutually exclusive with default_value.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

leading_separator

-

boolean

-

added in ansible-core 2.11

-

Use in conjunction with keyed_groups.

-

By default, a keyed group that does not have a prefix or a separator provided will have a name that starts with an underscore.

-

This is because the default prefix is “” and the default separator is “_”.

-

Set this option to False to omit the leading underscore (or other separator) if no prefix is given.

-

If the group name is derived from a mapping the separator is still used to concatenate the items.

-

To not use a separator in the group name at all, set the separator for the keyed group to an empty string instead.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

plugin

-

string / required

-

The name of this plugin, it should always be set to community.docker.docker_containers for this plugin to recognize it as it’s own.

-

Choices:

-
    -
  • "community.docker.docker_containers"

  • -
-
-

private_ssh_port

-

integer

-

The port containers use for SSH.

-

Only used if connection_type is ssh.

-

Default: 22

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

strict

-

boolean

-

If yes make invalid entries a fatal error, otherwise skip and continue.

-

Since it is possible to use facts in the expressions they might not always be available and we ignore those errors by default.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_extra_vars

-

boolean

-

added in ansible-core 2.11

-

Merge extra vars into the available variables for composition (highest precedence).

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-

Configuration:

- -
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

verbose_output

-

boolean

-

Toggle to (not) include all available inspection metadata.

-

Note that all top-level keys will be transformed to the format docker_xxx. For example, HostConfig is converted to docker_hostconfig.

-

If this is false, these values can only be used during constructed, groups, and keyed_groups.

-

The docker inventory script always added these variables, so for compatibility set this to true.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
# Minimal example using local Docker daemon
-plugin: community.docker.docker_containers
-docker_host: unix://var/run/docker.sock
-
-# Minimal example using remote Docker daemon
-plugin: community.docker.docker_containers
-docker_host: tcp://my-docker-host:2375
-
-# Example using remote Docker daemon with unverified TLS
-plugin: community.docker.docker_containers
-docker_host: tcp://my-docker-host:2376
-tls: true
-
-# Example using remote Docker daemon with verified TLS and client certificate verification
-plugin: community.docker.docker_containers
-docker_host: tcp://my-docker-host:2376
-validate_certs: true
-ca_cert: /somewhere/ca.pem
-client_key: /somewhere/key.pem
-client_cert: /somewhere/cert.pem
-
-# Example using constructed features to create groups
-plugin: community.docker.docker_containers
-docker_host: tcp://my-docker-host:2375
-strict: false
-keyed_groups:
-  # Add containers with primary network foo to a network_foo group
-  - prefix: network
-    key: 'docker_hostconfig.NetworkMode'
-  # Add Linux hosts to an os_linux group
-  - prefix: os
-    key: docker_platform
-
-# Example using SSH connection with an explicit fallback for when port 22 has not been
-# exported: use container name as ansible_ssh_host and 22 as ansible_ssh_port
-plugin: community.docker.docker_containers
-connection_type: ssh
-compose:
-  ansible_ssh_host: ansible_ssh_host | default(docker_name[1:], true)
-  ansible_ssh_port: ansible_ssh_port | default(22, true)
-
-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
-

Hint

-

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.

-
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_host_info_module.html b/pr/573/docker_host_info_module.html deleted file mode 100644 index cff943cd..00000000 --- a/pr/573/docker_host_info_module.html +++ /dev/null @@ -1,684 +0,0 @@ - - - - - - - community.docker.docker_host_info module – Retrieves facts about docker host and lists of objects of the services. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_host_info module – Retrieves facts about docker host and lists of objects of the services.

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_host_info.

-
- -
-

Synopsis

-
    -
  • Retrieves facts about a docker host.

  • -
  • Essentially returns the output of docker system info.

  • -
  • The module also allows to list object names for containers, images, networks and volumes. It also allows to query information on disk usage.

  • -
  • The output differs depending on API version of the docker daemon.

  • -
  • If the docker daemon cannot be contacted or does not meet the API version requirements, the module will fail.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

containers

-

boolean

-

Whether to list containers.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

containers_all

-

boolean

-

added in community.docker 3.4.0

-

By default, only running containers are returned.

-

This corresponds to the --all option to docker container list.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

containers_filters

-

dictionary

-

A dictionary of filter values used for selecting containers to list.

-

For example, until: 24h.

-

label is a special case of filter which can be a string <key> matching when a label is present, a string <key>=<value> matching when a label has a particular value, or a list of strings <key>/<key>=<value.

-

See the docker documentation for more information on possible filters.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

disk_usage

-

boolean

-

Summary information on used disk space by all Docker layers.

-

The output is a sum of images, volumes, containers and build cache.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

images

-

boolean

-

Whether to list images.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

images_filters

-

dictionary

-

A dictionary of filter values used for selecting images to list.

-

For example, dangling: true.

-

label is a special case of filter which can be a string <key> matching when a label is present, a string <key>=<value> matching when a label has a particular value, or a list of strings <key>/<key>=<value.

-

See the docker documentation for more information on possible filters.

-
-

networks

-

boolean

-

Whether to list networks.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

networks_filters

-

dictionary

-

A dictionary of filter values used for selecting networks to list.

-

label is a special case of filter which can be a string <key> matching when a label is present, a string <key>=<value> matching when a label has a particular value, or a list of strings <key>/<key>=<value.

-

See the docker documentation for more information on possible filters.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

verbose_output

-

boolean

-

When set to true and networks, volumes, images, containers or disk_usage is set to true then output will contain verbose information about objects matching the full output of API method. For details see the documentation of your version of Docker API at https://docs.docker.com/engine/api/.

-

The verbose output in this module contains only subset of information returned by _info module for each type of the objects.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

volumes

-

boolean

-

Whether to list volumes.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

volumes_filters

-

dictionary

-

A dictionary of filter values used for selecting volumes to list.

-

label is a special case of filter which can be a string <key> matching when a label is present, a string <key>=<value> matching when a label has a particular value, or a list of strings <key>/<key>=<value.

-

See the docker documentation for more information on possible filters.

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Get info on docker host
-  community.docker.docker_host_info:
-  register: result
-
-- name: Get info on docker host and list images
-  community.docker.docker_host_info:
-    images: true
-  register: result
-
-- name: Get info on docker host and list images matching the filter
-  community.docker.docker_host_info:
-    images: true
-    images_filters:
-      label: "mylabel"
-  register: result
-
-- name: Get info on docker host and verbose list images
-  community.docker.docker_host_info:
-    images: true
-    verbose_output: true
-  register: result
-
-- name: Get info on docker host and used disk space
-  community.docker.docker_host_info:
-    disk_usage: true
-  register: result
-
-- name: Get info on docker host and list containers matching the filter
-  community.docker.docker_host_info:
-    containers: true
-    containers_filters:
-      label:
-        - key1=value1
-        - key2=value2
-  register: result
-
-- ansible.builtin.debug:
-    var: result.host_info
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Key

Description

-

can_talk_to_docker

-

boolean

-

Will be true if the module can talk to the docker daemon.

-

Returned: both on success and on error

-
-

containers

-

list / elements=dictionary

-

List of dict objects containing the basic information about each container. Keys matches the docker container ls output unless verbose_output=true. See description for verbose_output.

-

Returned: When containers is true

-
-

disk_usage

-

dictionary

-

Information on summary disk usage by images, containers and volumes on docker host unless verbose_output=true. See description for verbose_output.

-

Returned: When disk_usage is true

-
-

host_info

-

dictionary

-

Facts representing the basic state of the docker host. Matches the docker system info output.

-

Returned: always

-
-

images

-

list / elements=dictionary

-

List of dict objects containing the basic information about each image. Keys matches the docker image ls output unless verbose_output=true. See description for verbose_output.

-

Returned: When images is true

-
-

networks

-

list / elements=dictionary

-

List of dict objects containing the basic information about each network. Keys matches the docker network ls output unless verbose_output=true. See description for verbose_output.

-

Returned: When networks is true

-
-

volumes

-

list / elements=dictionary

-

List of dict objects containing the basic information about each volume. Keys matches the docker volume ls output unless verbose_output=true. See description for verbose_output.

-

Returned: When volumes is true

-
-
-

Authors

-
    -
  • Piotr Wojciechowski (@WojciechowskiPiotr)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_image_info_module.html b/pr/573/docker_image_info_module.html deleted file mode 100644 index 30558709..00000000 --- a/pr/573/docker_image_info_module.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - - - community.docker.docker_image_info module – Inspect docker images — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_image_info module – Inspect docker images

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_image_info.

-
- -
-

Synopsis

-
    -
  • Provide one or more image names, and the module will inspect each, returning an array of inspection results.

  • -
  • If an image does not exist locally, it will not appear in the results. If you want to check whether an image exists locally, you can call the module with the image name, then check whether the result list is empty (image does not exist) or has one element (the image exists locally).

  • -
  • The module will not attempt to pull images from registries. Use community.docker.docker_image with source set to pull to ensure an image is pulled.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

name

-

list / elements=string

-

An image name or a list of image names. Name format will be name[:tag] or repository/name[:tag], where tag is optional. If a tag is not provided, latest will be used. Instead of image names, also image IDs can be used.

-

If no name is provided, a list of all images will be returned.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • This module was called docker_image_facts before Ansible 2.8. The usage did not change.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Inspect a single image
-  community.docker.docker_image_info:
-    name: pacur/centos-7
-
-- name: Inspect multiple images
-  community.docker.docker_image_info:
-    name:
-      - pacur/centos-7
-      - sinatra
-  register: result
-
-- name: Make sure that both images pacur/centos-7 and sinatra exist locally
-  ansible.builtin.assert:
-    that:
-      - result.images | length == 2
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

images

-

list / elements=dictionary

-

Inspection results for the selected images.

-

The list only contains inspection results of images existing locally.

-

Returned: always

-

Sample: [{"Architecture": "amd64", "Author": "", "Comment": "", "Config": {"AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": ["/etc/docker/registry/config.yml"], "Domainname": "", "Entrypoint": ["/bin/registry"], "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "ExposedPorts": {"5000/tcp": {}}, "Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799", "Labels": {}, "OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}}, "WorkingDir": ""}, "Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610", "ContainerConfig": {"AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": ["/bin/sh", "-c", "#(nop) CMD [\"/etc/docker/registry/config.yml\"]"], "Domainname": "", "Entrypoint": ["/bin/registry"], "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "ExposedPorts": {"5000/tcp": {}}, "Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799", "Labels": {}, "OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}}, "WorkingDir": ""}, "Created": "2016-03-08T21:08:15.399680378Z", "DockerVersion": "1.9.1", "GraphDriver": {"Data": null, "Name": "aufs"}, "Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08", "Name": "registry:2", "Os": "linux", "Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805", "RepoDigests": [], "RepoTags": ["registry:2"], "Size": 0, "VirtualSize": 165808884}]

-
-
-

Authors

-
    -
  • Chris Houseknecht (@chouseknecht)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_image_load_module.html b/pr/573/docker_image_load_module.html deleted file mode 100644 index 107b7542..00000000 --- a/pr/573/docker_image_load_module.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - community.docker.docker_image_load module – Load docker image(s) from archives — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_image_load module – Load docker image(s) from archives

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_image_load.

-
-

New in community.docker 1.3.0

- -
-

Synopsis

-
    -
  • Load one or multiple Docker images from a .tar archive, and return information on the loaded image(s).

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

path

-

path / required

-

The path to the .tar archive to load Docker image(s) from.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: none

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Does not support check_mode.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Load all image(s) from the given tar file
-  community.docker.docker_image_load:
-    path: /path/to/images.tar
-  register: result
-
-- name: Print the loaded image names
-  ansible.builtin.debug:
-    msg: "Loaded the following images: {{ result.image_names | join(', ') }}"
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

image_names

-

list / elements=string

-

List of image names and IDs loaded from the archive.

-

Returned: success

-

Sample: ["hello-world:latest", "sha256:e004c2cc521c95383aebb1fb5893719aa7a8eae2e7a71f316a4410784edb00a9"]

-
-

images

-

list / elements=dictionary

-

Image inspection results for the loaded images.

-

Returned: success

-

Sample: []

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_image_module.html b/pr/573/docker_image_module.html deleted file mode 100644 index 3227662b..00000000 --- a/pr/573/docker_image_module.html +++ /dev/null @@ -1,859 +0,0 @@ - - - - - - - community.docker.docker_image module – Manage docker images — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_image module – Manage docker images

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_image.

-
- -
-

Synopsis

-
    -
  • Build, load or pull an image, making the image available for creating containers. Also supports tagging an image, pushing an image, and archiving an image to a .tar file.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

archive_path

-

path

-

Use with state present to archive an image to a .tar file.

-
-

build

-

dictionary

-

Specifies options used for building images.

-
-

args

-

dictionary

-

Provide a dictionary of key:value build arguments that map to Dockerfile ARG directive.

-

Docker expects the value to be a string. For convenience any non-string values will be converted to strings.

-
-

cache_from

-

list / elements=string

-

List of image names to consider as cache source.

-
-

container_limits

-

dictionary

-

A dictionary of limits applied to each container created by the build process.

-
-

cpusetcpus

-

string

-

CPUs in which to allow execution.

-

For example, 0-3 or 0,1.

-
-

cpushares

-

integer

-

CPU shares (relative weight).

-
-

memory

-

integer

-

Set memory limit for build.

-
-

memswap

-

integer

-

Total memory (memory + swap).

-

Use -1 to disable swap.

-
-

dockerfile

-

string

-

Use with state present and source build to provide an alternate name for the Dockerfile to use when building an image.

-

This can also include a relative path (relative to path).

-
-

etc_hosts

-

dictionary

-

Extra hosts to add to /etc/hosts in building containers, as a mapping of hostname to IP address.

-
-

http_timeout

-

integer

-

Timeout for HTTP requests during the image build operation. Provide a positive integer value for the number of seconds.

-
-

network

-

string

-

The network to use for RUN build instructions.

-
-

nocache

-

boolean

-

Do not use cache when building an image.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

path

-

path / required

-

Use with state ‘present’ to build an image. Will be the path to a directory containing the context and Dockerfile for building an image.

-
-

platform

-

string

-

added in community.docker 1.1.0

-

Platform in the format os[/arch[/variant]].

-
-

pull

-

boolean

-

When building an image downloads any updates to the FROM image in Dockerfile.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

rm

-

boolean

-

Remove intermediate containers after build.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

target

-

string

-

When building an image specifies an intermediate build stage by name as a final stage for the resulting image.

-
-

use_config_proxy

-

boolean

-

If set to true and a proxy configuration is specified in the docker client configuration (by default $HOME/.docker/config.json), the corresponding environment variables will be set in the container being built.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

force_absent

-

boolean

-

Use with state absent to un-tag and remove all images matching the specified name.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

force_source

-

boolean

-

Use with state present to build, load or pull an image (depending on the value of the source option) when the image already exists.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

force_tag

-

boolean

-

Use with state present to force tagging an image.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

load_path

-

path

-

Use with state present to load an image from a .tar file.

-

Set source to load if you want to load the image.

-
-

name

-

string / required

-

Image name. Name format will be one of: name, repository/name, registry_server:port/name. When pushing or pulling an image the name can optionally include the tag by appending :tag_name.

-

Note that image IDs (hashes) are only supported for state=absent, for state=present with source=load, and for state=present with source=local.

-
-

pull

-

dictionary

-

added in community.docker 1.3.0

-

Specifies options used for pulling images.

-
-

platform

-

string

-

When pulling an image, ask for this specific platform.

-

Note that this value is not used to determine whether the image needs to be pulled. This might change in the future in a minor release, though.

-
-

push

-

boolean

-

Push the image to the registry. Specify the registry as part of the name or repository parameter.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

repository

-

string

-

Use with state present to tag the image.

-

Expects format repository:tag. If no tag is provided, will use the value of the tag parameter or latest.

-

If push=true, repository must either include a registry, or will be assumed to belong to the default registry (Docker Hub).

-
-

source

-

string

-

Determines where the module will try to retrieve the image from.

-

Use build to build the image from a Dockerfile. build.path must be specified when this value is used.

-

Use load to load the image from a .tar file. load_path must be specified when this value is used.

-

Use pull to pull the image from a registry.

-

Use local to make sure that the image is already available on the local docker daemon. This means that the module does not try to build, pull or load the image.

-

Choices:

-
    -
  • "build"

  • -
  • "load"

  • -
  • "pull"

  • -
  • "local"

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

Make assertions about the state of an image.

-

When absent an image will be removed. Use the force option to un-tag and remove all images matching the provided name.

-

When present check if an image exists using the provided name and tag. If the image is not found or the force option is used, the image will either be pulled, built or loaded, depending on the source option.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
-
-

tag

-

string

-

Used to select an image when pulling. Will be added to the image when pushing, tagging or building. Defaults to latest.

-

If name parameter format is name:tag, then tag value from name will take precedence.

-

Default: "latest"

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: partial

-

When trying to pull an image, the module assumes this is always changed in check mode.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Building images is done using Docker daemon’s API. It is not possible to use BuildKit / buildx this way.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Pull an image
-  community.docker.docker_image:
-    name: pacur/centos-7
-    source: pull
-    # Select platform for pulling. If not specified, will pull whatever docker prefers.
-    pull:
-      platform: amd64
-
-- name: Tag and push to docker hub
-  community.docker.docker_image:
-    name: pacur/centos-7:56
-    repository: dcoppenhagan/myimage:7.56
-    push: true
-    source: local
-
-- name: Tag and push to local registry
-  community.docker.docker_image:
-    # Image will be centos:7
-    name: centos
-    # Will be pushed to localhost:5000/centos:7
-    repository: localhost:5000/centos
-    tag: 7
-    push: true
-    source: local
-
-- name: Add tag latest to image
-  community.docker.docker_image:
-    name: myimage:7.1.2
-    repository: myimage:latest
-    # As 'latest' usually already is present, we need to enable overwriting of existing tags:
-    force_tag: true
-    source: local
-
-- name: Remove image
-  community.docker.docker_image:
-    state: absent
-    name: registry.ansible.com/chouseknecht/sinatra
-    tag: v1
-
-- name: Build an image and push it to a private repo
-  community.docker.docker_image:
-    build:
-      path: ./sinatra
-    name: registry.ansible.com/chouseknecht/sinatra
-    tag: v1
-    push: true
-    source: build
-
-- name: Archive image
-  community.docker.docker_image:
-    name: registry.ansible.com/chouseknecht/sinatra
-    tag: v1
-    archive_path: my_sinatra.tar
-    source: local
-
-- name: Load image from archive and push to a private registry
-  community.docker.docker_image:
-    name: localhost:5000/myimages/sinatra
-    tag: v1
-    push: true
-    load_path: my_sinatra.tar
-    source: load
-
-- name: Build image and with build args
-  community.docker.docker_image:
-    name: myimage
-    build:
-      path: /path/to/build/dir
-      args:
-        log_volume: /var/log/myapp
-        listen_port: 8080
-    source: build
-
-- name: Build image using cache source
-  community.docker.docker_image:
-    name: myimage:latest
-    build:
-      path: /path/to/build/dir
-      # Use as cache source for building myimage
-      cache_from:
-        - nginx:latest
-        - alpine:3.8
-    source: build
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

image

-

dictionary

-

Image inspection results for the affected image.

-

Returned: success

-

Sample: {}

-
-

stdout

-

string

-

added in community.docker 1.0.0

-

Docker build output when building an image.

-

Returned: success

-

Sample: ""

-
-
-

Authors

-
    -
  • Pavel Antonov (@softzilla)

  • -
  • Chris Houseknecht (@chouseknecht)

  • -
  • Sorin Sbarnea (@ssbarnea)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_login_module.html b/pr/573/docker_login_module.html deleted file mode 100644 index 84d8cc06..00000000 --- a/pr/573/docker_login_module.html +++ /dev/null @@ -1,557 +0,0 @@ - - - - - - - community.docker.docker_login module – Log into a Docker registry. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_login module – Log into a Docker registry.

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_login.

-
- -
-

Synopsis

-
    -
  • Provides functionality similar to the docker login command.

  • -
  • Authenticate with a docker registry and add the credentials to your local Docker config file respectively the credentials store associated to the registry. Adding the credentials to the config files resp. the credential store allows future connections to the registry using tools such as Ansible’s Docker modules, the Docker CLI and Docker SDK for Python without needing to provide credentials.

  • -
  • Running in check mode will perform the authentication without updating the config file.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-

config_path

-

aliases: dockercfg_path

-

path

-

Custom path to the Docker CLI configuration file.

-

Default: "~/.docker/config.json"

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

password

-

string

-

The plaintext password for the registry account.

-

Required when state is present.

-
-
-

reauthorize

-

aliases: reauth

-

boolean

-

Refresh existing authentication found in the configuration file.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

registry_url

-

aliases: registry, url

-

string

-

The registry URL.

-

Default: "https://index.docker.io/v1/"

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

This controls the current state of the user. present will login in a user, absent will log them out.

-

To logout you only need the registry server, which defaults to DockerHub.

-

Before 2.1 you could ONLY log in.

-

Docker does not support ‘logout’ with a custom config file.

-

Choices:

-
    -
  • "present" ← (default)

  • -
  • "absent"

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

username

-

string

-

The username for the registry account.

-

Required when state is present.

-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Log into DockerHub
-  community.docker.docker_login:
-    username: docker
-    password: rekcod
-
-- name: Log into private registry and force re-authorization
-  community.docker.docker_login:
-    registry_url: your.private.registry.io
-    username: yourself
-    password: secrets3
-    reauthorize: true
-
-- name: Log into DockerHub using a custom config file
-  community.docker.docker_login:
-    username: docker
-    password: rekcod
-    config_path: /tmp/.mydockercfg
-
-- name: Log out of DockerHub
-  community.docker.docker_login:
-    state: absent
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

login_results

-

dictionary

-

Results from the login.

-

Returned: when state=present

-

Sample: {"serveraddress": "localhost:5000", "username": "testuser"}

-
-
-

Authors

-
    -
  • Olaf Kilian (@olsaki)

  • -
  • Chris Houseknecht (@chouseknecht)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_machine_inventory.html b/pr/573/docker_machine_inventory.html deleted file mode 100644 index b89ac850..00000000 --- a/pr/573/docker_machine_inventory.html +++ /dev/null @@ -1,474 +0,0 @@ - - - - - - - community.docker.docker_machine inventory – Docker Machine inventory source — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_machine inventory – Docker Machine inventory source

-
-

Note

-

This inventory plugin is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this inventory plugin, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_machine.

-
- -
-

Synopsis

-
    -
  • Get inventory hosts from Docker Machine.

  • -
  • Uses a YAML configuration file that ends with docker_machine.(yml|yaml).

  • -
  • The plugin sets standard host variables ansible_host, ansible_port, ansible_user and ansible_ssh_private_key.

  • -
  • The plugin stores the Docker Machine ‘env’ output variables in dm_ prefixed host variables.

  • -
-
-
-

Requirements

-

The below requirements are needed on the local controller node that executes this inventory.

- -
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-

compose

-

dictionary

-

Create vars from jinja2 expressions.

-

Default: {}

-
-

daemon_env

-

string

-

Whether docker daemon connection environment variables should be fetched, and how to behave if they cannot be fetched.

-

With require and require-silently, fetch them and skip any host for which they cannot be fetched. A warning will be issued for any skipped host if the choice is require.

-

With optional and optional-silently, fetch them and not skip hosts for which they cannot be fetched. A warning will be issued for hosts where they cannot be fetched if the choice is optional.

-

With skip, do not attempt to fetch the docker daemon connection environment variables.

-

If fetched successfully, the variables will be prefixed with dm_ and stored as host variables.

-

Choices:

-
    -
  • "require" ← (default)

  • -
  • "require-silently"

  • -
  • "optional"

  • -
  • "optional-silently"

  • -
  • "skip"

  • -
-
-

groups

-

dictionary

-

Add hosts to group based on Jinja2 conditionals.

-

Default: {}

-
-

keyed_groups

-

list / elements=dictionary

-

Add hosts to group based on the values of a variable.

-

Default: []

-
-

default_value

-

string

-

added in ansible-core 2.12

-

The default value when the host variable’s value is an empty string.

-

This option is mutually exclusive with trailing_separator.

-
-

key

-

string

-

The key from input dictionary used to generate groups

-
-

parent_group

-

string

-

parent group for keyed group

-
-

prefix

-

string

-

A keyed group name will start with this prefix

-

Default: ""

-
-

separator

-

string

-

separator used to build the keyed group name

-

Default: "_"

-
-

trailing_separator

-

boolean

-

added in ansible-core 2.12

-

Set this option to False to omit the separator after the host variable when the value is an empty string.

-

This option is mutually exclusive with default_value.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

leading_separator

-

boolean

-

added in ansible-core 2.11

-

Use in conjunction with keyed_groups.

-

By default, a keyed group that does not have a prefix or a separator provided will have a name that starts with an underscore.

-

This is because the default prefix is “” and the default separator is “_”.

-

Set this option to False to omit the leading underscore (or other separator) if no prefix is given.

-

If the group name is derived from a mapping the separator is still used to concatenate the items.

-

To not use a separator in the group name at all, set the separator for the keyed group to an empty string instead.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

plugin

-

string / required

-

token that ensures this is a source file for the docker_machine plugin.

-

Choices:

-
    -
  • "docker_machine"

  • -
  • "community.docker.docker_machine"

  • -
-
-

running_required

-

boolean

-

When true, hosts which Docker Machine indicates are in a state other than running will be skipped.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

strict

-

boolean

-

If yes make invalid entries a fatal error, otherwise skip and continue.

-

Since it is possible to use facts in the expressions they might not always be available and we ignore those errors by default.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

use_extra_vars

-

boolean

-

added in ansible-core 2.11

-

Merge extra vars into the available variables for composition (highest precedence).

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-

Configuration:

- -
-

verbose_output

-

boolean

-

When true, include all available nodes metadata (for exmaple Image, Region, Size) as a JSON object named docker_machine_node_attributes.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-
-
-

Examples

-
# Minimal example
-plugin: community.docker.docker_machine
-
-# Example using constructed features to create a group per Docker Machine driver
-# (https://docs.docker.com/machine/drivers/), for example:
-#   $ docker-machine create --driver digitalocean ... mymachine
-#   $ ansible-inventory -i ./path/to/docker-machine.yml --host=mymachine
-#   {
-#     ...
-#     "digitalocean": {
-#       "hosts": [
-#           "mymachine"
-#       ]
-#     ...
-#   }
-strict: false
-keyed_groups:
-  - separator: ''
-    key: docker_machine_node_attributes.DriverName
-
-# Example grouping hosts by Digital Machine tag
-strict: false
-keyed_groups:
-  - prefix: tag
-    key: 'dm_tags'
-
-# Example using compose to override the default SSH behaviour of asking the user to accept the remote host key
-compose:
-  ansible_ssh_common_args: '"-o StrictHostKeyChecking=accept-new"'
-
-
-
-

Authors

-
    -
  • Ximon Eighteen (@ximon18)

  • -
-
-

Hint

-

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.

-
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_network_info_module.html b/pr/573/docker_network_info_module.html deleted file mode 100644 index f2ad43ed..00000000 --- a/pr/573/docker_network_info_module.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - community.docker.docker_network_info module – Retrieves facts about docker network — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_network_info module – Retrieves facts about docker network

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_network_info.

-
- -
-

Synopsis

-
    -
  • Retrieves facts about a docker network.

  • -
  • Essentially returns the output of docker network inspect <name>, similar to what community.docker.docker_network returns for a non-absent network.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

name

-

string / required

-

The name of the network to inspect.

-

When identifying an existing network name may be a name or a long or short network ID.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Get infos on network
-  community.docker.docker_network_info:
-    name: mydata
-  register: result
-
-- name: Does network exist?
-  ansible.builtin.debug:
-    msg: "The network {{ 'exists' if result.exists else 'does not exist' }}"
-
-- name: Print information about network
-  ansible.builtin.debug:
-    var: result.network
-  when: result.exists
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

exists

-

boolean

-

Returns whether the network exists.

-

Returned: always

-

Sample: true

-
-

network

-

dictionary

-

Facts representing the current state of the network. Matches the docker inspection output.

-

Will be none if network does not exist.

-

Returned: always

-

Sample: {"Attachable": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {}, "Created": "2018-12-07T01:47:51.250835114-06:00", "Driver": "bridge", "EnableIPv6": false, "IPAM": {"Config": [{"Gateway": "192.168.96.1", "Subnet": "192.168.96.0/20"}], "Driver": "default", "Options": null}, "Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a", "Ingress": false, "Internal": false, "Labels": {}, "Name": "ansible-test-f2700bba", "Options": {}, "Scope": "local"}

-
-
-

Authors

-
    -
  • Dave Bendit (@DBendit)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_network_module.html b/pr/573/docker_network_module.html deleted file mode 100644 index 3c5f8196..00000000 --- a/pr/573/docker_network_module.html +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - community.docker.docker_network module – Manage Docker networks — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_network module – Manage Docker networks

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_network.

-
- -
-

Synopsis

-
    -
  • Create/remove Docker networks and connect containers to them.

  • -
  • Performs largely the same function as the docker network CLI subcommand.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-

appends

-

aliases: incremental

-

boolean

-

By default the connected list is canonical, meaning containers not on the list are removed from the network.

-

Use appends to leave existing containers connected.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

attachable

-

boolean

-

If enabled, and the network is in the global scope, non-service containers on worker nodes will be able to connect to the network.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-

connected

-

aliases: containers

-

list / elements=string

-

List of container names or container IDs to connect to a network.

-

Please note that the module only makes sure that these containers are connected to the network, but does not care about connection options. If you rely on specific IP addresses etc., use the community.docker.docker_container module to ensure your containers are correctly connected to this network.

-

Default: []

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

driver

-

string

-

Specify the type of network. Docker provides bridge and overlay drivers, but 3rd party drivers can also be used.

-

Default: "bridge"

-
-

driver_options

-

dictionary

-

Dictionary of network settings. Consult docker docs for valid options and values.

-

Default: {}

-
-

enable_ipv6

-

boolean

-

Enable IPv6 networking.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

force

-

boolean

-

With state absent forces disconnecting all containers from the network prior to deleting the network. With state present will disconnect all containers, delete the network and re-create the network.

-

This option is required if you have changed the IPAM or driver options and want an existing network to be updated to use the new options.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

internal

-

boolean

-

Restrict external access to the network.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

ipam_config

-

list / elements=dictionary

-

List of IPAM config blocks. Consult Docker docs for valid options and values. Note that iprange is spelled differently here (we use the notation from the Docker SDK for Python).

-
-

aux_addresses

-

dictionary

-

Auxiliary IP addresses used by Network driver, as a mapping from hostname to IP.

-
-

gateway

-

string

-

IP gateway address.

-
-

iprange

-

string

-

IP address range in CIDR notation.

-
-

subnet

-

string

-

IP subset in CIDR notation.

-
-

ipam_driver

-

string

-

Specify an IPAM driver.

-
-

ipam_driver_options

-

dictionary

-

Dictionary of IPAM driver options.

-
-

labels

-

dictionary

-

Dictionary of labels.

-

Default: {}

-
-
-

name

-

aliases: network_name

-

string / required

-

Name of the network to operate on.

-
-

scope

-

string

-

Specify the network’s scope.

-

Choices:

-
    -
  • "local"

  • -
  • "global"

  • -
  • "swarm"

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

absent deletes the network. If a network has connected containers, it cannot be deleted. Use the force option to disconnect all containers and delete the network.

-

present creates the network, if it does not already exist with the specified parameters, and connects the list of containers provided via the connected parameter. Containers not on the list will be disconnected. An empty list will leave no containers connected to the network. Use the appends option to leave existing containers connected. Use the force options to force re-creation of the network.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • When network options are changed, the module disconnects all containers from the network, deletes the network, and re-creates the network. It does not try to reconnect containers, except the ones listed in (connected, and even for these, it does not consider specific connection options like fixed IP addresses or MAC addresses. If you need more control over how the containers are connected to the network, loop the community.docker.docker_container module to loop over your containers to make sure they are connected properly.

  • -
  • The module does not support Docker Swarm. This means that it will not try to disconnect or reconnect services. If services are connected to the network, deleting the network will fail. When network options are changed, the network has to be deleted and recreated, so this will fail as well.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Create a network
-  community.docker.docker_network:
-    name: network_one
-
-- name: Remove all but selected list of containers
-  community.docker.docker_network:
-    name: network_one
-    connected:
-      - container_a
-      - container_b
-      - container_c
-
-- name: Remove a single container
-  community.docker.docker_network:
-    name: network_one
-    connected: "{{ fulllist|difference(['container_a']) }}"
-
-- name: Add a container to a network, leaving existing containers connected
-  community.docker.docker_network:
-    name: network_one
-    connected:
-      - container_a
-    appends: true
-
-- name: Create a network with driver options
-  community.docker.docker_network:
-    name: network_two
-    driver_options:
-      com.docker.network.bridge.name: net2
-
-- name: Create a network with custom IPAM config
-  community.docker.docker_network:
-    name: network_three
-    ipam_config:
-      - subnet: 172.23.27.0/24
-        gateway: 172.23.27.2
-        iprange: 172.23.27.0/26
-        aux_addresses:
-          host1: 172.23.27.3
-          host2: 172.23.27.4
-
-- name: Create a network with labels
-  community.docker.docker_network:
-    name: network_four
-    labels:
-      key1: value1
-      key2: value2
-
-- name: Create a network with IPv6 IPAM config
-  community.docker.docker_network:
-    name: network_ipv6_one
-    enable_ipv6: true
-    ipam_config:
-      - subnet: fdd1:ac8c:0557:7ce1::/64
-
-- name: Create a network with IPv6 and custom IPv4 IPAM config
-  community.docker.docker_network:
-    name: network_ipv6_two
-    enable_ipv6: true
-    ipam_config:
-      - subnet: 172.24.27.0/24
-      - subnet: fdd1:ac8c:0557:7ce2::/64
-
-- name: Delete a network, disconnecting all containers
-  community.docker.docker_network:
-    name: network_one
-    state: absent
-    force: true
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

network

-

dictionary

-

Network inspection results for the affected network.

-

Returned: success

-

Sample: {}

-
-
-

Authors

-
    -
  • Ben Keith (@keitwb)

  • -
  • Chris Houseknecht (@chouseknecht)

  • -
  • Dave Bendit (@DBendit)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_node_info_module.html b/pr/573/docker_node_info_module.html deleted file mode 100644 index 4b10ab04..00000000 --- a/pr/573/docker_node_info_module.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - - - - community.docker.docker_node_info module – Retrieves facts about docker swarm node from Swarm Manager — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_node_info module – Retrieves facts about docker swarm node from Swarm Manager

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_node_info.

-
- -
-

Synopsis

-
    -
  • Retrieves facts about a docker node.

  • -
  • Essentially returns the output of docker node inspect <name>.

  • -
  • Must be executed on a host running as Swarm Manager, otherwise the module will fail.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). Note that both modules should *not* be installed at the same time. Also note that when both modules are installed and one of them is uninstalled, the other might no longer function and a reinstall of it is required.

  • -
  • Docker SDK for Python >= 2.4.0

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

name

-

list / elements=string

-

The name of the node to inspect.

-

The list of nodes names to inspect.

-

If empty then return information of all nodes in Swarm cluster.

-

When identifying the node use either the hostname of the node (as registered in Swarm) or node ID.

-

If self is true then this parameter is ignored.

-
-

self

-

boolean

-

If true, queries the node (that is, the docker daemon) the module communicates with.

-

If true then name is ignored.

-

If false then query depends on name presence and value.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Get info on all nodes
-  community.docker.docker_node_info:
-  register: result
-
-- name: Get info on node
-  community.docker.docker_node_info:
-    name: mynode
-  register: result
-
-- name: Get info on list of nodes
-  community.docker.docker_node_info:
-    name:
-      - mynode1
-      - mynode2
-  register: result
-
-- name: Get info on host if it is Swarm Manager
-  community.docker.docker_node_info:
-    self: true
-  register: result
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

nodes

-

list / elements=dictionary

-

Facts representing the current state of the nodes. Matches the docker node inspect output.

-

Can contain multiple entries if more than one node provided in name, or name is not provided.

-

If name contains a list of nodes, the output will provide information on all nodes registered at the swarm, including nodes that left the swarm but have not been removed from the cluster on swarm managers and nodes that are unreachable.

-

Returned: always

-
-
-

Authors

-
    -
  • Piotr Wojciechowski (@WojciechowskiPiotr)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_node_module.html b/pr/573/docker_node_module.html deleted file mode 100644 index 74c4d832..00000000 --- a/pr/573/docker_node_module.html +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - community.docker.docker_node module – Manage Docker Swarm node — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_node module – Manage Docker Swarm node

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_node.

-
- -
-

Synopsis

-
    -
  • Manages the Docker nodes via Swarm Manager.

  • -
  • This module allows to change the node’s role, its availability, and to modify, add or remove node labels.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). Note that both modules should *not* be installed at the same time. Also note that when both modules are installed and one of them is uninstalled, the other might no longer function and a reinstall of it is required.

  • -
  • Docker SDK for Python >= 2.4.0

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

availability

-

string

-

Node availability to assign. If not provided then node availability remains unchanged.

-

Choices:

-
    -
  • "active"

  • -
  • "pause"

  • -
  • "drain"

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

hostname

-

string / required

-

The hostname or ID of node as registered in Swarm.

-

If more than one node is registered using the same hostname the ID must be used, otherwise module will fail.

-
-

labels

-

dictionary

-

User-defined key/value metadata that will be assigned as node attribute.

-

Label operations in this module apply to the docker swarm node specified by hostname. Use community.docker.docker_swarm module to add/modify/remove swarm cluster labels.

-

The actual state of labels assigned to the node when module completes its work depends on labels_state and labels_to_remove parameters values. See description below.

-
-

labels_state

-

string

-

It defines the operation on the labels assigned to node and labels specified in labels option.

-

Set to merge to combine labels provided in labels with those already assigned to the node. If no labels are assigned then it will add listed labels. For labels that are already assigned to the node, it will update their values. The labels not specified in labels will remain unchanged. If labels is empty then no changes will be made.

-

Set to replace to replace all assigned labels with provided ones. If labels is empty then all labels assigned to the node will be removed.

-

Choices:

-
    -
  • "merge" ← (default)

  • -
  • "replace"

  • -
-
-

labels_to_remove

-

list / elements=string

-

List of labels that will be removed from the node configuration. The list has to contain only label names, not their values.

-

If the label provided on the list is not assigned to the node, the entry is ignored.

-

If the label is both on the labels_to_remove and labels, then value provided in labels remains assigned to the node.

-

If labels_state is replace and labels is not provided or empty then all labels assigned to node are removed and labels_to_remove is ignored.

-
-

role

-

string

-

Node role to assign. If not provided then node role remains unchanged.

-

Choices:

-
    -
  • "manager"

  • -
  • "worker"

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Set node role
-  community.docker.docker_node:
-    hostname: mynode
-    role: manager
-
-- name: Set node availability
-  community.docker.docker_node:
-    hostname: mynode
-    availability: drain
-
-- name: Replace node labels with new labels
-  community.docker.docker_node:
-    hostname: mynode
-    labels:
-      key: value
-    labels_state: replace
-
-- name: Merge node labels and new labels
-  community.docker.docker_node:
-    hostname: mynode
-    labels:
-      key: value
-
-- name: Remove all labels assigned to node
-  community.docker.docker_node:
-    hostname: mynode
-    labels_state: replace
-
-- name: Remove selected labels from the node
-  community.docker.docker_node:
-    hostname: mynode
-    labels_to_remove:
-      - key1
-      - key2
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

node

-

dictionary

-

Information about node after ‘update’ operation

-

Returned: success

-
-
-

Authors

-
    -
  • Piotr Wojciechowski (@WojciechowskiPiotr)

  • -
  • Thierry Bouvet (@tbouvet)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_plugin_module.html b/pr/573/docker_plugin_module.html deleted file mode 100644 index 36fc74e2..00000000 --- a/pr/573/docker_plugin_module.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - - - - community.docker.docker_plugin module – Manage Docker plugins — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_plugin module – Manage Docker plugins

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_plugin.

-
-

New in community.docker 1.3.0

- -
-

Synopsis

-
    -
  • This module allows to install, delete, enable and disable Docker plugins.

  • -
  • Performs largely the same function as the docker plugin CLI subcommand.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-

alias

-

string

-

added in community.docker 1.8.0

-

Local name for plugin.

-
-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

enable_timeout

-

integer

-

Timeout in seconds.

-

Default: 0

-
-

force_remove

-

boolean

-

Remove even if the plugin is enabled.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

plugin_name

-

string / required

-

Name of the plugin to operate on.

-
-

plugin_options

-

dictionary

-

Dictionary of plugin settings.

-

Default: {}

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

absent remove the plugin.

-

present install the plugin, if it does not already exist.

-

enable enable the plugin.

-

disable disable the plugin.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
  • "enable"

  • -
  • "disable"

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Install a plugin
-  community.docker.docker_plugin:
-    plugin_name: plugin_one
-    state: present
-
-- name: Remove a plugin
-  community.docker.docker_plugin:
-    plugin_name: plugin_one
-    state: absent
-
-- name: Enable the plugin
-  community.docker.docker_plugin:
-    plugin_name: plugin_one
-    state: enable
-
-- name: Disable the plugin
-  community.docker.docker_plugin:
-    plugin_name: plugin_one
-    state: disable
-
-- name: Install a plugin with options
-  community.docker.docker_plugin:
-    plugin_name: weaveworks/net-plugin:latest_release
-    plugin_options:
-      IPALLOC_RANGE: "10.32.0.0/12"
-      WEAVE_PASSWORD: "PASSWORD"
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

actions

-

list / elements=string

-

List of actions performed during task execution.

-

Returned: when state!=absent

-
-

plugin

-

dictionary

-

Plugin inspection results for the affected plugin.

-

Returned: success

-

Sample: {}

-
-
-

Authors

-
    -
  • Sakar Mehra (@sakar97)

  • -
  • Vladimir Porshkevich (@porshkevich)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_prune_module.html b/pr/573/docker_prune_module.html deleted file mode 100644 index b9c7fcbc..00000000 --- a/pr/573/docker_prune_module.html +++ /dev/null @@ -1,648 +0,0 @@ - - - - - - - community.docker.docker_prune module – Allows to prune various docker objects — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_prune module – Allows to prune various docker objects

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_prune.

-
- -
-

Synopsis

-
    -
  • Allows to run docker container prune, docker image prune, docker network prune and docker volume prune via the Docker API.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

builder_cache

-

boolean

-

Whether to prune the builder cache.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

containers

-

boolean

-

Whether to prune containers.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

containers_filters

-

dictionary

-

A dictionary of filter values used for selecting containers to delete.

-

For example, until: 24h.

-

See the docker documentation for more information on possible filters.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

images

-

boolean

-

Whether to prune images.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

images_filters

-

dictionary

-

A dictionary of filter values used for selecting images to delete.

-

For example, dangling: true.

-

See the docker documentation for more information on possible filters.

-
-

networks

-

boolean

-

Whether to prune networks.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

networks_filters

-

dictionary

-

A dictionary of filter values used for selecting networks to delete.

-

See the docker documentation for more information on possible filters.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

volumes

-

boolean

-

Whether to prune volumes.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

volumes_filters

-

dictionary

-

A dictionary of filter values used for selecting volumes to delete.

-

See the docker documentation for more information on possible filters.

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: none

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Prune containers older than 24h
-  community.docker.docker_prune:
-    containers: true
-    containers_filters:
-      # only consider containers created more than 24 hours ago
-      until: 24h
-
-- name: Prune everything
-  community.docker.docker_prune:
-    containers: true
-    images: true
-    networks: true
-    volumes: true
-    builder_cache: true
-
-- name: Prune everything (including non-dangling images)
-  community.docker.docker_prune:
-    containers: true
-    images: true
-    images_filters:
-      dangling: false
-    networks: true
-    volumes: true
-    builder_cache: true
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Key

Description

-

builder_cache_space_reclaimed

-

integer

-

Amount of reclaimed disk space from builder cache pruning in bytes.

-

Returned: builder_cache is true

-

Sample: 0

-
-

containers

-

list / elements=string

-

List of IDs of deleted containers.

-

Returned: containers is true

-

Sample: []

-
-

containers_space_reclaimed

-

integer

-

Amount of reclaimed disk space from container pruning in bytes.

-

Returned: containers is true

-

Sample: 0

-
-

images

-

list / elements=string

-

List of IDs of deleted images.

-

Returned: images is true

-

Sample: []

-
-

images_space_reclaimed

-

integer

-

Amount of reclaimed disk space from image pruning in bytes.

-

Returned: images is true

-

Sample: 0

-
-

networks

-

list / elements=string

-

List of IDs of deleted networks.

-

Returned: networks is true

-

Sample: []

-
-

volumes

-

list / elements=string

-

List of IDs of deleted volumes.

-

Returned: volumes is true

-

Sample: []

-
-

volumes_space_reclaimed

-

integer

-

Amount of reclaimed disk space from volumes pruning in bytes.

-

Returned: volumes is true

-

Sample: 0

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_secret_module.html b/pr/573/docker_secret_module.html deleted file mode 100644 index 25111f33..00000000 --- a/pr/573/docker_secret_module.html +++ /dev/null @@ -1,641 +0,0 @@ - - - - - - - community.docker.docker_secret module – Manage docker secrets. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_secret module – Manage docker secrets.

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_secret.

-
- -
-

Synopsis

-
    -
  • Create and remove Docker secrets in a Swarm environment. Similar to docker secret create and docker secret rm.

  • -
  • Adds to the metadata of new secrets ansible_key, an encrypted hash representation of the data, which is then used in future runs to test if a secret has changed. If ansible_key is not present, then a secret will not be updated unless the force option is set.

  • -
  • Updates to secrets are performed by removing the secret and creating it again.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). This module does *not* work with docker-py.

  • -
  • Docker SDK for Python >= 2.1.0

  • -
  • Python >= 2.7

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

data

-

string

-

The value of the secret.

-

Mutually exclusive with data_src. One of data and data_src is required if state=present.

-
-

data_is_b64

-

boolean

-

If set to true, the data is assumed to be Base64 encoded and will be decoded before being used.

-

To use binary data, it is better to keep it Base64 encoded and let it be decoded by this option.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

data_src

-

path

-

added in community.docker 1.10.0

-

The file on the target from which to read the secret.

-

Mutually exclusive with data. One of data and data_src is required if state=present.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

force

-

boolean

-

Use with state present to always remove and recreate an existing secret.

-

If true, an existing secret will be replaced, even if it has not changed.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

labels

-

dictionary

-

A map of key:value meta data, where both key and value are expected to be strings.

-

If new meta data is provided, or existing meta data is modified, the secret will be updated by removing it and creating it again.

-
-

name

-

string / required

-

The name of the secret.

-
-

rolling_versions

-

boolean

-

added in community.docker 2.2.0

-

If set to true, secrets are created with an increasing version number appended to their name.

-

Adds a label containing the version number to the managed secrets with the name ansible_version.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

Set to present, if the secret should exist, and absent, if it should not.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

versions_to_keep

-

integer

-

added in community.docker 2.2.0

-

When using rolling_versions, the number of old versions of the secret to keep.

-

Extraneous old secrets are deleted after the new one is created.

-

Set to -1 to keep everything or to 0 or 1 to keep only the current one.

-

Default: 5

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Create secret foo (from a file on the control machine)
-  community.docker.docker_secret:
-    name: foo
-    # If the file is JSON or binary, Ansible might modify it (because
-    # it is first decoded and later re-encoded). Base64-encoding the
-    # file directly after reading it prevents this to happen.
-    data: "{{ lookup('file', '/path/to/secret/file') | b64encode }}"
-    data_is_b64: true
-    state: present
-
-- name: Create secret foo (from a file on the target machine)
-  community.docker.docker_secret:
-    name: foo
-    data_src: /path/to/secret/file
-    state: present
-
-- name: Change the secret data
-  community.docker.docker_secret:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: baz
-      one: '1'
-    state: present
-
-- name: Add a new label
-  community.docker.docker_secret:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: baz
-      one: '1'
-      # Adding a new label will cause a remove/create of the secret
-      two: '2'
-    state: present
-
-- name: No change
-  community.docker.docker_secret:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: baz
-      one: '1'
-      # Even though 'two' is missing, there is no change to the existing secret
-    state: present
-
-- name: Update an existing label
-  community.docker.docker_secret:
-    name: foo
-    data: Goodnight everyone!
-    labels:
-      bar: monkey   # Changing a label will cause a remove/create of the secret
-      one: '1'
-    state: present
-
-- name: Force the removal/creation of the secret
-  community.docker.docker_secret:
-    name: foo
-    data: Goodnight everyone!
-    force: true
-    state: present
-
-- name: Remove secret foo
-  community.docker.docker_secret:
-    name: foo
-    state: absent
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

secret_id

-

string

-

The ID assigned by Docker to the secret object.

-

Returned: success and state is present

-

Sample: "hzehrmyjigmcp2gb6nlhmjqcv"

-
-

secret_name

-

string

-

added in community.docker 2.2.0

-

The name of the created secret object.

-

Returned: success and state is present

-

Sample: "awesome_secret"

-
-
-

Authors

-
    -
  • Chris Houseknecht (@chouseknecht)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_stack_info_module.html b/pr/573/docker_stack_info_module.html deleted file mode 100644 index a85af0d6..00000000 --- a/pr/573/docker_stack_info_module.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - community.docker.docker_stack_info module – Return information on a docker stack — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_stack_info module – Return information on a docker stack

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker.

-

To use it in a playbook, specify: community.docker.docker_stack_info.

-
- -
-

Synopsis

-
    -
  • Retrieve information on docker stacks using the docker stack command on the target node (see examples).

  • -
-
-
-

Attributes

- - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Examples

-
- name: Shows stack info
-  community.docker.docker_stack_info:
-  register: result
-
-- name: Show results
-  ansible.builtin.debug:
-    var: result.results
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

results

-

list / elements=dictionary

-

List of dictionaries containing the list of stacks or tasks associated -to a stack name.

-

Returned: always

-

Sample: [{"name": "grafana", "namespace": "default", "orchestrator": "Kubernetes", "services": "2"}]

-
-
-

Authors

-
    -
  • Jose Angel Munoz (@imjoseangel)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_stack_module.html b/pr/573/docker_stack_module.html deleted file mode 100644 index e2b5030d..00000000 --- a/pr/573/docker_stack_module.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - community.docker.docker_stack module – docker stack module — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_stack module – docker stack module

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_stack.

-
- -
-

Synopsis

-
    -
  • Manage docker stacks using the docker stack command on the target node (see examples).

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • jsondiff

  • -
  • pyyaml

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-

absent_retries

-

integer

-

If >0 and state is absent the module will retry up to absent_retries times to delete the stack until all the resources have been effectively deleted. If the last try still reports the stack as not completely removed the module will fail.

-

Default: 0

-
-

absent_retries_interval

-

integer

-

Interval in seconds between consecutive absent_retries.

-

Default: 1

-
-

compose

-

list / elements=any

-

List of compose definitions. Any element may be a string referring to the path of the compose file on the target host or the YAML contents of a compose file nested as dictionary.

-

Default: []

-
-

name

-

string / required

-

Stack name

-
-

prune

-

boolean

-

If true will add the --prune option to the docker stack deploy command. This will have docker remove the services not present in the current stack definition.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

resolve_image

-

string

-

If set will add the --resolve-image option to the docker stack deploy command. This will have docker query the registry to resolve image digest and supported platforms. If not set, docker use “always” by default.

-

Choices:

-
    -
  • "always"

  • -
  • "changed"

  • -
  • "never"

  • -
-
-

state

-

string

-

Service state.

-

Choices:

-
    -
  • "present" ← (default)

  • -
  • "absent"

  • -
-
-

with_registry_auth

-

boolean

-

If true will add the --with-registry-auth option to the docker stack deploy command. This will have docker send registry authentication details to Swarm agents.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

check_mode

-

Support: none

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: none

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Examples

-
- name: Deploy stack from a compose file
-  community.docker.docker_stack:
-    state: present
-    name: mystack
-    compose:
-      - /opt/docker-compose.yml
-
-- name: Deploy stack from base compose file and override the web service
-  community.docker.docker_stack:
-    state: present
-    name: mystack
-    compose:
-      - /opt/docker-compose.yml
-      - version: '3'
-        services:
-          web:
-            image: nginx:latest
-            environment:
-              ENVVAR: envvar
-
-- name: Remove stack
-  community.docker.docker_stack:
-    name: mystack
-    state: absent
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

stack_spec_diff

-

dictionary

-

dictionary containing the differences between the ‘Spec’ field -of the stack services before and after applying the new stack -definition.

-

Returned: on change

-

Sample: "\"stack_spec_diff\": {'test_stack_test_service': {u'TaskTemplate': {u'ContainerSpec': {delete: [u'Env']}}}}\n"

-
-
-

Authors

-
    -
  • Dario Zanzico (@dariko)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_stack_task_info_module.html b/pr/573/docker_stack_task_info_module.html deleted file mode 100644 index b414cfff..00000000 --- a/pr/573/docker_stack_task_info_module.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - community.docker.docker_stack_task_info module – Return information of the tasks on a docker stack — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_stack_task_info module – Return information of the tasks on a docker stack

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker.

-

To use it in a playbook, specify: community.docker.docker_stack_task_info.

-
- -
-

Synopsis

-
    -
  • Retrieve information on docker stacks tasks using the docker stack command on the target node (see examples).

  • -
-
-
-

Parameters

- - - - - - - - - - - -

Parameter

Comments

-

name

-

string / required

-

Stack name.

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Examples

-
- name: Shows stack info
-  community.docker.docker_stack_task_info:
-    name: test_stack
-  register: result
-
-- name: Show results
-  ansible.builtin.debug:
-    var: result.results
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

results

-

list / elements=dictionary

-

List of dictionaries containing the list of tasks associated -to a stack name.

-

Returned: always

-

Sample: "[{\"CurrentState\":\"Running\",\"DesiredState\":\"Running\",\"Error\":\"\",\"ID\":\"7wqv6m02ugkw\",\"Image\":\"busybox\",\"Name\":\"test_stack.1\",\"Node\":\"swarm\",\"Ports\":\"\"}]\n"

-
-
-

Authors

-
    -
  • Jose Angel Munoz (@imjoseangel)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_swarm_info_module.html b/pr/573/docker_swarm_info_module.html deleted file mode 100644 index f5c11518..00000000 --- a/pr/573/docker_swarm_info_module.html +++ /dev/null @@ -1,660 +0,0 @@ - - - - - - - community.docker.docker_swarm_info module – Retrieves facts about Docker Swarm cluster. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_swarm_info module – Retrieves facts about Docker Swarm cluster.

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_swarm_info.

-
- -
-

Synopsis

-
    -
  • Retrieves facts about a Docker Swarm.

  • -
  • Returns lists of swarm objects names for the services - nodes, services, tasks.

  • -
  • The output differs depending on API version available on docker host.

  • -
  • Must be run on Swarm Manager node; otherwise module fails with error message. It does return boolean flags in on both error and success which indicate whether the docker daemon can be communicated with, whether it is in Swarm mode, and whether it is a Swarm Manager node.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). Note that both modules should *not* be installed at the same time. Also note that when both modules are installed and one of them is uninstalled, the other might no longer function and a reinstall of it is required.

  • -
  • Docker SDK for Python >= 1.10.0

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

nodes

-

boolean

-

Whether to list swarm nodes.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

nodes_filters

-

dictionary

-

A dictionary of filter values used for selecting nodes to list.

-

For example, name: mynode.

-

See the docker documentation for more information on possible filters.

-
-

services

-

boolean

-

Whether to list swarm services.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

services_filters

-

dictionary

-

A dictionary of filter values used for selecting services to list.

-

For example, name: myservice.

-

See the docker documentation for more information on possible filters.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

tasks

-

boolean

-

Whether to list containers.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tasks_filters

-

dictionary

-

A dictionary of filter values used for selecting tasks to list.

-

For example, node: mynode-1.

-

See the docker documentation for more information on possible filters.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

unlock_key

-

boolean

-

Whether to retrieve the swarm unlock key.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

verbose_output

-

boolean

-

When set to true and nodes, services or tasks is set to true, then the module output will contain verbose information about objects matching the full output of API method.

-

For details see the documentation of your version of Docker API at https://docs.docker.com/engine/api/.

-

The verbose output in this module contains only subset of information returned by _info module for each type of the objects.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Get info on Docker Swarm
-  community.docker.docker_swarm_info:
-  ignore_errors: true
-  register: result
-
-- name: Inform about basic flags
-  ansible.builtin.debug:
-    msg: |
-      Was able to talk to docker daemon: {{ result.can_talk_to_docker }}
-      Docker in Swarm mode: {{ result.docker_swarm_active }}
-      This is a Manager node: {{ result.docker_swarm_manager }}
-
-- block:
-
-- name: Get info on Docker Swarm and list of registered nodes
-  community.docker.docker_swarm_info:
-    nodes: true
-  register: result
-
-- name: Get info on Docker Swarm and extended list of registered nodes
-  community.docker.docker_swarm_info:
-    nodes: true
-    verbose_output: true
-  register: result
-
-- name: Get info on Docker Swarm and filtered list of registered nodes
-  community.docker.docker_swarm_info:
-    nodes: true
-    nodes_filters:
-      name: mynode
-  register: result
-
-- ansible.builtin.debug:
-    var: result.swarm_facts
-
-- name: Get the swarm unlock key
-  community.docker.docker_swarm_info:
-    unlock_key: true
-  register: result
-
-- ansible.builtin.debug:
-    var: result.swarm_unlock_key
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Key

Description

-

can_talk_to_docker

-

boolean

-

Will be true if the module can talk to the docker daemon.

-

Returned: both on success and on error

-
-

docker_swarm_active

-

boolean

-

Will be true if the module can talk to the docker daemon, and the docker daemon is in Swarm mode.

-

Returned: both on success and on error

-
-

docker_swarm_manager

-

boolean

-

Will be true if the module can talk to the docker daemon, the docker daemon is in Swarm mode, and the current node is a manager node.

-

Only if this one is true, the module will not fail.

-

Returned: both on success and on error

-
-

nodes

-

list / elements=dictionary

-

List of dict objects containing the basic information about each volume. Keys matches the docker node ls output unless verbose_output=true. See description for verbose_output.

-

Returned: When nodes is true

-
-

services

-

list / elements=dictionary

-

List of dict objects containing the basic information about each volume. Keys matches the docker service ls output unless verbose_output=true. See description for verbose_output.

-

Returned: When services is true

-
-

swarm_facts

-

dictionary

-

Facts representing the basic state of the docker Swarm cluster.

-

Contains tokens to connect to the Swarm

-

Returned: always

-
-

swarm_unlock_key

-

string

-

Contains the key needed to unlock the swarm.

-

Returned: When unlock_key is true.

-
-

tasks

-

list / elements=dictionary

-

List of dict objects containing the basic information about each volume. Keys matches the docker service ps output unless verbose_output=true. See description for verbose_output.

-

Returned: When tasks is true

-
-
-

Authors

-
    -
  • Piotr Wojciechowski (@WojciechowskiPiotr)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_swarm_inventory.html b/pr/573/docker_swarm_inventory.html deleted file mode 100644 index 3e511899..00000000 --- a/pr/573/docker_swarm_inventory.html +++ /dev/null @@ -1,583 +0,0 @@ - - - - - - - community.docker.docker_swarm inventory – Ansible dynamic inventory plugin for Docker swarm nodes. — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_swarm inventory – Ansible dynamic inventory plugin for Docker swarm nodes.

-
-

Note

-

This inventory plugin is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this inventory plugin, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_swarm.

-
- -
-

Synopsis

-
    -
  • Reads inventories from the Docker swarm API.

  • -
  • Uses a YAML configuration file docker_swarm.[yml|yaml].

  • -
  • The plugin returns following groups of swarm nodes: all - all hosts; workers - all worker nodes; managers - all manager nodes; leader - the swarm leader node; nonleaders - all nodes except the swarm leader.

  • -
-
-
-

Requirements

-

The below requirements are needed on the local controller node that executes this inventory.

- -
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python.

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-
-

compose

-

dictionary

-

Create vars from jinja2 expressions.

-

Default: {}

-
-
-

docker_host

-

aliases: docker_url

-

string / required

-

Socket of a Docker swarm manager node (tcp, unix).

-

Use unix://var/run/docker.sock to connect via local socket.

-
-

groups

-

dictionary

-

Add hosts to group based on Jinja2 conditionals.

-

Default: {}

-
-

include_host_uri

-

boolean

-

Toggle to return the additional attribute ansible_host_uri which contains the URI of the swarm leader in format of tcp://172.16.0.1:2376. This value may be used without additional modification as value of option docker_host in Docker Swarm modules when connecting via API. The port always defaults to 2376.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

include_host_uri_port

-

integer

-

Override the detected port number included in ansible_host_uri

-
-

keyed_groups

-

list / elements=dictionary

-

Add hosts to group based on the values of a variable.

-

Default: []

-
-

default_value

-

string

-

added in ansible-core 2.12

-

The default value when the host variable’s value is an empty string.

-

This option is mutually exclusive with trailing_separator.

-
-

key

-

string

-

The key from input dictionary used to generate groups

-
-

parent_group

-

string

-

parent group for keyed group

-
-

prefix

-

string

-

A keyed group name will start with this prefix

-

Default: ""

-
-

separator

-

string

-

separator used to build the keyed group name

-

Default: "_"

-
-

trailing_separator

-

boolean

-

added in ansible-core 2.12

-

Set this option to False to omit the separator after the host variable when the value is an empty string.

-

This option is mutually exclusive with default_value.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

leading_separator

-

boolean

-

added in ansible-core 2.11

-

Use in conjunction with keyed_groups.

-

By default, a keyed group that does not have a prefix or a separator provided will have a name that starts with an underscore.

-

This is because the default prefix is “” and the default separator is “_”.

-

Set this option to False to omit the leading underscore (or other separator) if no prefix is given.

-

If the group name is derived from a mapping the separator is still used to concatenate the items.

-

To not use a separator in the group name at all, set the separator for the keyed group to an empty string instead.

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-

plugin

-

string / required

-

The name of this plugin, it should always be set to community.docker.docker_swarm for this plugin to recognize it as it’s own.

-

Choices:

-
    -
  • "docker_swarm"

  • -
  • "community.docker.docker_swarm"

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-
-

strict

-

boolean

-

If yes make invalid entries a fatal error, otherwise skip and continue.

-

Since it is possible to use facts in the expressions they might not always be available and we ignore those errors by default.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

timeout

-

aliases: time_out

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Connect using TLS without verifying the authenticity of the Docker host server.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker host server, provide the expected name of the server.

-
-

use_extra_vars

-

boolean

-

added in ansible-core 2.11

-

Merge extra vars into the available variables for composition (highest precedence).

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-

Configuration:

- -
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Toggle if connecting using TLS with or without verifying the authenticity of the Docker host server.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

verbose_output

-

boolean

-

Toggle to (not) include all available nodes metadata (for example Platform, Architecture, OS, EngineVersion)

-

Choices:

-
    -
  • false

  • -
  • true ← (default)

  • -
-
-
-
-

Examples

-
# Minimal example using local docker
-plugin: community.docker.docker_swarm
-docker_host: unix://var/run/docker.sock
-
-# Minimal example using remote docker
-plugin: community.docker.docker_swarm
-docker_host: tcp://my-docker-host:2375
-
-# Example using remote docker with unverified TLS
-plugin: community.docker.docker_swarm
-docker_host: tcp://my-docker-host:2376
-tls: true
-
-# Example using remote docker with verified TLS and client certificate verification
-plugin: community.docker.docker_swarm
-docker_host: tcp://my-docker-host:2376
-validate_certs: true
-ca_cert: /somewhere/ca.pem
-client_key: /somewhere/key.pem
-client_cert: /somewhere/cert.pem
-
-# Example using constructed features to create groups and set ansible_host
-plugin: community.docker.docker_swarm
-docker_host: tcp://my-docker-host:2375
-strict: False
-keyed_groups:
-  # add for example x86_64 hosts to an arch_x86_64 group
-  - prefix: arch
-    key: 'Description.Platform.Architecture'
-  # add for example linux hosts to an os_linux group
-  - prefix: os
-    key: 'Description.Platform.OS'
-  # create a group per node label
-  # for exomple a node labeled w/ "production" ends up in group "label_production"
-  # hint: labels containing special characters will be converted to safe names
-  - key: 'Spec.Labels'
-    prefix: label
-
-
-
-

Authors

-
    -
  • Stefan Heitmüller (@morph027)

  • -
-
-

Hint

-

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.

-
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_swarm_module.html b/pr/573/docker_swarm_module.html deleted file mode 100644 index a28d3d95..00000000 --- a/pr/573/docker_swarm_module.html +++ /dev/null @@ -1,813 +0,0 @@ - - - - - - - community.docker.docker_swarm module – Manage Swarm cluster — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_swarm module – Manage Swarm cluster

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_swarm.

-
- -
-

Synopsis

-
    -
  • Create a new Swarm cluster.

  • -
  • Add/Remove nodes or managers to an existing cluster.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). Note that both modules should *not* be installed at the same time. Also note that when both modules are installed and one of them is uninstalled, the other might no longer function and a reinstall of it is required.

  • -
  • Docker SDK for Python >= 1.10.0

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-

advertise_addr

-

string

-

Externally reachable address advertised to other nodes.

-

This can either be an address/port combination in the form 192.168.1.1:4567, or an interface followed by a port number, like eth0:4567.

-

If the port number is omitted, the port number from the listen address is used.

-

If advertise_addr is not specified, it will be automatically detected when possible.

-

Only used when swarm is initialised or joined. Because of this it’s not considered for idempotency checking.

-
-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

autolock_managers

-

boolean

-

If set, generate a key and use it to lock data stored on the managers.

-

Docker default value is false.

-

community.docker.docker_swarm_info can be used to retrieve the unlock key.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

ca_force_rotate

-

integer

-

An integer whose purpose is to force swarm to generate a new signing CA certificate and key, if none have been specified.

-

Docker default value is 0.

-

Requires API version >= 1.30.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

data_path_addr

-

string

-

added in community.docker 2.5.0

-

Address or interface to use for data path traffic.

-

This can either be an address in the form 192.168.1.1, or an interface, like eth0.

-

Only used when swarm is initialised or joined. Because of this it is not considered for idempotency checking.

-
-

data_path_port

-

integer

-

added in community.docker 3.1.0

-

Port to use for data path traffic.

-

This needs to be a port number like 9789.

-

Only used when swarm is initialised. Because of this it is not considered for idempotency checking.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

default_addr_pool

-

list / elements=string

-

Default address pool in CIDR format.

-

Only used when swarm is initialised. Because of this it’s not considered for idempotency checking.

-

Requires API version >= 1.39.

-
-

dispatcher_heartbeat_period

-

integer

-

The delay for an agent to send a heartbeat to the dispatcher.

-

Docker default value is 5s.

-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

election_tick

-

integer

-

Amount of ticks (in seconds) needed without a leader to trigger a new election.

-

Docker default value is 10s.

-
-

force

-

boolean

-

Use with state present to force creating a new Swarm, even if already part of one.

-

Use with state absent to Leave the swarm even if this node is a manager.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

heartbeat_tick

-

integer

-

Amount of ticks (in seconds) between each heartbeat.

-

Docker default value is 1s.

-
-

join_token

-

string

-

Swarm token used to join a swarm cluster.

-

Used with state=join.

-

If this value is specified, the corresponding value in the return values will be censored by Ansible. This is a side-effect of this value not being logged.

-
-

keep_old_snapshots

-

integer

-

Number of snapshots to keep beyond the current snapshot.

-

Docker default value is 0.

-
-

labels

-

dictionary

-

User-defined key/value metadata.

-

Label operations in this module apply to the docker swarm cluster. Use community.docker.docker_node module to add/modify/remove swarm node labels.

-

Requires API version >= 1.32.

-
-

listen_addr

-

string

-

Listen address used for inter-manager communication.

-

This can either be an address/port combination in the form 192.168.1.1:4567, or an interface followed by a port number, like eth0:4567.

-

If the port number is omitted, the default swarm listening port is used.

-

Only used when swarm is initialised or joined. Because of this it’s not considered for idempotency checking.

-

Default: "0.0.0.0:2377"

-
-

log_entries_for_slow_followers

-

integer

-

Number of log entries to keep around to sync up slow followers after a snapshot is created.

-
-

name

-

string

-

The name of the swarm.

-
-

node_cert_expiry

-

integer

-

Automatic expiry for nodes certificates.

-

Docker default value is 3months.

-
-

node_id

-

string

-

Swarm id of the node to remove.

-

Used with state=remove.

-
-

remote_addrs

-

list / elements=string

-

Remote address of one or more manager nodes of an existing Swarm to connect to.

-

Used with state=join.

-
-

rotate_manager_token

-

boolean

-

Rotate the manager join token.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

rotate_worker_token

-

boolean

-

Rotate the worker join token.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

signing_ca_cert

-

string

-

The desired signing CA certificate for all swarm node TLS leaf certificates, in PEM format.

-

This must not be a path to a certificate, but the contents of the certificate.

-

Requires API version >= 1.30.

-
-

signing_ca_key

-

string

-

The desired signing CA key for all swarm node TLS leaf certificates, in PEM format.

-

This must not be a path to a key, but the contents of the key.

-

Requires API version >= 1.30.

-
-

snapshot_interval

-

integer

-

Number of logs entries between snapshot.

-

Docker default value is 10000.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

Set to present, to create/update a new cluster.

-

Set to join, to join an existing cluster.

-

Set to absent, to leave an existing cluster.

-

Set to remove, to remove an absent node from the cluster. Note that removing requires Docker SDK for Python >= 2.4.0.

-

Choices:

-
    -
  • "present" ← (default)

  • -
  • "join"

  • -
  • "absent"

  • -
  • "remove"

  • -
-
-

subnet_size

-

integer

-

Default address pool subnet mask length.

-

Only used when swarm is initialised. Because of this it’s not considered for idempotency checking.

-

Requires API version >= 1.39.

-
-

task_history_retention_limit

-

integer

-

Maximum number of tasks history stored.

-

Docker default value is 5.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Init a new swarm with default parameters
-  community.docker.docker_swarm:
-    state: present
-
-- name: Update swarm configuration
-  community.docker.docker_swarm:
-    state: present
-    election_tick: 5
-
-- name: Add nodes
-  community.docker.docker_swarm:
-    state: join
-    advertise_addr: 192.168.1.2
-    join_token: SWMTKN-1--xxxxx
-    remote_addrs: [ '192.168.1.1:2377' ]
-
-- name: Leave swarm for a node
-  community.docker.docker_swarm:
-    state: absent
-
-- name: Remove a swarm manager
-  community.docker.docker_swarm:
-    state: absent
-    force: true
-
-- name: Remove node from swarm
-  community.docker.docker_swarm:
-    state: remove
-    node_id: mynode
-
-- name: Init a new swarm with different data path interface
-  community.docker.docker_swarm:
-    state: present
-    advertise_addr: eth0
-    data_path_addr: ens10
-
-- name: Init a new swarm with a different data path port
-  community.docker.docker_swarm:
-    state: present
-    data_path_port: 9789
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Key

Description

-

actions

-

list / elements=string

-

Provides the actions done on the swarm.

-

Returned: when action failed.

-

Sample: ["This cluster is already a swarm cluster"]

-
-

swarm_facts

-

dictionary

-

Informations about swarm.

-

Returned: success

-
-

JoinTokens

-

dictionary

-

Tokens to connect to the Swarm.

-

Returned: success

-
-

Manager

-

string

-

Token to join the cluster as a new *manager* node.

-

Note: if this value has been specified as join_token, the value here will not be the token, but VALUE_SPECIFIED_IN_NO_LOG_PARAMETER. If you pass join_token, make sure your playbook/role does not depend on this return value!

-

Returned: success

-

Sample: "SWMTKN-1--xxxxx"

-
-

Worker

-

string

-

Token to join the cluster as a new *worker* node.

-

Note: if this value has been specified as join_token, the value here will not be the token, but VALUE_SPECIFIED_IN_NO_LOG_PARAMETER. If you pass join_token, make sure your playbook/role does not depend on this return value!

-

Returned: success

-

Sample: "SWMTKN-1--xxxxx"

-
-

UnlockKey

-

string

-

The swarm unlock-key if autolock_managers is true.

-

Returned: on success if autolock_managers is true and swarm is initialised, or if autolock_managers has changed.

-

Sample: "SWMKEY-1-xxx"

-
-
-

Authors

-
    -
  • Thierry Bouvet (@tbouvet)

  • -
  • Piotr Wojciechowski (@WojciechowskiPiotr)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_swarm_service_info_module.html b/pr/573/docker_swarm_service_info_module.html deleted file mode 100644 index 5e600982..00000000 --- a/pr/573/docker_swarm_service_info_module.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - - - - community.docker.docker_swarm_service_info module – Retrieves information about docker services from a Swarm Manager — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_swarm_service_info module – Retrieves information about docker services from a Swarm Manager

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_swarm_service_info.

-
- -
-

Synopsis

-
    -
  • Retrieves information about a docker service.

  • -
  • Essentially returns the output of docker service inspect <name>.

  • -
  • Must be executed on a host running as Swarm Manager, otherwise the module will fail.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). Note that both modules should *not* be installed at the same time. Also note that when both modules are installed and one of them is uninstalled, the other might no longer function and a reinstall of it is required.

  • -
  • Docker SDK for Python >= 2.0.0

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

name

-

string / required

-

The name of the service to inspect.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Get info from a service
-  community.docker.docker_swarm_service_info:
-    name: myservice
-  register: result
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

exists

-

boolean

-

Returns whether the service exists.

-

Returned: always

-

Sample: true

-
-

service

-

dictionary

-

A dictionary representing the current state of the service. Matches the docker service inspect output.

-

Will be none if service does not exist.

-

Returned: always

-
-
-

Authors

-
    -
  • Hannes Ljungberg (@hannseman)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_swarm_service_module.html b/pr/573/docker_swarm_service_module.html deleted file mode 100644 index 0b7216f4..00000000 --- a/pr/573/docker_swarm_service_module.html +++ /dev/null @@ -1,1545 +0,0 @@ - - - - - - - community.docker.docker_swarm_service module – docker swarm service — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_swarm_service module – docker swarm service

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_swarm_service.

-
- -
-

Synopsis

-
    -
  • Manages docker services via a swarm manager node.

  • -
  • This modules does not support updating services in a stack.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • Docker SDK for Python: Please note that the docker-py Python module has been superseded by docker (see here for details). This module does *not* work with docker-py.

  • -
  • Docker SDK for Python >= 2.0.2

  • -
  • Python >= 2.7

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-

args

-

list / elements=string

-

List arguments to be passed to the container.

-

Corresponds to the ARG parameter of docker service create.

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

cap_add

-

list / elements=string

-

added in community.docker 2.2.0

-

List of capabilities to add to the container.

-

Requires API version >= 1.41.

-
-

cap_drop

-

list / elements=string

-

added in community.docker 2.2.0

-

List of capabilities to drop from the container.

-

Requires API version >= 1.41.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

command

-

any

-

Command to execute when the container starts.

-

A command may be either a string or a list or a list of strings.

-

Corresponds to the COMMAND parameter of docker service create.

-
-

configs

-

list / elements=dictionary

-

List of dictionaries describing the service configs.

-

Corresponds to the --config option of docker service create.

-

Requires API version >= 1.30.

-
-

config_id

-

string

-

Config’s ID.

-
-

config_name

-

string / required

-

Config’s name as defined at its creation.

-
-

filename

-

string

-

Name of the file containing the config. Defaults to the config_name if not specified.

-
-

gid

-

string

-

GID of the config file’s group.

-
-

mode

-

integer

-

File access mode inside the container. Must be an octal number (like 0644 or 0444).

-
-

uid

-

string

-

UID of the config file’s owner.

-
-

container_labels

-

dictionary

-

Dictionary of key value pairs.

-

Corresponds to the --container-label option of docker service create.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

dns

-

list / elements=string

-

List of custom DNS servers.

-

Corresponds to the --dns option of docker service create.

-
-

dns_options

-

list / elements=string

-

List of custom DNS options.

-

Corresponds to the --dns-option option of docker service create.

-
- -

list / elements=string

-

List of custom DNS search domains.

-

Corresponds to the --dns-search option of docker service create.

-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

endpoint_mode

-

string

-

Service endpoint mode.

-

Corresponds to the --endpoint-mode option of docker service create.

-

Choices:

-
    -
  • "vip"

  • -
  • "dnsrr"

  • -
-
-

env

-

any

-

List or dictionary of the service environment variables.

-

If passed a list each items need to be in the format of KEY=VALUE.

-

If passed a dictionary values which might be parsed as numbers, booleans or other types by the YAML parser must be quoted (for example "true") in order to avoid data loss.

-

Corresponds to the --env option of docker service create.

-
-

env_files

-

list / elements=path

-

List of paths to files, present on the target, containing environment variables FOO=BAR.

-

The order of the list is significant in determining the value assigned to a variable that shows up more than once.

-

If variable also present in env, then env value will override.

-
-

force_update

-

boolean

-

Force update even if no changes require it.

-

Corresponds to the --force option of docker service update.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

groups

-

list / elements=string

-

List of additional group names and/or IDs that the container process will run as.

-

Corresponds to the --group option of docker service update.

-
-

healthcheck

-

dictionary

-

Configure a check that is run to determine whether or not containers for this service are “healthy”. See the docs for the HEALTHCHECK Dockerfile instruction for details on how healthchecks work.

-

interval, timeout and start_period are specified as durations. They accept duration as a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-
-

interval

-

string

-

Time between running the check.

-
-

retries

-

integer

-

Consecutive failures needed to report unhealthy. It accept integer value.

-
-

start_period

-

string

-

Start period for the container to initialize before starting health-retries countdown.

-
-

test

-

any

-

Command to run to check health.

-

Must be either a string or a list. If it is a list, the first item must be one of NONE, CMD or CMD-SHELL.

-
-

timeout

-

string

-

Maximum time to allow one check to run.

-
-

hostname

-

string

-

Container hostname.

-

Corresponds to the --hostname option of docker service create.

-
-

hosts

-

dictionary

-

Dict of host-to-IP mappings, where each host name is a key in the dictionary. Each host name will be added to the container’s /etc/hosts file.

-

Corresponds to the --host option of docker service create.

-
-

image

-

string

-

Service image path and tag.

-

Corresponds to the IMAGE parameter of docker service create.

-
-

init

-

boolean

-

Use an init inside each service container to forward signals and reap processes.

-

Corresponds to the --init option of docker service create.

-

Requires API version >= 1.37.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

labels

-

dictionary

-

Dictionary of key value pairs.

-

Corresponds to the --label option of docker service create.

-
-

limits

-

dictionary

-

Configures service resource limits.

-
-

cpus

-

float

-

Service CPU limit. 0 equals no limit.

-

Corresponds to the --limit-cpu option of docker service create.

-
-

memory

-

string

-

Service memory limit in format <number>[<unit>]. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

0 equals no limit.

-

Omitting the unit defaults to bytes.

-

Corresponds to the --limit-memory option of docker service create.

-
-

logging

-

dictionary

-

Logging configuration for the service.

-
-

driver

-

string

-

Configure the logging driver for a service.

-

Corresponds to the --log-driver option of docker service create.

-
-

options

-

dictionary

-

Options for service logging driver.

-

Corresponds to the --log-opt option of docker service create.

-
-

mode

-

string

-

Service replication mode.

-

Service will be removed and recreated when changed.

-

Corresponds to the --mode option of docker service create.

-

Choices:

-
    -
  • "replicated" ← (default)

  • -
  • "global"

  • -
-
-

mounts

-

list / elements=dictionary

-

List of dictionaries describing the service mounts.

-

Corresponds to the --mount option of docker service create.

-
-

driver_config

-

dictionary

-

Volume driver configuration.

-

Can only be used when type is volume.

-
-

name

-

string

-

Name of the volume-driver plugin to use for the volume.

-
-

options

-

dictionary

-

Options as key-value pairs to pass to the driver for this volume.

-
-

labels

-

dictionary

-

Volume labels to apply.

-
-

no_copy

-

boolean

-

Disable copying of data from a container when a volume is created.

-

Can only be used when type is volume.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

propagation

-

string

-

The propagation mode to use.

-

Can only be used when type is bind.

-

Choices:

-
    -
  • "shared"

  • -
  • "slave"

  • -
  • "private"

  • -
  • "rshared"

  • -
  • "rslave"

  • -
  • "rprivate"

  • -
-
-

readonly

-

boolean

-

Whether the mount should be read-only.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

source

-

string

-

Mount source (for example a volume name or a host path).

-

Must be specified if type is not tmpfs.

-
-

target

-

string / required

-

Container path.

-
-

tmpfs_mode

-

integer

-

File mode of the tmpfs in octal.

-

Can only be used when type is tmpfs.

-
-

tmpfs_size

-

string

-

Size of the tmpfs mount in format <number>[<unit>]. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

Can only be used when type is tmpfs.

-
-

type

-

string

-

The mount type.

-

Note that npipe is only supported by Docker for Windows. Also note that npipe was added in Ansible 2.9.

-

Choices:

-
    -
  • "bind" ← (default)

  • -
  • "volume"

  • -
  • "tmpfs"

  • -
  • "npipe"

  • -
-
-

name

-

string / required

-

Service name.

-

Corresponds to the --name option of docker service create.

-
-

networks

-

list / elements=any

-

List of the service networks names or dictionaries.

-

When passed dictionaries valid sub-options are name, which is required, and aliases and options.

-

Prior to API version 1.29, updating and removing networks is not supported. If changes are made the service will then be removed and recreated.

-

Corresponds to the --network option of docker service create.

-
-

placement

-

dictionary

-

Configures service placement preferences and constraints.

-
-

constraints

-

list / elements=string

-

List of the service constraints.

-

Corresponds to the --constraint option of docker service create.

-
-

preferences

-

list / elements=dictionary

-

List of the placement preferences as key value pairs.

-

Corresponds to the --placement-pref option of docker service create.

-

Requires API version >= 1.27.

-
-

replicas_max_per_node

-

integer

-

added in community.docker 1.3.0

-

Maximum number of tasks per node.

-

Corresponds to the --replicas_max_per_node option of docker service create.

-

Requires API version >= 1.40

-
-

publish

-

list / elements=dictionary

-

List of dictionaries describing the service published ports.

-

Corresponds to the --publish option of docker service create.

-
-

mode

-

string

-

What publish mode to use.

-

Requires API version >= 1.32.

-

Choices:

-
    -
  • "ingress"

  • -
  • "host"

  • -
-
-

protocol

-

string

-

What protocol to use.

-

Choices:

-
    -
  • "tcp" ← (default)

  • -
  • "udp"

  • -
-
-

published_port

-

integer

-

The port to make externally available.

-
-

target_port

-

integer / required

-

The port inside the container to expose.

-
-

read_only

-

boolean

-

Mount the containers root filesystem as read only.

-

Corresponds to the --read-only option of docker service create.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

replicas

-

integer

-

Number of containers instantiated in the service. Valid only if mode is replicated.

-

If set to -1, and service is not present, service replicas will be set to 1.

-

If set to -1, and service is present, service replicas will be unchanged.

-

Corresponds to the --replicas option of docker service create.

-

Default: -1

-
-

reservations

-

dictionary

-

Configures service resource reservations.

-
-

cpus

-

float

-

Service CPU reservation. 0 equals no reservation.

-

Corresponds to the --reserve-cpu option of docker service create.

-
-

memory

-

string

-

Service memory reservation in format <number>[<unit>]. Number is a positive integer. Unit can be B (byte), K (kibibyte, 1024B), M (mebibyte), G (gibibyte), T (tebibyte), or P (pebibyte).

-

0 equals no reservation.

-

Omitting the unit defaults to bytes.

-

Corresponds to the --reserve-memory option of docker service create.

-
-

resolve_image

-

boolean

-

If the current image digest should be resolved from registry and updated if changed.

-

Requires API version >= 1.30.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

restart_config

-

dictionary

-

Configures if and how to restart containers when they exit.

-
-

condition

-

string

-

Restart condition of the service.

-

Corresponds to the --restart-condition option of docker service create.

-

Choices:

-
    -
  • "none"

  • -
  • "on-failure"

  • -
  • "any"

  • -
-
-

delay

-

string

-

Delay between restarts.

-

Accepts a a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --restart-delay option of docker service create.

-
-

max_attempts

-

integer

-

Maximum number of service restarts.

-

Corresponds to the --restart-condition option of docker service create.

-
-

window

-

string

-

Restart policy evaluation window.

-

Accepts a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --restart-window option of docker service create.

-
-

rollback_config

-

dictionary

-

Configures how the service should be rolled back in case of a failing update.

-
-

delay

-

string

-

Delay between task rollbacks.

-

Accepts a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --rollback-delay option of docker service create.

-

Requires API version >= 1.28.

-
-

failure_action

-

string

-

Action to take in case of rollback failure.

-

Corresponds to the --rollback-failure-action option of docker service create.

-

Requires API version >= 1.28.

-

Choices:

-
    -
  • "continue"

  • -
  • "pause"

  • -
-
-

max_failure_ratio

-

float

-

Fraction of tasks that may fail during a rollback.

-

Corresponds to the --rollback-max-failure-ratio option of docker service create.

-

Requires API version >= 1.28.

-
-

monitor

-

string

-

Duration after each task rollback to monitor for failure.

-

Accepts a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --rollback-monitor option of docker service create.

-

Requires API version >= 1.28.

-
-

order

-

string

-

Specifies the order of operations during rollbacks.

-

Corresponds to the --rollback-order option of docker service create.

-

Requires API version >= 1.29.

-
-

parallelism

-

integer

-

The number of containers to rollback at a time. If set to 0, all containers rollback simultaneously.

-

Corresponds to the --rollback-parallelism option of docker service create.

-

Requires API version >= 1.28.

-
-

secrets

-

list / elements=dictionary

-

List of dictionaries describing the service secrets.

-

Corresponds to the --secret option of docker service create.

-
-

filename

-

string

-

Name of the file containing the secret. Defaults to the secret_name if not specified.

-

Corresponds to the target key of docker service create --secret.

-
-

gid

-

string

-

GID of the secret file’s group.

-
-

mode

-

integer

-

File access mode inside the container. Must be an octal number (like 0644 or 0444).

-
-

secret_id

-

string

-

Secret’s ID.

-
-

secret_name

-

string / required

-

Secret’s name as defined at its creation.

-
-

uid

-

string

-

UID of the secret file’s owner.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

absent - A service matching the specified name will be removed and have its tasks stopped.

-

present - Asserts the existence of a service matching the name and provided configuration parameters. Unspecified configuration parameters will be set to docker defaults.

-

Choices:

-
    -
  • "present" ← (default)

  • -
  • "absent"

  • -
-
-

stop_grace_period

-

string

-

Time to wait before force killing a container.

-

Accepts a duration as a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --stop-grace-period option of docker service create.

-
-

stop_signal

-

string

-

Override default signal used to stop the container.

-

Corresponds to the --stop-signal option of docker service create.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

tty

-

boolean

-

Allocate a pseudo-TTY.

-

Corresponds to the --tty option of docker service create.

-

Choices:

-
    -
  • false

  • -
  • true

  • -
-
-

update_config

-

dictionary

-

Configures how the service should be updated. Useful for configuring rolling updates.

-
-

delay

-

string

-

Rolling update delay.

-

Accepts a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --update-delay option of docker service create.

-
-

failure_action

-

string

-

Action to take in case of container failure.

-

Corresponds to the --update-failure-action option of docker service create.

-

Usage of rollback requires API version >= 1.29.

-

Choices:

-
    -
  • "continue"

  • -
  • "pause"

  • -
  • "rollback"

  • -
-
-

max_failure_ratio

-

float

-

Fraction of tasks that may fail during an update before the failure action is invoked.

-

Corresponds to the --update-max-failure-ratio option of docker service create.

-
-

monitor

-

string

-

Time to monitor updated tasks for failures.

-

Accepts a string in a format that look like: 5h34m56s, 1m30s etc. The supported units are us, ms, s, m and h.

-

Corresponds to the --update-monitor option of docker service create.

-
-

order

-

string

-

Specifies the order of operations when rolling out an updated task.

-

Corresponds to the --update-order option of docker service create.

-

Requires API version >= 1.29.

-
-

parallelism

-

integer

-

Rolling update parallelism.

-

Corresponds to the --update-parallelism option of docker service create.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Requires Docker SDK for Python 4.4.0 or newer.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

user

-

string

-

Sets the username or UID used for the specified command.

-

Before Ansible 2.8, the default value for this option was root.

-

The default has been removed so that the user defined in the image is used if no user is specified here.

-

Corresponds to the --user option of docker service create.

-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

working_dir

-

string

-

Path to the working directory.

-

Corresponds to the --workdir option of docker service create.

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Images will only resolve to the latest digest when using Docker API >= 1.30 and Docker SDK for Python >= 3.2.0. When using older versions use force_update: true to trigger the swarm to resolve a new image.

  • -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • When connecting to Docker daemon with TLS, you might need to install additional Python packages. For the Docker SDK for Python, version 2.4 or newer, this can be done by installing docker[tls] with ansible.builtin.pip.

  • -
  • Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions. In general, it will use $HOME/.docker/config.json if the DOCKER_CONFIG environment variable is not specified, and use $DOCKER_CONFIG/config.json otherwise.

  • -
  • This module uses the Docker SDK for Python to communicate with the Docker daemon.

  • -
-
-
-
-

Examples

-
- name: Set command and arguments
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    command: sleep
-    args:
-      - "3600"
-
-- name: Set a bind mount
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    mounts:
-      - source: /tmp/
-        target: /remote_tmp/
-        type: bind
-
-- name: Set service labels
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    labels:
-      com.example.description: "Accounting webapp"
-      com.example.department: "Finance"
-
-- name: Set environment variables
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    env:
-      ENVVAR1: envvar1
-      ENVVAR2: envvar2
-    env_files:
-      - envs/common.env
-      - envs/apps/web.env
-
-- name: Set fluentd logging
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    logging:
-      driver: fluentd
-      options:
-        fluentd-address: "127.0.0.1:24224"
-        fluentd-async-connect: "true"
-        tag: myservice
-
-- name: Set restart policies
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    restart_config:
-      condition: on-failure
-      delay: 5s
-      max_attempts: 3
-      window: 120s
-
-- name: Set update config
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    update_config:
-      parallelism: 2
-      delay: 10s
-      order: stop-first
-
-- name: Set rollback config
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine
-    update_config:
-      failure_action: rollback
-    rollback_config:
-      parallelism: 2
-      delay: 10s
-      order: stop-first
-
-- name: Set placement preferences
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine:edge
-    placement:
-      preferences:
-        - spread: node.labels.mylabel
-      constraints:
-        - node.role == manager
-        - engine.labels.operatingsystem == ubuntu 14.04
-      replicas_max_per_node: 2
-
-- name: Set configs
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine:edge
-    configs:
-      - config_name: myconfig_name
-        filename: "/tmp/config.txt"
-
-- name: Set networks
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine:edge
-    networks:
-      - mynetwork
-
-- name: Set networks as a dictionary
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine:edge
-    networks:
-      - name: "mynetwork"
-        aliases:
-          - "mynetwork_alias"
-        options:
-          foo: bar
-
-- name: Set secrets
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine:edge
-    secrets:
-      - secret_name: mysecret_name
-        filename: "/run/secrets/secret.txt"
-
-- name: Start service with healthcheck
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: nginx:1.13
-    healthcheck:
-      # Check if nginx server is healthy by curl'ing the server.
-      # If this fails or timeouts, the healthcheck fails.
-      test: ["CMD", "curl", "--fail", "http://nginx.host.com"]
-      interval: 1m30s
-      timeout: 10s
-      retries: 3
-      start_period: 30s
-
-- name: Configure service resources
-  community.docker.docker_swarm_service:
-    name: myservice
-    image: alpine:edge
-    reservations:
-      cpus: 0.25
-      memory: 20M
-    limits:
-      cpus: 0.50
-      memory: 50M
-
-- name: Remove service
-  community.docker.docker_swarm_service:
-    name: myservice
-    state: absent
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - - - - -

Key

Description

-

changes

-

list / elements=string

-

List of changed service attributes if a service has been altered, [] otherwise.

-

Returned: always

-

Sample: ["container_labels", "replicas"]

-
-

rebuilt

-

boolean

-

True if the service has been recreated (removed and created)

-

Returned: always

-

Sample: true

-
-

swarm_service

-

dictionary

-

Dictionary of variables representing the current state of the service. Matches the module parameters format.

-

Note that facts are not part of registered vars but accessible directly.

-

Note that before Ansible 2.7.9, the return variable was documented as ansible_swarm_service, while the module actually returned a variable called ansible_docker_service. The variable was renamed to swarm_service in both code and documentation for Ansible 2.7.9 and Ansible 2.8.0. In Ansible 2.7.x, the old name ansible_docker_service can still be used.

-

Returned: always

-

Sample: {"args": ["3600"], "cap_add": null, "cap_drop": ["ALL"], "command": ["sleep"], "configs": null, "constraints": ["node.role == manager", "engine.labels.operatingsystem == ubuntu 14.04"], "container_labels": null, "dns": null, "dns_options": null, "dns_search": null, "endpoint_mode": null, "env": ["ENVVAR1=envvar1", "ENVVAR2=envvar2"], "force_update": null, "groups": null, "healthcheck": {"interval": 90000000000, "retries": 3, "start_period": 30000000000, "test": ["CMD", "curl", "--fail", "http://nginx.host.com"], "timeout": 10000000000}, "healthcheck_disabled": false, "hostname": null, "hosts": null, "image": "alpine:latest@sha256:b3dbf31b77fd99d9c08f780ce6f5282aba076d70a513a8be859d8d3a4d0c92b8", "labels": {"com.example.department": "Finance", "com.example.description": "Accounting webapp"}, "limit_cpu": 0.5, "limit_memory": 52428800, "log_driver": "fluentd", "log_driver_options": {"fluentd-address": "127.0.0.1:24224", "fluentd-async-connect": "true", "tag": "myservice"}, "mode": "replicated", "mounts": [{"driver_config": null, "labels": null, "no_copy": null, "propagation": null, "readonly": false, "source": "/tmp/", "target": "/remote_tmp/", "tmpfs_mode": null, "tmpfs_size": null, "type": "bind"}], "networks": null, "placement_preferences": [{"spread": "node.labels.mylabel"}], "publish": null, "read_only": null, "replicas": 1, "replicas_max_per_node": 1, "reserve_cpu": 0.25, "reserve_memory": 20971520, "restart_policy": "on-failure", "restart_policy_attempts": 3, "restart_policy_delay": 5000000000, "restart_policy_window": 120000000000, "secrets": null, "stop_grace_period": null, "stop_signal": null, "tty": null, "update_delay": 10000000000, "update_failure_action": null, "update_max_failure_ratio": null, "update_monitor": null, "update_order": "stop-first", "update_parallelism": 2, "user": null, "working_dir": null}

-
-
-

Authors

-
    -
  • Dario Zanzico (@dariko)

  • -
  • Jason Witkowski (@jwitko)

  • -
  • Hannes Ljungberg (@hannseman)

  • -
  • Piotr Wojciechowski (@wojciechowskipiotr)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_volume_info_module.html b/pr/573/docker_volume_info_module.html deleted file mode 100644 index 8168c858..00000000 --- a/pr/573/docker_volume_info_module.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - community.docker.docker_volume_info module – Retrieve facts about Docker volumes — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_volume_info module – Retrieve facts about Docker volumes

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_volume_info.

-
- -
-

Synopsis

-
    -
  • Performs largely the same function as the docker volume inspect CLI subcommand.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-
-

name

-

aliases: volume_name

-

string / required

-

Name of the volume to inspect.

-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

This action does not modify state.

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: N/A

-

This action does not modify state.

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Get infos on volume
-  community.docker.docker_volume_info:
-    name: mydata
-  register: result
-
-- name: Does volume exist?
-  ansible.builtin.debug:
-    msg: "The volume {{ 'exists' if result.exists else 'does not exist' }}"
-
-- name: Print information about volume
-  ansible.builtin.debug:
-    var: result.volume
-  when: result.exists
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - - - - -

Key

Description

-

exists

-

boolean

-

Returns whether the volume exists.

-

Returned: always

-

Sample: true

-
-

volume

-

dictionary

-

Volume inspection results for the affected volume.

-

Will be none if volume does not exist.

-

Returned: success

-

Sample: {"CreatedAt": "2018-12-09T17:43:44+01:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/ansible-test-bd3f6172/_data", "Name": "ansible-test-bd3f6172", "Options": {}, "Scope": "local"}

-
-
-

Authors

-
    -
  • Felix Fontein (@felixfontein)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docker_volume_module.html b/pr/573/docker_volume_module.html deleted file mode 100644 index 060ed35c..00000000 --- a/pr/573/docker_volume_module.html +++ /dev/null @@ -1,544 +0,0 @@ - - - - - - - community.docker.docker_volume module – Manage Docker volumes — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.docker_volume module – Manage Docker volumes

-
-

Note

-

This module is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker. -You need further requirements to be able to use this module, -see Requirements for details.

-

To use it in a playbook, specify: community.docker.docker_volume.

-
- -
-

Synopsis

-
    -
  • Create/remove Docker volumes.

  • -
  • Performs largely the same function as the docker volume CLI subcommand.

  • -
-
-
-

Requirements

-

The below requirements are needed on the host that executes this module.

-
    -
  • Docker API >= 1.25

  • -
  • backports.ssl_match_hostname (when using TLS on Python 2)

  • -
  • paramiko (when using SSH with use_ssh_client=false)

  • -
  • pyOpenSSL (when using TLS)

  • -
  • pywin32 (when using named pipes on Windows 32)

  • -
  • requests

  • -
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Parameter

Comments

-
-

api_version

-

aliases: docker_api_version

-

string

-

The version of the Docker API running on the Docker Host.

-

Defaults to the latest version of the API supported by this collection and the docker daemon.

-

If the value is not specified in the task, the value of environment variable DOCKER_API_VERSION will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "auto"

-
-
-
-

ca_cert

-

aliases: tls_ca_cert, cacert_path

-

path

-

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file ca.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_cert

-

aliases: tls_client_cert, cert_path

-

path

-

Path to the client’s TLS certificate file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file cert.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-
-
-

client_key

-

aliases: tls_client_key, key_path

-

path

-

Path to the client’s TLS key file.

-

If the value is not specified in the task and the environment variable DOCKER_CERT_PATH is set, the file key.pem from the directory specified in the environment variable DOCKER_CERT_PATH will be used.

-
-

debug

-

boolean

-

Debug mode

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

docker_host

-

aliases: docker_url

-

string

-

The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the TCP connection string. For example, tcp://192.0.2.23:2376. If TLS is used to encrypt the connection, the module will automatically replace tcp in the connection URL with https.

-

If the value is not specified in the task, the value of environment variable DOCKER_HOST will be used instead. If the environment variable is not set, the default value will be used.

-

Default: "unix://var/run/docker.sock"

-
-

driver

-

string

-

Specify the type of volume. Docker provides the local driver, but 3rd party drivers can also be used.

-

Default: "local"

-
-

driver_options

-

dictionary

-

Dictionary of volume settings. Consult docker docs for valid options and values: https://docs.docker.com/engine/reference/commandline/volume_create/#driver-specific-options.

-

Default: {}

-
-

labels

-

dictionary

-

Dictionary of label key/values to set for the volume

-
-

recreate

-

string

-

Controls when a volume will be recreated when state is present. Please note that recreating an existing volume will cause any data in the existing volume to be lost! The volume will be deleted and a new volume with the same name will be created.

-

The value always forces the volume to be always recreated.

-

The value never makes sure the volume will not be recreated.

-

The value options-changed makes sure the volume will be recreated if the volume already exist and the driver, driver options or labels differ.

-

Choices:

-
    -
  • "always"

  • -
  • "never" ← (default)

  • -
  • "options-changed"

  • -
-
-

ssl_version

-

string

-

Provide a valid SSL version number. Default value determined by ssl.py module.

-

If the value is not specified in the task, the value of environment variable DOCKER_SSL_VERSION will be used instead.

-
-

state

-

string

-

absent deletes the volume.

-

present creates the volume, if it does not already exist.

-

Choices:

-
    -
  • "absent"

  • -
  • "present" ← (default)

  • -
-
-

timeout

-

integer

-

The maximum amount of time in seconds to wait on a response from the API.

-

If the value is not specified in the task, the value of environment variable DOCKER_TIMEOUT will be used instead. If the environment variable is not set, the default value will be used.

-

Default: 60

-
-

tls

-

boolean

-

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Note that if validate_certs is set to true as well, it will take precedence.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-

tls_hostname

-

string

-

When verifying the authenticity of the Docker Host server, provide the expected name of the server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_HOSTNAME will be used instead. If the environment variable is not set, the default value will be used.

-

Note that this option had a default value localhost in older versions. It was removed in community.docker 3.0.0.

-
-

use_ssh_client

-

boolean

-

added in community.docker 1.5.0

-

For SSH transports, use the ssh CLI tool instead of paramiko.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

validate_certs

-

aliases: tls_verify

-

boolean

-

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.

-

If the value is not specified in the task, the value of environment variable DOCKER_TLS_VERIFY will be used instead. If the environment variable is not set, the default value will be used.

-

Choices:

-
    -
  • false ← (default)

  • -
  • true

  • -
-
-
-

volume_name

-

aliases: name

-

string / required

-

Name of the volume to operate on.

-
-
-
-

Attributes

- - - - - - - - - - - - - - - - - - - - - -

Attribute

Support

Description

-

action_group

-

Action groups: community.docker.docker, docker

-

Use group/docker or group/community.docker.docker in module_defaults to set defaults for this module.

-
-

check_mode

-

Support: full

-

Can run in check_mode and return changed status prediction without modifying target.

-
-

diff_mode

-

Support: full

-

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

-
-
-
-

Notes

-
-

Note

-
    -
  • Connect to the Docker daemon by providing parameters with each task or by defining environment variables. You can define DOCKER_HOST, DOCKER_TLS_HOSTNAME, DOCKER_API_VERSION, DOCKER_CERT_PATH, DOCKER_SSL_VERSION, DOCKER_TLS, DOCKER_TLS_VERIFY and DOCKER_TIMEOUT. If you are using docker machine, run the script shipped with the product that sets up the environment. It will set these variables for you. See https://docs.docker.com/machine/reference/env/ for more details.

  • -
  • This module does not use the Docker SDK for Python to communicate with the Docker daemon. It uses code derived from the Docker SDK or Python that is included in this collection.

  • -
-
-
-
-

Examples

-
- name: Create a volume
-  community.docker.docker_volume:
-    name: volume_one
-
-- name: Remove a volume
-  community.docker.docker_volume:
-    name: volume_one
-    state: absent
-
-- name: Create a volume with options
-  community.docker.docker_volume:
-    name: volume_two
-    driver_options:
-      type: btrfs
-      device: /dev/sda2
-
-
-
-
-

Return Values

-

Common return values are documented here, the following are the fields unique to this module:

- - - - - - - - - - - -

Key

Description

-

volume

-

dictionary

-

Volume inspection results for the affected volume.

-

Returned: success

-

Sample: {}

-
-
-

Authors

-
    -
  • Alex Grönholm (@agronholm)

  • -
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/docsite/scenario_guide.html b/pr/573/docsite/scenario_guide.html deleted file mode 100644 index 200b5f15..00000000 --- a/pr/573/docsite/scenario_guide.html +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - - Docker Guide — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
- - -
- -
-

Docker Guide

-

The community.docker collection offers several modules and plugins for orchestrating Docker containers and Docker Swarm.

- -
-

Requirements

-

Most of the modules and plugins in community.docker require the Docker SDK for Python. The SDK needs to be installed on the machines where the modules and plugins are executed, and for the Python version(s) with which the modules and plugins are executed. You can use the community.general.python_requirements_info module to make sure that the Docker SDK for Python is installed on the correct machine and for the Python version used by Ansible.

-

Note that plugins (inventory plugins and connection plugins) are always executed in the context of Ansible itself. If you use a plugin that requires the Docker SDK for Python, you need to install it on the machine running ansible or ansible-playbook and for the same Python interpreter used by Ansible. To see which Python is used, run ansible --version.

-

You can install the Docker SDK for Python for Python 3.6 or later as follows:

-
$ pip install docker
-
-
-

For Python 2.7, you need to use a version between 2.0.0 and 4.4.4 since the Python package for Docker removed support for Python 2.7 on 5.0.0. You can install the specific version of the Docker SDK for Python as follows:

-
$ pip install 'docker==4.4.4'
-
-
-

Note that the Docker SDK for Python was called docker-py on PyPi before version 2.0.0. Please avoid installing this really old version, and make sure to not install both docker and docker-py. Installing both will result in a broken installation. If this happens, Ansible will detect it and inform you about it. If that happens, you must uninstall both and reinstall the correct version. If in doubt, always install docker and never docker-py.

-
-
-

Connecting to the Docker API

-

You can connect to a local or remote API using parameters passed to each task or by setting environment variables. The order of precedence is command line parameters and then environment variables. If neither a command line option nor an environment variable is found, Ansible uses the default value provided under Parameters.

-
-

Parameters

-

Most plugins and modules can be configured by the following parameters:

-
-
-
docker_host

The URL or Unix socket path used to connect to the Docker API. Defaults to unix://var/run/docker.sock. To connect to a remote host, provide the TCP connection string (for example: tcp://192.0.2.23:2376). If TLS is used to encrypt the connection to the API, then the module will automatically replace ‘tcp’ in the connection URL with ‘https’.

-
-
api_version

The version of the Docker API running on the Docker Host. Defaults to the latest version of the API supported by the Docker SDK for Python installed.

-
-
timeout

The maximum amount of time in seconds to wait on a response from the API. Defaults to 60 seconds.

-
-
tls

Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Defaults to false.

-
-
validate_certs

Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server. Default is false.

-
-
cacert_path

Use a CA certificate when performing server verification by providing the path to a CA certificate file.

-
-
cert_path

Path to the client’s TLS certificate file.

-
-
key_path

Path to the client’s TLS key file.

-
-
tls_hostname

When verifying the authenticity of the Docker Host server, provide the expected name of the server. Defaults to localhost.

-
-
ssl_version

Provide a valid SSL version number. The default value is determined by the Docker SDK for Python.

-
-
-
-
-
-

Environment variables

-

You can also control how the plugins and modules connect to the Docker API by setting the following environment variables.

-

For plugins, they have to be set for the environment Ansible itself runs in. For modules, they have to be set for the environment the modules are executed in. For modules running on remote machines, the environment variables have to be set on that machine for the user used to execute the modules with.

-
-
-
DOCKER_HOST

The URL or Unix socket path used to connect to the Docker API.

-
-
DOCKER_API_VERSION

The version of the Docker API running on the Docker Host. Defaults to the latest version of the API supported -by Docker SDK for Python.

-
-
DOCKER_TIMEOUT

The maximum amount of time in seconds to wait on a response from the API.

-
-
DOCKER_CERT_PATH

Path to the directory containing the client certificate, client key and CA certificate.

-
-
DOCKER_SSL_VERSION

Provide a valid SSL version number.

-
-
DOCKER_TLS

Secure the connection to the API by using TLS without verifying the authenticity of the Docker Host.

-
-
DOCKER_TLS_VERIFY

Secure the connection to the API by using TLS and verify the authenticity of the Docker Host.

-
-
-
-
-
-
-

Plain Docker daemon: images, networks, volumes, and containers

-

For working with a plain Docker daemon, that is without Swarm, there are connection plugins, an inventory plugin, and several modules available:

-
-
-
docker connection plugin

The community.docker.docker connection plugin uses the Docker CLI utility to connect to Docker containers and execute modules in them. It essentially wraps docker exec and docker cp. This connection plugin is supported by the ansible.posix.synchronize module.

-
-
docker_api connection plugin

The community.docker.docker_api connection plugin talks directly to the Docker daemon to connect to Docker containers and execute modules in them.

-
-
docker_containers inventory plugin

The community.docker.docker_containers inventory plugin allows you to dynamically add Docker containers from a Docker Daemon to your Ansible inventory. See Working with dynamic inventory for details on dynamic inventories.

-

The docker inventory script is deprecated. Please use the inventory plugin instead. The inventory plugin has several compatibility options. If you need to collect Docker containers from multiple Docker daemons, you need to add every Docker daemon as an individual inventory source.

-
-
docker_host_info module

The community.docker.docker_host_info module allows you to retrieve information on a Docker daemon, such as all containers, images, volumes, networks and so on.

-
-
docker_login module

The community.docker.docker_login module allows you to log in and out of a remote registry, such as Docker Hub or a private registry. It provides similar functionality to the docker login and docker logout CLI commands.

-
-
docker_prune module

The community.docker.docker_prune module allows you to prune no longer needed containers, images, volumes and so on. It provides similar functionality to the docker prune CLI command.

-
-
docker_image module

The community.docker.docker_image module provides full control over images, including: build, pull, push, tag and remove.

-
-
docker_image_info module

The community.docker.docker_image_info module allows you to list and inspect images.

-
-
docker_network module

The community.docker.docker_network module provides full control over Docker networks.

-
-
docker_network_info module

The community.docker.docker_network_info module allows you to inspect Docker networks.

-
-
docker_volume_info module

The community.docker.docker_volume_info module provides full control over Docker volumes.

-
-
docker_volume module

The community.docker.docker_volume module allows you to inspect Docker volumes.

-
-
docker_container module

The community.docker.docker_container module manages the container lifecycle by providing the ability to create, update, stop, start and destroy a Docker container.

-
-
docker_container_info module

The community.docker.docker_container_info module allows you to inspect a Docker container.

-
-
-
-
-
-

Docker Compose

-

The community.docker.docker_compose module -allows you to use your existing Docker compose files to orchestrate containers on a single Docker daemon or on Swarm. -Supports compose versions 1 and 2.

-

Next to Docker SDK for Python, you need to install docker-compose on the remote machines to use the module.

-
-
-

Docker Machine

-

The community.docker.docker_machine inventory plugin allows you to dynamically add Docker Machine hosts to your Ansible inventory.

-
-
-

Docker stack

-

The community.docker.docker_stack module module allows you to control Docker stacks. Information on stacks can be retrieved by the community.docker.docker_stack_info module, and information on stack tasks can be retrieved by the community.docker.docker_stack_task_info module.

-
-
-

Docker Swarm

-

The community.docker collection provides multiple plugins and modules for managing Docker Swarms.

-
-

Swarm management

-

One inventory plugin and several modules are provided to manage Docker Swarms:

-
-
-
docker_swarm inventory plugin

The community.docker.docker_swarm inventory plugin allows you to dynamically add all Docker Swarm nodes to your Ansible inventory.

-
-
docker_swarm module

The community.docker.docker_swarm module allows you to globally configure Docker Swarm manager nodes to join and leave swarms, and to change the Docker Swarm configuration.

-
-
docker_swarm_info module

The community.docker.docker_swarm_info module allows you to retrieve information on Docker Swarm.

-
-
docker_node module

The community.docker.docker_node module allows you to manage Docker Swarm nodes.

-
-
docker_node_info module

The community.docker.docker_node_info module allows you to retrieve information on Docker Swarm nodes.

-
-
-
-
-
-

Configuration management

-

The community.docker collection offers modules to manage Docker Swarm configurations and secrets:

-
-
-
docker_config module

The community.docker.docker_config module allows you to create and modify Docker Swarm configs.

-
-
docker_secret module

The community.docker.docker_secret module allows you to create and modify Docker Swarm secrets.

-
-
-
-
-
-

Swarm services

-

Docker Swarm services can be created and updated with the community.docker.docker_swarm_service module, and information on them can be queried by the community.docker.docker_swarm_service_info module.

-
-
- -
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/environment_variables.html b/pr/573/environment_variables.html deleted file mode 100644 index ec28be35..00000000 --- a/pr/573/environment_variables.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - Index of all Collection Environment Variables — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
- - -
- -
-

Index of all Collection Environment Variables

-

The following index documents all environment variables declared by plugins in collections. -Environment variables used by the ansible-core configuration are documented in Ansible Configuration Settings.

-
-
-ANSIBLE_DOCKER_TIMEOUT
-

Controls how long we can wait to access reading output from the container once execution started.

-

Used by: -community.docker.docker connection plugin, -community.docker.docker_api connection plugin

-
- -
-
-ANSIBLE_INVENTORY_USE_EXTRA_VARS
-

Merge extra vars into the available variables for composition (highest precedence).

-

Used by: -community.docker.docker_containers inventory plugin, -community.docker.docker_machine inventory plugin, -community.docker.docker_swarm inventory plugin

-
- -
-
-ANSIBLE_NSENTER_PID
-

PID to attach with using nsenter.

-

The default should be fine unless you are attaching as a non-root user.

-

Used by: -community.docker.nsenter connection plugin

-
- -
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/index.html b/pr/573/index.html deleted file mode 100644 index 01e8c297..00000000 --- a/pr/573/index.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - Community.Docker — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
- - -
- -
-

Community.Docker

-

Collection version 3.5.0

- -
-

Description

-

Modules and plugins for working with Docker

-

Author:

-
    -
  • Ansible Docker Working Group

  • -
-

Supported ansible-core versions:

-
    -
  • 2.11.0 or newer

  • -
-
-
-

Communication

- -
-
-
-
-

Scenario Guide

-
- -
-
-
-

Plugin Index

-

These are the plugins in the community.docker collection:

-
-

Modules

- -
-
-
-
-

Connection Plugins

- -
-
-
-
-

Inventory Plugins

- -
-
-
-
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/nsenter_connection.html b/pr/573/nsenter_connection.html deleted file mode 100644 index 6cc0646b..00000000 --- a/pr/573/nsenter_connection.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - community.docker.nsenter connection – execute on host running controller container — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • - - Edit on GitHub -
  • -
-
-
-
- - -
- -
-

community.docker.nsenter connection – execute on host running controller container

-
-

Note

-

This connection plugin is part of the community.docker collection (version 3.5.0).

-

To install it, use: ansible-galaxy collection install community.docker.

-

To use it in a playbook, specify: community.docker.nsenter.

-
-

New in community.docker 1.9.0

- -
-

Synopsis

-
    -
  • This connection plugin allows Ansible, running in a privileged container, to execute tasks on the container host instead of in the container itself.

  • -
  • This is useful for running Ansible in a pull model, while still keeping the Ansible control node containerized.

  • -
  • It relies on having privileged access to run nsenter in the host’s PID namespace, allowing it to enter the namespaces of the provided PID (default PID 1, or init/systemd).

  • -
-
-
-

Parameters

- - - - - - - - - - - -

Parameter

Comments

-

nsenter_pid

-

integer

-

PID to attach with using nsenter.

-

The default should be fine unless you are attaching as a non-root user.

-

Default: 1

-

Configuration:

-
    -
  • INI entry:

    -
    [nsenter_connection]
    -nsenter_pid = 1
    -
    -
    -
  • -
  • Environment variable: ANSIBLE_NSENTER_PID

  • -
  • Variable: ansible_nsenter_pid

  • -
-
-
-
-

Notes

-
-

Note

-
    -
  • The remote user is ignored; this plugin always runs as root.

  • -
  • This plugin requires the Ansible controller container to be launched in the following way: (1) The container image contains the nsenter program; (2) The container is launched in privileged mode; (3) The container is launched in the host’s PID namespace (--pid host).

  • -
-
-
-

Authors

-
    -
  • Jeff Goldschrafe (@jgoldschrafe)

  • -
-
-

Hint

-

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.

-
-
- -
-
- - -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/pr/573/objects.inv b/pr/573/objects.inv deleted file mode 100644 index 0785bf65..00000000 Binary files a/pr/573/objects.inv and /dev/null differ diff --git a/pr/573/search.html b/pr/573/search.html deleted file mode 100644 index ab1eab39..00000000 --- a/pr/573/search.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - Search — Community.Docker Collection documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Community.Docker Collection Docs
-
-
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
- - -
- - - - -
- -
- -
-
- - -
- -
- -
-

© Copyright Community.Docker Contributors.

-
- - - - -
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/pr/573/searchindex.js b/pr/573/searchindex.js deleted file mode 100644 index be2950e4..00000000 --- a/pr/573/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["current_container_facts_module", "docker_api_connection", "docker_compose_module", "docker_config_module", "docker_connection", "docker_container_copy_into_module", "docker_container_exec_module", "docker_container_info_module", "docker_container_module", "docker_containers_inventory", "docker_host_info_module", "docker_image_info_module", "docker_image_load_module", "docker_image_module", "docker_login_module", "docker_machine_inventory", "docker_network_info_module", "docker_network_module", "docker_node_info_module", "docker_node_module", "docker_plugin_module", "docker_prune_module", "docker_secret_module", "docker_stack_info_module", "docker_stack_module", "docker_stack_task_info_module", "docker_swarm_info_module", "docker_swarm_inventory", "docker_swarm_module", "docker_swarm_service_info_module", "docker_swarm_service_module", "docker_volume_info_module", "docker_volume_module", "docsite/scenario_guide", "environment_variables", "index", "nsenter_connection"], "filenames": ["current_container_facts_module.rst", "docker_api_connection.rst", "docker_compose_module.rst", "docker_config_module.rst", "docker_connection.rst", "docker_container_copy_into_module.rst", "docker_container_exec_module.rst", "docker_container_info_module.rst", "docker_container_module.rst", "docker_containers_inventory.rst", "docker_host_info_module.rst", "docker_image_info_module.rst", "docker_image_load_module.rst", "docker_image_module.rst", "docker_login_module.rst", "docker_machine_inventory.rst", "docker_network_info_module.rst", "docker_network_module.rst", "docker_node_info_module.rst", "docker_node_module.rst", "docker_plugin_module.rst", "docker_prune_module.rst", "docker_secret_module.rst", "docker_stack_info_module.rst", "docker_stack_module.rst", "docker_stack_task_info_module.rst", "docker_swarm_info_module.rst", "docker_swarm_inventory.rst", "docker_swarm_module.rst", "docker_swarm_service_info_module.rst", "docker_swarm_service_module.rst", "docker_volume_info_module.rst", "docker_volume_module.rst", "docsite/scenario_guide.rst", "environment_variables.rst", "index.rst", "nsenter_connection.rst"], "titles": ["community.docker.current_container_facts module \u2013 Return facts about whether the module runs in a container", "community.docker.docker_api connection \u2013 Run tasks in docker containers", "community.docker.docker_compose module \u2013 Manage multi-container Docker applications with Docker Compose.", "community.docker.docker_config module \u2013 Manage docker configs.", "community.docker.docker connection \u2013 Run tasks in docker containers", "community.docker.docker_container_copy_into module \u2013 Copy a file into a Docker container", "community.docker.docker_container_exec module \u2013 Execute command in a docker container", "community.docker.docker_container_info module \u2013 Retrieves facts about docker container", "community.docker.docker_container module \u2013 manage Docker containers", "community.docker.docker_containers inventory \u2013 Ansible dynamic inventory plugin for Docker containers", "community.docker.docker_host_info module \u2013 Retrieves facts about docker host and lists of objects of the services.", "community.docker.docker_image_info module \u2013 Inspect docker images", "community.docker.docker_image_load module \u2013 Load docker image(s) from archives", "community.docker.docker_image module \u2013 Manage docker images", "community.docker.docker_login module \u2013 Log into a Docker registry.", "community.docker.docker_machine inventory \u2013 Docker Machine inventory source", "community.docker.docker_network_info module \u2013 Retrieves facts about docker network", "community.docker.docker_network module \u2013 Manage Docker networks", "community.docker.docker_node_info module \u2013 Retrieves facts about docker swarm node from Swarm Manager", "community.docker.docker_node module \u2013 Manage Docker Swarm node", "community.docker.docker_plugin module \u2013 Manage Docker plugins", "community.docker.docker_prune module \u2013 Allows to prune various docker objects", "community.docker.docker_secret module \u2013 Manage docker secrets.", "community.docker.docker_stack_info module \u2013 Return information on a docker stack", "community.docker.docker_stack module \u2013 docker stack module", "community.docker.docker_stack_task_info module \u2013 Return information of the tasks on a docker stack", "community.docker.docker_swarm_info module \u2013 Retrieves facts about Docker Swarm cluster.", "community.docker.docker_swarm inventory \u2013 Ansible dynamic inventory plugin for Docker swarm nodes.", "community.docker.docker_swarm module \u2013 Manage Swarm cluster", "community.docker.docker_swarm_service_info module \u2013 Retrieves information about docker services from a Swarm Manager", "community.docker.docker_swarm_service module \u2013 docker swarm service", "community.docker.docker_volume_info module \u2013 Retrieve facts about Docker volumes", "community.docker.docker_volume module \u2013 Manage Docker volumes", "Docker Guide", "Index of all Collection Environment Variables", "Community.Docker", "community.docker.nsenter connection \u2013 execute on host running controller container"], "terms": {"thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "part": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36], "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "5": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "To": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "instal": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36], "ansibl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36], "galaxi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36], "playbook": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "specifi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36], "new": [0, 1, 2, 3, 5, 6, 8, 9, 12, 15, 17, 19, 20, 22, 24, 28, 30, 32, 36], "1": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "podman": 0, "attempt": [0, 8, 11, 15], "best": 0, "effort": 0, "detect": [0, 2, 8, 27, 28, 33], "There": 0, "might": [0, 2, 3, 6, 8, 9, 13, 15, 18, 19, 22, 26, 27, 28, 29, 30], "special": [0, 8, 10, 27], "case": [0, 8, 10, 30], "where": [0, 2, 3, 5, 8, 11, 13, 15, 22, 30, 33], "doe": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32], "work": [0, 2, 3, 5, 8, 19, 22, 30, 33, 35], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36], "encount": [0, 8], "one": [0, 2, 3, 4, 6, 8, 11, 12, 13, 18, 19, 22, 26, 28, 29, 30], "pleas": [0, 2, 3, 6, 8, 17, 18, 19, 22, 26, 28, 29, 30, 32, 33], "file": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35], "an": [0, 1, 2, 3, 4, 5, 7, 8, 9, 11, 13, 15, 16, 17, 22, 27, 28, 30, 32, 33], "issu": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "doc": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "test": [0, 3, 8, 16, 22, 30, 31], "And": 0, "anoth": [0, 8], "support": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35], "descript": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "check_mod": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "full": [0, 2, 3, 5, 7, 8, 10, 11, 14, 16, 17, 18, 19, 20, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33], "action": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32], "modifi": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33], "state": [0, 2, 3, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34], "chang": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33], "statu": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "predict": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "without": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "target": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "diff_mod": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "n": [0, 7, 10, 11, 16, 18, 23, 24, 25, 26, 29, 31], "A": [0, 2, 3, 7, 8, 9, 10, 11, 13, 15, 16, 18, 21, 22, 23, 25, 26, 27, 29, 30, 31], "Will": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "detail": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "what": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "ha": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33], "possibli": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "need": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "when": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "diff": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "mode": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 36], "ansible_fact": 0, "dictionari": [0, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "updat": [0, 3, 8, 13, 14, 17, 19, 22, 28, 30, 33], "exist": [0, 1, 2, 3, 4, 5, 7, 8, 11, 13, 14, 16, 17, 20, 22, 28, 29, 30, 31, 32, 33], "host": [0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35], "name": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "get": [0, 5, 7, 8, 10, 15, 16, 18, 26, 29, 31], "current": [0, 2, 3, 5, 7, 8, 14, 16, 18, 22, 24, 26, 28, 29, 30], "print": [0, 6, 7, 8, 12, 16, 31], "inform": [0, 2, 5, 7, 8, 10, 12, 16, 18, 19, 21, 26, 28, 31, 33, 35], "builtin": [0, 2, 3, 5, 7, 10, 11, 12, 16, 18, 19, 22, 23, 25, 26, 28, 29, 30, 31], "debug": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32], "msg": [0, 7, 12, 16, 26, 31], "id": [0, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 16, 17, 18, 19, 21, 22, 25, 28, 30], "ansible_module_container_id": 0, "ansible_module_running_in_contain": 0, "ar": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "ad": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "hostvar": 0, "referenc": 0, "just": [0, 33], "like": [0, 6, 8, 17, 28, 30], "ani": [0, 5, 8, 13, 15, 24, 30, 32], "other": [0, 2, 6, 8, 9, 15, 18, 19, 26, 27, 28, 29, 30], "thei": [0, 5, 8, 9, 15, 17, 27, 30, 33], "do": [0, 5, 8, 9, 13, 15], "regist": [0, 2, 6, 7, 10, 11, 12, 16, 18, 19, 23, 25, 26, 29, 30, 31], "order": [0, 1, 2, 4, 6, 8, 9, 15, 27, 30, 33, 36], "them": [0, 2, 8, 14, 15, 17, 18, 19, 26, 28, 29, 33], "kei": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "string": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36], "empti": [0, 2, 6, 8, 9, 11, 15, 17, 18, 19, 27], "wa": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "alwai": [0, 2, 3, 7, 8, 9, 10, 11, 13, 15, 16, 18, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 36], "ansible_module_container_typ": 0, "environ": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 36], "non": [0, 5, 7, 8, 13, 16, 17, 21, 34, 36], "identifi": [0, 7, 8, 16, 18], "indic": [0, 5, 15, 26], "ran": [0, 6], "insid": [0, 1, 4, 5, 6, 8, 9, 30], "regular": 0, "azure_pipelin": 0, "azur": 0, "pipelin": 0, "seem": [0, 5], "longer": [0, 2, 8, 18, 19, 26, 28, 29, 33], "report": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "github_act": 0, "github": [0, 8], "It": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33, 36], "sinc": [0, 6, 8, 9, 15, 27, 33], "2": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "4": [0, 2, 3, 5, 8, 10, 17, 18, 19, 22, 26, 27, 28, 29, 30, 33], "onli": [0, 2, 3, 5, 6, 8, 9, 10, 11, 13, 14, 17, 18, 19, 21, 22, 26, 28, 29, 30], "boolean": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32], "abl": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32], "felix": [0, 1, 5, 6, 7, 8, 9, 12, 21, 31], "fontein": [0, 1, 5, 6, 7, 8, 9, 12, 21, 31], "felixfontein": [0, 1, 5, 6, 7, 8, 9, 12, 21, 31], "tracker": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "repositori": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "submit": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "bug": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "request": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "featur": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "plugin": [1, 4, 5, 15, 30, 33, 34, 36], "further": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32], "see": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "command": [1, 2, 4, 8, 14, 23, 24, 25, 30, 33, 35], "put": [1, 4], "fetch": [1, 4, 15], "librari": 1, "interact": [1, 8], "directli": [1, 2, 3, 4, 6, 22, 30, 33], "daemon": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "instead": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 36], "cli": [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "want": [1, 4, 8, 11, 13, 17], "below": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32], "local": [1, 2, 7, 8, 9, 11, 13, 14, 15, 16, 17, 20, 27, 31, 32, 33], "control": [1, 3, 4, 8, 9, 14, 15, 17, 22, 27, 32, 33, 34, 35], "node": [1, 5, 8, 9, 15, 17, 23, 24, 25, 26, 28, 30, 33, 35, 36], "execut": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35], "pywin32": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 31, 32], "pipe": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 31, 32], "window": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 30, 31, 32], "32": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 28, 30, 31, 32], "paramiko": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "ssh": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "use_ssh_cli": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "fals": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "pyopenssl": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 31, 32], "tl": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "backport": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 31, 32], "ssl_match_hostnam": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 31, 32], "python": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "comment": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36], "api_vers": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "alias": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "docker_api_vers": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "api": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "default": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36], "latest": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "If": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "valu": [1, 4, 9, 15, 27, 33], "variabl": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 36], "set": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34], "auto": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "configur": [1, 2, 3, 4, 5, 8, 9, 13, 14, 15, 18, 19, 22, 26, 27, 28, 29, 30, 34, 36], "ansible_docker_api_vers": 1, "ca_cert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "tls_ca_cert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "cacert_path": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "path": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "ca": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "certif": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "perform": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "server": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "verif": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "provid": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 36], "docker_cert_path": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "pem": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "from": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 32, 33, 34, 35], "directori": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "ansible_docker_ca_cert": 1, "client_cert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "tls_client_cert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "cert_path": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "client": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "cert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "ansible_docker_client_cert": 1, "client_kei": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "tls_client_kei": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "key_path": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "ansible_docker_client_kei": 1, "container_timeout": [1, 4], "integ": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 36], "how": [1, 4, 5, 8, 9, 15, 17, 30, 33, 34], "long": [1, 2, 4, 7, 8, 16, 34], "we": [1, 4, 8, 9, 13, 15, 17, 27, 34], "wait": [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 34], "access": [1, 4, 17, 30, 34, 36], "read": [1, 2, 3, 4, 8, 9, 22, 27, 30, 34], "output": [1, 2, 4, 6, 7, 8, 10, 13, 15, 16, 18, 26, 29, 34], "onc": [1, 4, 30, 34], "start": [1, 2, 4, 8, 9, 15, 27, 30, 33, 34], "10": [1, 2, 3, 4, 8, 20, 22, 26, 27, 28, 30], "ini": [1, 4, 9, 15, 27, 36], "entri": [1, 4, 8, 9, 15, 18, 19, 27, 28, 36], "timeout": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "docker_connect": [1, 4], "ansible_timeout": [1, 4], "ansible_docker_timeout": [1, 4, 34], "argument": [1, 4, 6, 13, 30], "choic": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32], "true": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32], "docker_host": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "docker_url": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "url": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "unix": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "socket": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "remot": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 36], "tcp": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "For": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 36], "exampl": [1, 4, 33, 36], "192": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "23": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "2376": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "encrypt": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "modul": [1, 9, 27, 33], "automat": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "replac": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "http": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "var": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34], "sock": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "ansible_docker_docker_host": 1, "remote_addr": [1, 4, 28], "inventory_hostnam": [1, 4], "ansible_host": [1, 4, 9, 15, 27], "ansible_docker_host": [1, 4], "remote_us": [1, 4], "user": [1, 4, 5, 6, 7, 8, 11, 14, 15, 19, 28, 30, 33, 34, 35, 36], "ansible_remote_us": [1, 4], "ansible_us": [1, 4, 15], "ansible_docker_us": [1, 4], "keyword": [1, 4], "ssl_version": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "valid": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "ssl": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "number": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "determin": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "py": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "docker_ssl_vers": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "ansible_docker_ssl_vers": 1, "maximum": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "amount": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "time": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "second": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "respons": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "docker_timeout": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "60": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "secur": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "verifi": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "authent": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "validate_cert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "well": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "take": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "preced": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 34], "docker_tl": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "ansible_docker_tl": 1, "tls_hostnam": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "expect": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "docker_tls_hostnam": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "option": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "had": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "localhost": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "older": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "remov": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 29, 30, 31, 32, 33], "ansible_docker_tls_hostnam": 1, "transport": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "tool": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "tls_verifi": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "docker_tls_verifi": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "ansible_docker_validate_cert": 1, "each": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 36], "defin": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "machin": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 35], "script": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33], "ship": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "product": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32], "up": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 36], "com": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "refer": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 29, 30, 31, 32], "env": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 29, 30, 31, 32], "more": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "sdk": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33], "code": [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21, 30, 31, 32], "deriv": [1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 27, 31, 32], "includ": [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 27, 31, 32, 33], "type": [1, 4, 6, 8, 9, 10, 15, 17, 26, 27, 30, 32, 36], "have": [1, 4, 8, 9, 15, 17, 18, 24, 27, 28, 30, 33, 36], "low": [1, 4, 9, 15, 27, 36], "high": [1, 4, 8, 9, 15, 27, 36], "prioriti": [1, 4, 9, 15, 27, 36], "lower": [1, 4, 9, 15, 27, 36], "list": [1, 2, 4, 6, 8, 9, 11, 12, 13, 15, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 30, 33, 35, 36], "overrid": [1, 2, 4, 8, 9, 15, 24, 27, 30, 36], "higher": [1, 4, 9, 15, 27, 36], "shutdown": 2, "scale": 2, "servic": [2, 8, 9, 17, 23, 24, 26, 35], "yml": [2, 9, 11, 15, 24, 27], "yaml": [2, 6, 8, 9, 15, 24, 27, 30], "inlin": 2, "definit": [2, 24], "check": [2, 5, 8, 11, 13, 14, 28, 30, 33], "call": [2, 8, 11, 30, 33], "docker_servic": 2, "befor": [2, 3, 5, 8, 11, 14, 22, 24, 30, 33], "8": [2, 5, 8, 9, 11, 13, 20, 30], "usag": [2, 8, 10, 11, 30, 35], "did": [2, 8, 11], "25": [2, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "been": [2, 3, 8, 9, 18, 19, 22, 24, 26, 28, 29, 30], "supersed": [2, 3, 18, 19, 22, 26, 28, 29, 30], "here": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "both": [2, 3, 8, 10, 11, 18, 19, 22, 26, 28, 29, 30, 33], "should": [2, 3, 5, 8, 9, 15, 18, 19, 22, 26, 27, 28, 29, 30, 34, 36], "same": [2, 8, 9, 17, 18, 19, 20, 26, 28, 29, 31, 32, 33], "also": [2, 5, 8, 10, 11, 13, 17, 18, 19, 26, 28, 29, 30, 32, 33], "uninstal": [2, 18, 19, 26, 28, 29, 33], "function": [2, 3, 14, 17, 18, 19, 20, 22, 26, 28, 29, 30, 31, 32, 33], "reinstal": [2, 18, 19, 26, 28, 29, 33], "pyyaml": [2, 24], "11": [2, 9, 15, 27, 35], "7": [2, 3, 4, 8, 11, 13, 22, 27, 30, 33], "run": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35], "task": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "build": [2, 9, 10, 13, 15, 27, 33], "present": [2, 3, 5, 8, 10, 13, 14, 17, 20, 22, 24, 28, 30, 32], "imag": [2, 7, 8, 9, 10, 15, 21, 24, 25, 30, 35, 36], "prior": [2, 8, 17, 30], "pull": [2, 8, 11, 13, 33, 36], "rebuilt": [2, 30], "dockerfil": [2, 8, 13, 30, 33], "content": [2, 5, 24, 28], "nocach": [2, 13], "ignor": [2, 8, 9, 15, 18, 19, 27, 36], "cach": [2, 8, 10, 13, 21], "recreat": [2, 3, 8, 17, 22, 30, 32], "unless": [2, 3, 8, 10, 22, 26, 34, 36], "never": [2, 24, 32, 33], "describ": [2, 30], "network": [2, 8, 9, 10, 13, 21, 30, 35], "volum": [2, 7, 8, 10, 11, 21, 26, 30, 35], "mutual": [2, 3, 5, 9, 15, 22, 27], "exclus": [2, 3, 5, 9, 15, 22, 27], "project_src": 2, "depend": [2, 8, 10, 13, 18, 19, 26, 28], "whether": [2, 6, 7, 8, 9, 10, 11, 13, 15, 16, 21, 26, 29, 30, 31, 35], "connect": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 34], "env_fil": [2, 8, 30], "9": [2, 8, 11, 30, 36], "By": [2, 8, 9, 10, 15, 17, 27], "load": [2, 8, 13, 35], "locat": 2, "under": [2, 33], "custom": [2, 8, 14, 17, 30], "rel": [2, 8, 13], "greater": 2, "28": [2, 30], "rather": [2, 8], "than": [2, 8, 15, 18, 19, 21, 30], "element": [2, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 30], "merg": [2, 9, 15, 19, 27, 34], "given": [2, 8, 9, 12, 15, 27], "hostname_check": 2, "hostnam": [2, 7, 8, 11, 13, 17, 18, 19, 30], "against": [2, 9], "dure": [2, 8, 9, 13, 20, 30], "process": [2, 8, 13, 30], "profil": 2, "enabl": [2, 8, 13, 17, 20], "equival": [2, 8], "project_nam": 2, "project": [2, 35], "taken": [2, 8], "basenam": 2, "differ": [2, 5, 8, 10, 17, 24, 26, 28, 32], "leav": [2, 8, 17, 28, 33], "unchang": [2, 19, 30], "forc": [2, 3, 5, 8, 13, 14, 17, 22, 28, 30, 32], "all": [2, 5, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 24, 27, 28, 30, 33], "smart": 2, "remove_imag": 2, "absent": [2, 3, 7, 8, 13, 14, 16, 17, 20, 22, 24, 28, 30, 32], "remove_orphan": 2, "remove_volum": 2, "data": [2, 3, 5, 6, 8, 11, 22, 28, 30, 32], "restart": [2, 8, 30], "pair": [2, 8, 30], "count": [2, 8], "resp": [2, 14], "stop": [2, 8, 9, 30, 33], "subset": [2, 10, 17, 26], "which": [2, 3, 6, 8, 9, 10, 13, 14, 15, 22, 26, 27, 30, 33], "oper": [2, 13, 17, 19, 20, 28, 30, 32, 33], "desir": [2, 8, 28], "down": 2, "17": 2, "first": [2, 3, 8, 9, 22, 30], "suppos": 2, "creat": [2, 3, 8, 9, 11, 13, 15, 16, 17, 21, 22, 27, 28, 30, 32, 33], "attach": [2, 8, 16, 17, 34, 36], "alreadi": [2, 8, 13, 17, 19, 20, 28, 32], "default_grace_period": 2, "particular": [2, 10], "suddenli": 2, "later": [2, 3, 22, 33], "action_group": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "group": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 35], "module_default": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32], "none": [2, 3, 6, 7, 8, 12, 13, 14, 16, 19, 21, 22, 24, 28, 29, 30, 31], "addit": [2, 3, 5, 8, 18, 19, 22, 26, 27, 28, 29, 30], "packag": [2, 3, 18, 19, 22, 26, 28, 29, 30, 33], "newer": [2, 3, 8, 18, 19, 22, 26, 27, 28, 29, 30, 35], "done": [2, 3, 13, 18, 19, 22, 26, 28, 29, 30], "pip": [2, 3, 18, 19, 22, 26, 28, 29, 30, 33], "allow": [2, 3, 4, 8, 10, 13, 14, 18, 19, 20, 22, 26, 28, 29, 30, 33, 35, 36], "veri": [2, 3, 8, 18, 19, 22, 26, 28, 29, 30], "few": [2, 3, 18, 19, 22, 26, 28, 29, 30, 33], "In": [2, 3, 8, 18, 19, 22, 26, 28, 29, 30], "gener": [2, 3, 8, 9, 15, 18, 19, 22, 26, 27, 28, 29, 30, 33, 35], "home": [2, 3, 5, 13, 18, 19, 22, 26, 28, 29, 30], "config": [2, 7, 8, 11, 13, 14, 16, 17, 18, 19, 22, 26, 28, 29, 30, 33, 35], "json": [2, 3, 8, 13, 14, 15, 18, 19, 22, 26, 28, 29, 30], "docker_config": [2, 18, 19, 22, 26, 28, 29, 30, 33, 35], "otherwis": [2, 3, 5, 8, 9, 15, 18, 19, 22, 26, 27, 28, 29, 30], "django": 2, "follow": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36], "flask": 2, "gather_fact": 2, "tear": 2, "again": [2, 3, 8, 22], "assert": [2, 8, 11, 13, 30], "web": [2, 24, 30], "flask_web_1": 2, "db": [2, 8], "flask_db_1": 2, "v2": 2, "postgr": [2, 8], "playbook_dir": 2, "runserv": 2, "8000": [2, 8], "port": [2, 8, 9, 13, 25, 27, 28, 30], "depends_on": 2, "v1": [2, 7, 8, 13, 14], "common": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "document": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 34], "field": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "uniqu": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "complex": 2, "service_nam": 2, "short_id": 2, "short": [2, 7, 8, 9, 16], "built_imag": 2, "built": [2, 13], "hash": [2, 3, 8, 13, 22], "pulled_imag": 2, "map": [2, 3, 8, 9, 13, 15, 17, 22, 27, 30], "success": [2, 3, 5, 6, 8, 10, 12, 13, 17, 19, 20, 22, 26, 28, 31, 32], "container_nam": [2, 8], "format": [2, 8, 9, 11, 13, 27, 28, 30], "project_service_": 2, "cmd": [2, 7, 8, 11, 30], "One": [2, 3, 5, 9, 22, 33], "sampl": [2, 3, 6, 7, 8, 11, 12, 13, 14, 16, 17, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32], "label": [2, 3, 7, 8, 10, 11, 16, 17, 19, 22, 27, 28, 30, 31, 32], "meta": [2, 3, 22], "assign": [2, 3, 8, 9, 19, 22, 30], "null": [2, 7, 8, 11, 16, 30, 31], "member": 2, "globalipv6": 2, "ipv6": [2, 8, 17], "address": [2, 8, 9, 13, 17, 28, 30], "globalipv6prefixlen": 2, "subnet": [2, 16, 17, 28], "length": [2, 8, 11, 28], "ipaddress": 2, "ip": [2, 8, 9, 13, 17, 30], "172": [2, 8, 17, 27], "ipprefixlen": 2, "bit": 2, "16": [2, 8, 27], "macaddress": 2, "mac": [2, 8, 17], "virtual": 2, "nic": 2, "02": 2, "42": 2, "ac": 2, "00": [2, 16, 31], "regard": 2, "disposit": 2, "chri": [2, 3, 8, 11, 13, 14, 17, 22], "houseknecht": [2, 3, 8, 11, 13, 14, 17, 22], "chouseknecht": [2, 3, 8, 11, 13, 14, 17, 22], "swarm": [3, 17, 22, 24, 25, 35], "similar": [3, 5, 7, 14, 16, 22, 33], "rm": [3, 13, 22], "add": [3, 6, 8, 9, 13, 14, 15, 17, 19, 22, 24, 27, 28, 30, 33], "metadata": [3, 9, 15, 19, 22, 27, 28], "ansible_kei": [3, 22], "represent": [3, 22], "futur": [3, 13, 14, 22], "30": [3, 8, 28, 30], "6": [3, 8, 33], "data_src": [3, 22], "data_is_b64": [3, 22], "assum": [3, 5, 8, 13, 22], "base64": [3, 5, 22], "encod": [3, 5, 22], "decod": [3, 5, 22], "being": [3, 5, 13, 22, 28], "binari": [3, 5, 22], "better": [3, 5, 22], "keep": [3, 5, 8, 22, 28, 36], "let": [3, 5, 22], "even": [3, 8, 17, 20, 22, 28, 30], "rolling_vers": [3, 22], "increas": [3, 22], "append": [3, 6, 13, 17, 22], "contain": [3, 10, 11, 13, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 34, 35], "ansible_vers": [3, 22], "template_driv": 3, "golang": 3, "go": [3, 33], "templat": [3, 6, 8], "versions_to_keep": [3, 22], "old": [3, 4, 8, 22, 30, 33], "extran": [3, 22], "delet": [3, 17, 20, 21, 22, 24, 32], "after": [3, 8, 9, 13, 15, 19, 22, 24, 27, 28, 30], "everyth": [3, 5, 21, 22], "foo": [3, 6, 8, 9, 22, 30], "becaus": [3, 8, 9, 15, 22, 27, 28], "re": [3, 8, 14, 17, 22], "prevent": [3, 6, 8, 22], "happen": [3, 8, 22, 33], "lookup": [3, 8, 22], "b64encod": [3, 22], "goodnight": [3, 22], "everyon": [3, 22], "bar": [3, 8, 22, 30], "baz": [3, 22], "caus": [3, 8, 22, 32], "two": [3, 8, 22], "No": [3, 22], "though": [3, 13, 22], "miss": [3, 8, 22], "monkei": [3, 22], "creation": [3, 8, 17, 22, 30], "config_id": [3, 30], "object": [3, 5, 15, 22, 26, 35], "hzehrmyjigmcp2gb6nlhmjqcv": [3, 22], "config_nam": [3, 30], "awesome_config": 3, "john": 3, "hu": 3, "ushuz": 3, "prefer": [4, 8, 13, 30], "docker_api": [4, 9, 33, 34, 35], "docker_extra_arg": 4, "extra": [4, 9, 13, 15, 27, 34], "pass": [4, 6, 8, 9, 28, 30, 33], "line": [4, 6, 8, 33], "extra_cli_arg": 4, "ansible_docker_extra_arg": 4, "too": 4, "itself": [4, 33, 36], "lorin": 4, "hochestein": 4, "leendert": 4, "brouwer": 4, "cp": [5, 33], "must": [5, 6, 8, 13, 18, 19, 26, 28, 29, 30, 33], "owner_id": 5, "group_id": 5, "necessari": 5, "bin": [5, 6, 7, 8, 11], "sh": [5, 11], "shell": [5, 8, 30], "correspond": [5, 8, 10, 13, 28, 30], "container_path": 5, "absolut": 5, "plan": 5, "pre": 5, "content_is_b64": 5, "risk": 5, "interpret": [5, 33], "utf": 5, "corrupt": 5, "flag": [5, 26], "filesystem": [5, 8, 30], "write": [5, 8], "idempot": [5, 8, 28], "destin": [5, 8], "try": [5, 8, 13, 17, 24], "match": [5, 7, 8, 10, 13, 16, 18, 26, 29, 30], "download": [5, 13], "compar": [5, 8], "upload": 5, "disk": [5, 10, 21], "avail": [5, 8, 9, 13, 15, 19, 26, 27, 30, 33, 34], "local_follow": 5, "tree": 5, "system": [5, 8, 10], "owner": [5, 30], "manag": [5, 24, 26, 27, 30, 35], "transfer": 5, "comput": 5, "max_file_size_for_diff": 5, "core": [5, 8, 9, 15, 27, 34, 35], "larg": [5, 17, 20, 31, 32], "mydata": [5, 7, 8, 16, 31], "txt": [5, 30], "input": [5, 9, 15, 27], "runm": 5, "o": [5, 8, 9, 11, 13, 15, 27], "root": [5, 6, 8, 30, 34, 36], "0o755": 5, "readabl": 5, "writabl": 5, "actual": [5, 19, 30], "argv": 6, "quot": [6, 8, 30], "exactli": 6, "chdir": 6, "detach": [6, 8], "synchron": [6, 33], "asynchron": 6, "stdin": [6, 8], "cannot": [6, 8, 10, 15, 17], "stdout": [6, 13], "stderr": 6, "rc": 6, "respect": [6, 14], "pars": [6, 8, 30], "parser": [6, 8, 30], "avoid": [6, 8, 30, 33], "loss": [6, 8, 30], "jinja2": [6, 8, 9, 15, 27], "convert": [6, 8, 9, 13, 27], "back": [6, 8, 30], "correct": [6, 8, 33], "wai": [6, 8, 9, 13, 36], "stdin_add_newlin": 6, "newlin": 6, "strip_empty_end": 6, "strip": 6, "end": [6, 9, 15, 27], "result": [6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 20, 23, 25, 26, 29, 31, 32, 33], "tty": [6, 7, 8, 11, 30], "alloc": [6, 8, 30], "simpl": 6, "bash": 6, "c": [6, 11], "l": [6, 10, 26], "lah": 6, "dev": [6, 8, 32], "stderr_lin": 6, "exec_id": 6, "249d9e3075655baf705ed8f40488c5e9434049cf3431976f1bfdb73741c574c5": 6, "exit": [6, 8, 30], "standard": [6, 15], "error": [6, 9, 10, 15, 25, 26, 27], "essenti": [7, 10, 16, 18, 29, 33], "inspect": [7, 8, 9, 12, 13, 16, 17, 18, 20, 29, 31, 32, 33, 35], "docker_contain": [7, 17, 33, 34, 35], "mai": [7, 8, 16, 24, 27, 30], "info": [7, 10, 16, 18, 23, 25, 26, 29, 31], "els": [7, 16, 31], "repres": [7, 8, 10, 16, 18, 26, 29, 30], "apparmorprofil": [7, 8], "arg": [7, 8, 13, 30], "attachstderr": [7, 8, 11], "attachstdin": [7, 8, 11], "attachstdout": [7, 8, 11], "usr": [7, 8, 11], "supervisord": [7, 8], "domainnam": [7, 8, 11], "entrypoint": [7, 8, 11], "sbin": [7, 8, 11], "exposedport": [7, 8, 11], "443": [7, 8], "80": [7, 8], "8e47bf643eb9": [7, 8], "lnmp_nginx": [7, 8], "onbuild": [7, 8, 11], "openstdin": [7, 8, 11], "stdinonc": [7, 8, 11], "tmp": [7, 8, 14, 30], "lnmp": [7, 8], "nginx": [7, 8, 13, 24, 30], "site": [7, 8], "log": [7, 8, 13, 28, 30, 33, 35], "life": 8, "cycl": 8, "view": 8, "auto_remov": 8, "side": [8, 28], "container_default_behavior": 8, "compat": [8, 9, 33], "blkio_weight": 8, "block": [8, 17, 26], "io": [8, 14], "weight": [8, 13], "between": [8, 24, 28, 30, 33], "1000": 8, "cap_drop": [8, 30], "capabl": [8, 30], "drop": [8, 30], "cap": 8, "compos": [8, 9, 15, 24, 27, 35], "cap_add": [8, 30], "cgroup_par": 8, "parent": [8, 9, 11, 15, 27], "cgroup": 8, "cgroupns_mod": 8, "namespac": [8, 23, 36], "simpli": 8, "cgroupn": 8, "privat": [8, 13, 14, 30, 33], "cleanup": 8, "either": [8, 13, 18, 28, 30], "were": 8, "split": 8, "comma": 8, "command_handl": 8, "handl": 8, "behavior": 8, "consid": [8, 13, 17, 21, 28], "rule": 8, "relat": 8, "until": [8, 10, 21, 24], "kept": 8, "correctli": [8, 17], "comparison": 8, "properti": 8, "decid": 8, "strict": [8, 9, 15, 27], "allow_more_pres": 8, "equal": [8, 30], "dict": [8, 10, 26, 30], "wildcard": 8, "explicitli": 8, "variou": [8, 35], "problem": 8, "now": 8, "no_default": 8, "restor": 8, "ensur": [8, 11, 15, 17], "affect": [8, 13, 17, 20, 31, 32], "init": [8, 28, 30, 36], "memori": [8, 13, 30], "paus": [8, 19, 30], "privileg": [8, 36], "read_onli": [8, 30], "cpu_period": 8, "limit": [8, 13, 30], "cpu": [8, 13, 30], "cf": 8, "complet": [8, 19, 24], "fair": 8, "schedul": 8, "period": [8, 30], "easier": 8, "altern": [8, 9, 13], "cpu_quota": 8, "quota": 8, "cpu_shar": 8, "share": [8, 13, 30], "float": [8, 30], "much": 8, "resourc": [8, 24, 30], "mean": [8, 13, 17], "most": [8, 33], "half": 8, "cpuset_cpu": 8, "cpuset_mem": 8, "mem": 8, "default_host_ip": 8, "ipv4": [8, 17], "With": [8, 15, 17], "20": [8, 16], "bind": [8, 30], "explicit": [8, 9], "70": 8, "bridg": [8, 16, 17], "host_binding_ipv4": 8, "fall": 8, "background": 8, "disabl": [8, 13, 20, 30], "reflect": 8, "fail": [8, 10, 17, 18, 19, 24, 26, 28, 29, 30], "device_read_bp": 8, "devic": [8, 32], "rate": 8, "byte": [8, 21, 30], "per": [8, 15, 27, 30], "unit": [8, 30], "posit": [8, 13, 30], "b": [8, 30], "k": [8, 30], "kibibyt": [8, 30], "1024b": [8, 30], "m": [8, 30], "mebibyt": [8, 30], "g": [8, 30], "gibibyt": [8, 30], "t": [8, 30], "tebibyt": [8, 30], "p": [8, 26, 30], "pebibyt": [8, 30], "omit": [8, 9, 15, 27, 28, 30], "device_read_iop": 8, "device_request": 8, "gpu": 8, "top": [8, 9], "level": [8, 9], "combin": [8, 19, 28], "OR": 8, "everi": [8, 33], "AND": 8, "driver": [8, 15, 16, 17, 30, 31, 32], "tri": 8, "satisfi": 8, "sub": [8, 30], "nvidia": 8, "found": [8, 13, 14, 33], "runtim": 8, "device_id": 8, "specif": [8, 13, 17, 32, 33], "device_write_bp": 8, "device_write_iop": 8, "express": [8, 9, 15, 27], "path_on_host": 8, "path_in_contain": 8, "cgroup_permiss": 8, "dns_opt": 8, "dn": [8, 30], "dns_search_domain": 8, "search": [8, 30], "domain": [8, 30], "dns_server": 8, "overwrit": [8, 13], "etc_host": [8, 13], "etc": [8, 11, 13, 17, 30], "exposed_port": 8, "expos": [8, 30], "listen": [8, 28], "force_kil": 8, "forcekil": 8, "kill": [8, 30], "healthcheck": [8, 30], "healthi": [8, 30], "instruct": [8, 13, 30], "interv": [8, 24, 30], "start_period": [8, 30], "durat": [8, 30], "accept": [8, 15, 30], "look": [8, 30], "5h34m56": [8, 30], "1m30": [8, 30], "u": [8, 24, 30], "h": [8, 30], "retri": [8, 24, 30], "consecut": [8, 24, 30], "failur": [8, 30], "unhealthi": [8, 30], "initi": [8, 30], "health": [8, 30], "countdown": [8, 30], "item": [8, 9, 15, 27, 30], "ignore_imag": 8, "evalu": [8, 30], "registri": [8, 11, 13, 24, 30, 33, 35], "warn": [8, 15], "deprec": [8, 33], "tag": [8, 11, 13, 15, 30, 33], "image_comparison": 8, "via": [8, 17, 19, 21, 27, 30], "yet": 8, "image_label_mismatch": 8, "inherit": 8, "while": [8, 30, 36], "introduc": 8, "unexpect": 8, "base": [8, 9, 15, 24, 27], "image_name_mismatch": 8, "still": [8, 9, 15, 24, 27, 30, 33, 36], "reason": 8, "forward": [8, 30], "signal": [8, 30], "reap": [8, 30], "open": 8, "launch": [8, 33, 36], "ipc_mod": 8, "ipc": 8, "reus": 8, "within": 8, "keep_volum": 8, "retain": 8, "anonym": 8, "associ": [8, 14, 23, 25], "kernel_memori": 8, "kernel": 8, "minimum": 8, "4m": 8, "kill_sign": 8, "alia": [8, 20], "log_driv": [8, 30], "possibl": [8, 9, 10, 13, 15, 21, 26, 27, 28], "log_opt": 8, "chosen": 8, "engin": [8, 10, 26, 30, 32], "admin": 8, "overview": 8, "effect": [8, 24, 28], "mac_address": 8, "92": 8, "d0": 8, "c6": 8, "0a": 8, "29": [8, 30], "33": 8, "memory_reserv": 8, "soft": 8, "memory_swap": 8, "total": [8, 13], "swap": [8, 13], "unlimit": 8, "memory_swappi": 8, "tune": 8, "swappi": 8, "100": 8, "remain": [8, 19], "mount": [8, 30], "power": 8, "consist": 8, "deleg": 8, "no_copi": [8, 30], "popul": 8, "propag": [8, 30], "rprivat": [8, 30], "rshare": [8, 30], "slave": [8, 30], "rslave": [8, 30], "suppli": 8, "tmpfs_mode": [8, 30], "permiss": 8, "tmpf": [8, 30], "tmpfs_size": [8, 30], "size": [8, 11, 15, 30], "npipe": [8, 30], "volume_driv": 8, "volume_opt": 8, "network_mod": 8, "network_nam": [8, 17], "networks_cli_compat": 8, "least": 8, "belong": [8, 9, 13], "structur": 8, "enforc": 8, "mention": 8, "These": [8, 9, 35], "reach": 8, "ipv4_address": 8, "ipv6_address": 8, "behav": [8, 15], "afterward": 8, "oom_kil": 8, "oom": 8, "killer": 8, "oom_score_adj": 8, "score": 8, "output_log": 8, "journald": 8, "pid_mod": 8, "pid": [8, 34, 36], "pids_limit": 8, "platform": [8, 13, 24, 27], "arch": [8, 13, 27], "variant": [8, 13], "exact": 8, "break": 8, "accident": 8, "due": 8, "give": 8, "extend": [8, 26], "publish_all_port": 8, "publish": [8, 30], "published_port": [8, 30], "intact": 8, "syntax": 8, "9000": 8, "interfac": [8, 9, 28], "rang": [8, 17], "shorter": 8, "free": 8, "util": [8, 33], "dig": 8, "resolv": [8, 24, 30], "bound": 8, "point": 8, "earlier": 8, "purge_network": 8, "make": [8, 9, 11, 13, 15, 17, 27, 28, 30, 32, 33], "sure": [8, 11, 13, 17, 28, 32, 33], "removal_wait_timeout": 8, "usual": [8, 13], "fast": 8, "howev": 8, "mani": 8, "phase": 8, "restart_polici": [8, 30], "polici": [8, 30], "place": 8, "around": [8, 28], "restart_retri": 8, "security_opt": 8, "form": [8, 28], "shm_size": 8, "shm": 8, "entir": 8, "64m": 8, "move": 8, "account": [8, 14, 30], "stop_sign": [8, 30], "stop_timeout": 8, "send": [8, 24, 28], "sigkil": 8, "its": [8, 19, 30], "stoptimeout": 8, "storage_opt": 8, "storag": 8, "sysctl": 8, "pseudo": [8, 30], "ulimit": 8, "nofil": 8, "262144": 8, "usernam": [8, 14, 30], "uid": [8, 30], "groupnam": 8, "gid": [8, 30], "userns_mod": 8, "ut": 8, "style": 8, "separ": [8, 9, 15, 27], "ro": 8, "rw": 8, "nocopi": 8, "selinux": 8, "addition": 8, "z": 8, "volumes_from": 8, "working_dir": [8, 30], "partial": [8, 13], "destroi": [8, 33], "downtim": 8, "except": [8, 17, 27], "therefor": 8, "relev": 8, "busybox": [8, 25], "redi": 8, "myredi": 8, "appendonli": 8, "ye": [8, 9, 15, 27], "6379": 8, "myapplic": 8, "someus": 8, "appimag": 8, "aliasedredi": 8, "sda": 8, "xvda": 8, "rwm": 8, "8080": [8, 13], "udp": [8, 30], "9001": 8, "8081": 8, "127": [8, 9, 30], "9002": 8, "random": 8, "9003": 8, "8100": 8, "select": [8, 9, 10, 11, 13, 17, 19, 21, 26], "9010": 8, "9020": 8, "7000": 8, "7010": 8, "secret_kei": 8, "ssssh": 8, "boolean_kei": 8, "mycontain": 8, "ubuntu": [8, 30], "14": [8, 30], "04": [8, 30], "sleep": [8, 30], "infin": 8, "balanc": 8, "anotherappimag": 8, "1d": 8, "with_sequ": 8, "ohno": 8, "syslog": 8, "myservic": [8, 26, 29, 30], "my": [8, 9, 27], "514": 8, "facil": 8, "13": [8, 9, 30], "renam": [8, 30], "db_test": 8, "docker_network_nam": 8, "sleeper": 8, "testingnet": 8, "sleepyzz": 8, "testingnet2": 8, "sleepi": 8, "18": 8, "sleepyz": 8, "zzzz": 8, "agent": [8, 24, 28], "jenkinsci": 8, "jenkin": 8, "sys_tim": 8, "finer": 8, "arg1": 8, "arg2": 8, "whatev": [8, 13], "precis": 8, "ok": 8, "ii": 8, "healthstatu": 8, "proxi": [8, 13], "curl": [8, 30], "ing": [8, 30], "20m": [8, 30], "sdb": 8, "300": 8, "some": 8, "3a23c669": 8, "1f69": 8, "c64e": 8, "cf85": 8, "44e9b07e7a2a": 8, "condit": [8, 9, 15, 27, 30], "12": [8, 9, 15, 16, 20, 27, 31], "mb": 8, "backend": 8, "fabianle": 8, "org": 8, "2020": 8, "01": [8, 31], "15": [8, 11], "overlay2": 8, "xf": 8, "rootf": 8, "12m": 8, "fact": [8, 9, 15, 27, 30, 35], "zero": 8, "cove": 8, "schneider": 8, "joshua": 8, "conner": 8, "joshuaconn": 8, "pavel": [8, 13], "antonov": [8, 13], "softzilla": [8, 13], "thoma": 8, "steinbach": 8, "thomassteinbach": 8, "philipp": 8, "jandot": 8, "zfil": 8, "daan": 8, "oosterveld": 8, "dusdanig": 8, "kassian": 8, "sun": 8, "kassiansun": 8, "add_legacy_group": 9, "letter": 9, "image_": 9, "stack_": 9, "stack": [9, 30, 35], "service_": 9, "multipl": [9, 11, 12, 18, 33], "configure_docker_daemon": 9, "connection_typ": 9, "default_ip": 9, "private_ssh_port": 9, "keyed_group": [9, 15, 27], "default_valu": [9, 15, 27], "trailing_separ": [9, 15, 27], "parent_group": [9, 15, 27], "prefix": [9, 15, 27], "_": [9, 15, 27], "leading_separ": [9, 15, 27], "conjunct": [9, 15, 27], "underscor": [9, 15, 27], "lead": [9, 15, 27], "concaten": [9, 15, 27], "recogn": [9, 27], "own": [9, 27], "22": 9, "invalid": [9, 15, 27], "fatal": [9, 15, 27], "skip": [9, 15, 27], "continu": [9, 15, 27, 30], "those": [9, 15, 19, 27], "use_extra_var": [9, 15, 27], "composit": [9, 15, 27, 34], "highest": [9, 15, 27, 34], "inventory_plugin": [9, 15, 27], "ansible_inventory_use_extra_var": [9, 15, 27, 34], "verbose_output": [9, 10, 15, 26, 27], "toggl": [9, 27], "transform": 9, "docker_xxx": 9, "hostconfig": 9, "docker_hostconfig": 9, "construct": [9, 15, 27], "so": [9, 17, 30, 33], "minim": [9, 15, 27], "2375": [9, 27], "unverifi": [9, 27], "somewher": [9, 27], "primari": 9, "network_foo": 9, "networkmod": 9, "linux": [9, 11, 27], "os_linux": [9, 27], "docker_platform": 9, "fallback": 9, "export": 9, "ansible_ssh_host": 9, "ansible_ssh_port": 9, "docker_nam": 9, "queri": [10, 18, 24, 33], "contact": 10, "meet": 10, "containers_al": 10, "containers_filt": [10, 21], "filter": [10, 21, 26], "24h": [10, 21], "disk_usag": 10, "summari": 10, "space": [10, 21], "layer": 10, "sum": 10, "images_filt": [10, 21], "dangl": [10, 21], "networks_filt": [10, 21], "verbos": [10, 26], "method": [10, 26], "your": [10, 14, 17, 26, 28, 33], "_info": [10, 26], "volumes_filt": [10, 21], "mylabel": [10, 30], "key1": [10, 17, 19], "value1": [10, 17], "key2": [10, 17, 19], "value2": [10, 17], "host_info": 10, "can_talk_to_dock": [10, 26], "talk": [10, 26, 33], "basic": [10, 26], "piotr": [10, 18, 19, 26, 28, 30], "wojciechowski": [10, 18, 19, 26, 28, 30], "wojciechowskipiotr": [10, 18, 19, 26, 28, 30], "arrai": 11, "appear": 11, "docker_imag": [11, 33, 35], "docker_image_fact": 11, "singl": [11, 17, 33], "pacur": [11, 13], "cento": [11, 13], "sinatra": [11, 13], "architectur": [11, 27], "amd64": [11, 13], "5000": [11, 13, 14], "e5c68db50333": 11, "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799": 11, "lib": [11, 31], "workingdir": 11, "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610": 11, "containerconfig": 11, "nop": 11, "2016": 11, "03": 11, "08t21": 11, "08": 11, "399680378z": 11, "dockervers": 11, "graphdriv": 11, "auf": 11, "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08": 11, "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805": 11, "repodigest": 11, "repotag": 11, "virtuals": 11, "165808884": 11, "tar": [12, 13], "image_nam": 12, "join": [12, 28, 33], "hello": 12, "world": 12, "sha256": [12, 30], "e004c2cc521c95383aebb1fb5893719aa7a8eae2e7a71f316a4410784edb00a9": 12, "push": [13, 33], "archiv": [13, 35], "archive_path": 13, "direct": 13, "conveni": 13, "cache_from": 13, "container_limit": 13, "appli": [13, 19, 24, 28, 30], "cpusetcpu": 13, "cpushar": 13, "memswap": 13, "http_timeout": 13, "context": [13, 33], "intermedi": 13, "stage": 13, "final": 13, "use_config_proxi": 13, "force_abs": 13, "un": 13, "force_sourc": 13, "force_tag": 13, "load_path": 13, "registry_serv": 13, "tag_nam": 13, "ask": [13, 15], "minor": 13, "releas": 13, "hub": [13, 33], "retriev": [13, 23, 25, 28, 33, 35], "about": [13, 17, 19, 28, 33, 35], "buildkit": 13, "buildx": 13, "56": 13, "dcoppenhagan": 13, "myimag": 13, "As": 13, "repo": 13, "my_sinatra": 13, "dir": 13, "log_volum": 13, "myapp": 13, "listen_port": 13, "alpin": [13, 30], "sorin": 13, "sbarnea": 13, "ssbarnea": 13, "login": [14, 33], "credenti": 14, "store": [14, 15, 28], "config_path": 14, "dockercfg_path": 14, "password": [14, 20], "plaintext": 14, "reauthor": 14, "reauth": 14, "refresh": 14, "registry_url": 14, "index": 14, "out": [14, 30, 33], "logout": [14, 33], "dockerhub": 14, "could": 14, "rekcod": 14, "yourself": 14, "secrets3": 14, "mydockercfg": 14, "login_result": 14, "serveraddress": 14, "testus": 14, "olaf": 14, "kilian": 14, "olsaki": 14, "ansible_port": 15, "ansible_ssh_private_kei": 15, "dm_": 15, "daemon_env": 15, "silent": 15, "successfulli": 15, "token": [15, 26, 28], "running_requir": 15, "exmapl": 15, "region": 15, "docker_machine_node_attribut": 15, "digitalocean": 15, "mymachin": 15, "drivernam": 15, "digit": 15, "dm_tag": 15, "behaviour": 15, "ansible_ssh_common_arg": 15, "stricthostkeycheck": 15, "ximon": 15, "eighteen": 15, "ximon18": 15, "docker_network": [16, 33, 35], "configfrom": 16, "configonli": 16, "2018": [16, 31], "07t01": 16, "47": 16, "51": 16, "250835114": 16, "06": 16, "enableipv6": 16, "ipam": [16, 17], "gatewai": [16, 17], "168": [16, 28], "96": 16, "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a": 16, "ingress": [16, 30], "intern": [16, 17], "f2700bba": 16, "scope": [16, 17, 31], "dave": [16, 17], "bendit": [16, 17], "dbendit": [16, 17], "subcommand": [17, 20, 31, 32], "increment": 17, "canon": 17, "global": [17, 30, 33], "worker": [17, 19, 27, 28], "care": 17, "reli": [17, 36], "overlai": 17, "3rd": [17, 32], "parti": [17, 32], "driver_opt": [17, 32], "consult": [17, 32], "enable_ipv6": 17, "disconnect": 17, "restrict": 17, "extern": [17, 28, 30], "ipam_config": 17, "iprang": 17, "spell": 17, "notat": 17, "aux_address": 17, "auxiliari": 17, "cidr": [17, 28], "ipam_driv": 17, "ipam_driver_opt": 17, "reconnect": 17, "ones": [17, 19], "fix": 17, "over": [17, 33], "loop": 17, "properli": 17, "network_on": 17, "container_a": 17, "container_b": 17, "container_c": 17, "fulllist": 17, "network_two": 17, "net2": 17, "network_thre": 17, "27": [17, 30], "24": [17, 21], "26": 17, "host1": 17, "host2": 17, "network_four": 17, "network_ipv6_on": 17, "fdd1": 17, "ac8c": 17, "0557": 17, "7ce1": 17, "64": 17, "network_ipv6_two": 17, "7ce2": 17, "ben": 17, "keith": 17, "keitwb": 17, "cluster": [18, 19, 35], "self": 18, "presenc": 18, "mynod": [18, 19, 26, 28], "mynode1": 18, "mynode2": 18, "left": 18, "unreach": 18, "role": [19, 28, 30], "activ": 19, "drain": 19, "docker_swarm": [19, 33, 34, 35], "labels_st": 19, "labels_to_remov": 19, "made": [19, 30], "thierri": [19, 28], "bouvet": [19, 28], "tbouvet": [19, 28], "enable_timeout": 20, "force_remov": 20, "plugin_nam": 20, "plugin_opt": 20, "plugin_on": 20, "weavework": 20, "net": 20, "latest_releas": 20, "ipalloc_rang": 20, "weave_password": 20, "sakar": 20, "mehra": 20, "sakar97": 20, "vladimir": 20, "porshkevich": 20, "builder_cach": 21, "builder": 21, "hour": 21, "ago": 21, "builder_cache_space_reclaim": 21, "reclaim": 21, "containers_space_reclaim": 21, "images_space_reclaim": 21, "volumes_space_reclaim": 21, "secret_id": [22, 30], "secret_nam": [22, 30], "awesome_secret": 22, "show": [23, 25, 30], "grafana": 23, "orchestr": [23, 33], "kubernet": [23, 33], "jose": [23, 25], "angel": [23, 25], "munoz": [23, 25], "imjoseangel": [23, 25], "jsondiff": 24, "absent_retri": 24, "last": 24, "absent_retries_interv": 24, "nest": 24, "prune": [24, 33, 35], "deploi": 24, "resolve_imag": [24, 30], "digest": [24, 30], "with_registry_auth": 24, "auth": 24, "mystack": 24, "opt": [24, 30], "envvar": 24, "stack_spec_diff": 24, "spec": [24, 27], "test_stack_test_servic": 24, "tasktempl": 24, "containerspec": 24, "dario": [24, 30], "zanzico": [24, 30], "dariko": [24, 30], "requir": [25, 36], "test_stack": 25, "currentst": 25, "desiredst": 25, "7wqv6m02ugkw": 25, "messag": 26, "nodes_filt": 26, "services_filt": 26, "tasks_filt": 26, "unlock_kei": 26, "unlock": [26, 28], "ignore_error": 26, "docker_swarm_act": 26, "docker_swarm_manag": 26, "swarm_fact": [26, 28], "swarm_unlock_kei": 26, "return": [27, 35], "leader": [27, 28], "nonlead": 27, "include_host_uri": 27, "attribut": 27, "ansible_host_uri": 27, "uri": 27, "modif": 27, "include_host_uri_port": 27, "time_out": 27, "enginevers": 27, "x86_64": 27, "arch_x86_64": 27, "exompl": 27, "w": 27, "label_product": 27, "hint": 27, "charact": 27, "safe": 27, "stefan": 27, "heitm\u00fcller": 27, "morph027": 27, "advertise_addr": 28, "reachabl": 28, "advertis": 28, "4567": 28, "eth0": 28, "initialis": 28, "autolock_manag": 28, "lock": 28, "docker_swarm_info": [28, 33, 35], "ca_force_rot": 28, "whose": 28, "purpos": 28, "sign": 28, "data_path_addr": 28, "traffic": 28, "data_path_port": 28, "9789": 28, "default_addr_pool": 28, "pool": 28, "39": 28, "dispatcher_heartbeat_period": 28, "delai": [28, 30], "heartbeat": 28, "dispatch": 28, "election_tick": 28, "tick": 28, "trigger": [28, 30], "elect": 28, "heartbeat_tick": 28, "join_token": 28, "censor": 28, "keep_old_snapshot": 28, "snapshot": 28, "beyond": 28, "docker_nod": [28, 33, 35], "listen_addr": 28, "inter": 28, "2377": 28, "log_entries_for_slow_follow": 28, "sync": 28, "slow": 28, "node_cert_expiri": 28, "expiri": 28, "3month": 28, "node_id": 28, "rotate_manager_token": 28, "rotat": 28, "rotate_worker_token": 28, "signing_ca_cert": 28, "leaf": 28, "signing_ca_kei": 28, "snapshot_interv": 28, "10000": 28, "subnet_s": 28, "mask": 28, "task_history_retention_limit": 28, "histori": 28, "swmtkn": 28, "xxxxx": 28, "ens10": 28, "jointoken": 28, "value_specified_in_no_log_paramet": 28, "unlockkei": 28, "swmkei": 28, "xxx": 28, "hann": [29, 30], "ljungberg": [29, 30], "hannseman": [29, 30], "41": 30, "filenam": 30, "octal": 30, "0644": 30, "0444": 30, "container_label": 30, "dns_option": 30, "dns_search": 30, "endpoint_mod": 30, "endpoint": 30, "vip": 30, "dnsrr": 30, "signific": 30, "force_upd": 30, "37": 30, "replic": 30, "driver_config": 30, "copi": [30, 35], "readonli": 30, "placement": 30, "constraint": 30, "pref": 30, "replicas_max_per_nod": 30, "40": 30, "protocol": 30, "target_port": 30, "replica": 30, "instanti": 30, "reserv": 30, "restart_config": 30, "max_attempt": 30, "rollback_config": 30, "roll": 30, "rollback": 30, "failure_act": 30, "max_failure_ratio": 30, "fraction": 30, "max": 30, "ratio": 30, "monitor": 30, "parallel": 30, "simultan": 30, "secret": [30, 33, 35], "unspecifi": 30, "stop_grace_period": 30, "grace": 30, "update_config": 30, "invok": 30, "workdir": 30, "3600": 30, "remote_tmp": 30, "webapp": 30, "depart": 30, "financ": 30, "envvar1": 30, "envvar2": 30, "app": [30, 33], "fluentd": 30, "24224": 30, "async": 30, "120": 30, "edg": 30, "spread": 30, "operatingsystem": 30, "myconfig_nam": 30, "mynetwork": 30, "mynetwork_alia": 30, "mysecret_nam": 30, "50": 30, "50m": 30, "alter": 30, "swarm_servic": 30, "ansible_swarm_servic": 30, "ansible_docker_servic": 30, "x": 30, "90000000000": 30, "30000000000": 30, "10000000000": 30, "healthcheck_dis": 30, "b3dbf31b77fd99d9c08f780ce6f5282aba076d70a513a8be859d8d3a4d0c92b8": 30, "limit_cpu": 30, "limit_memori": 30, "52428800": 30, "log_driver_opt": 30, "placement_prefer": 30, "reserve_cpu": 30, "reserve_memori": 30, "20971520": 30, "restart_policy_attempt": 30, "restart_policy_delai": 30, "5000000000": 30, "restart_policy_window": 30, "120000000000": 30, "update_delai": 30, "update_failure_act": 30, "update_max_failure_ratio": 30, "update_monitor": 30, "update_ord": 30, "update_parallel": 30, "jason": 30, "witkowski": 30, "jwitko": 30, "volume_nam": [31, 32], "createdat": 31, "09t17": 31, "43": 31, "44": 31, "mountpoint": 31, "bd3f6172": 31, "_data": 31, "commandlin": 32, "volume_cr": 32, "lost": 32, "volume_on": 32, "volume_two": 32, "btrf": 32, "sda2": 32, "alex": 32, "gr\u00f6nholm": 32, "agronholm": 32, "commun": [33, 34], "collect": [33, 35], "offer": 33, "sever": 33, "python_requirements_info": 33, "note": 33, "inventori": [33, 34], "pypi": 33, "realli": 33, "broken": 33, "doubt": 33, "neither": 33, "nor": 33, "wrap": 33, "exec": 33, "posix": 33, "dynam": [33, 35], "individu": 33, "docker_host_info": [33, 35], "docker_login": [33, 35], "docker_prun": [33, 35], "docker_image_info": [33, 35], "docker_network_info": [33, 35], "docker_volume_info": [33, 35], "docker_volum": [33, 35], "lifecycl": 33, "abil": 33, "docker_container_info": [33, 35], "docker_compos": [33, 35], "next": 33, "docker_machin": [33, 34, 35], "docker_stack": [33, 35], "docker_stack_info": [33, 35], "docker_stack_task_info": [33, 35], "docker_node_info": [33, 35], "docker_secret": [33, 35], "docker_swarm_servic": [33, 35], "docker_swarm_service_info": [33, 35], "bender": 33, "openshift": 33, "laptop": 33, "fulli": 33, "scalabl": 33, "cloud": 33, "moment": 33, "declar": 34, "docker": 34, "ansible_nsenter_pid": [34, 36], "nsenter": [34, 35], "fine": [34, 36], "author": 35, "matrix": 35, "room": 35, "im": 35, "question": 35, "irc": 35, "channel": 35, "libera": 35, "mail": 35, "subscrib": 35, "current_container_fact": 35, "multi": 35, "applic": 35, "docker_container_copy_into": 35, "docker_container_exec": 35, "docker_image_load": 35, "docker_plugin": 35, "model": 36, "container": 36, "enter": 36, "systemd": 36, "nsenter_pid": 36, "nsenter_connect": 36, "program": 36, "jeff": 36, "goldschraf": 36, "jgoldschraf": 36}, "objects": {"": [[34, 0, 1, "-", "ANSIBLE_DOCKER_TIMEOUT"], [34, 0, 1, "-", "ANSIBLE_INVENTORY_USE_EXTRA_VARS"], [34, 0, 1, "-", "ANSIBLE_NSENTER_PID"]]}, "objtypes": {"0": "std:envvar"}, "objnames": {"0": ["std", "envvar", "environment variable"]}, "titleterms": {"commun": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36], "docker": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36], "current_container_fact": 0, "modul": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 35], "return": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "fact": [0, 7, 10, 16, 18, 26, 31], "about": [0, 7, 10, 16, 18, 26, 29, 31], "whether": 0, "run": [0, 1, 4, 36], "contain": [0, 1, 2, 4, 5, 6, 7, 8, 9, 33, 36], "synopsi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36], "attribut": [0, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "exampl": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "author": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36], "collect": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36], "link": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "docker_api": 1, "connect": [1, 4, 33, 35, 36], "task": [1, 4, 25], "requir": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 32, 33], "paramet": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36], "note": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 36], "docker_compos": 2, "manag": [2, 3, 8, 13, 17, 18, 19, 20, 22, 28, 29, 32, 33], "multi": 2, "applic": 2, "compos": [2, 33], "valu": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32], "docker_config": 3, "config": 3, "docker_container_copy_into": 5, "copi": 5, "file": 5, "docker_container_exec": 6, "execut": [6, 36], "command": 6, "docker_container_info": 7, "retriev": [7, 10, 16, 18, 26, 29, 31], "docker_contain": [8, 9], "inventori": [9, 15, 27, 35], "ansibl": [9, 27], "dynam": [9, 27], "plugin": [9, 20, 27, 35], "docker_host_info": 10, "host": [10, 36], "list": 10, "object": [10, 21], "servic": [10, 29, 30, 33], "docker_image_info": 11, "inspect": 11, "imag": [11, 12, 13, 33], "docker_image_load": 12, "load": 12, "": 12, "from": [12, 18, 29], "archiv": 12, "docker_imag": 13, "docker_login": 14, "log": 14, "registri": 14, "docker_machin": 15, "machin": [15, 33], "sourc": 15, "docker_network_info": 16, "network": [16, 17, 33], "docker_network": 17, "docker_node_info": 18, "swarm": [18, 19, 26, 27, 28, 29, 30, 33], "node": [18, 19, 27], "docker_nod": 19, "docker_plugin": 20, "docker_prun": 21, "allow": 21, "prune": 21, "variou": 21, "docker_secret": 22, "secret": 22, "docker_stack_info": 23, "inform": [23, 25, 29], "stack": [23, 24, 25, 33], "docker_stack": 24, "docker_stack_task_info": 25, "docker_swarm_info": 26, "cluster": [26, 28], "docker_swarm": [27, 28], "docker_swarm_service_info": 29, "docker_swarm_servic": 30, "docker_volume_info": 31, "volum": [31, 32, 33], "docker_volum": 32, "guid": [33, 35], "api": 33, "environ": [33, 34], "variabl": [33, 34], "plain": 33, "daemon": 33, "configur": 33, "help": 33, "index": [34, 35], "all": 34, "descript": 35, "scenario": 35, "nsenter": 36, "control": 36}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"community.docker.current_container_facts module \u2013 Return facts about whether the module runs in a container": [[0, "community-docker-current-container-facts-module-return-facts-about-whether-the-module-runs-in-a-container"]], "Synopsis": [[0, "synopsis"], [1, "synopsis"], [2, "synopsis"], [3, "synopsis"], [4, "synopsis"], [5, "synopsis"], [6, "synopsis"], [7, "synopsis"], [8, "synopsis"], [9, "synopsis"], [10, "synopsis"], [11, "synopsis"], [12, "synopsis"], [13, "synopsis"], [14, "synopsis"], [15, "synopsis"], [16, "synopsis"], [17, "synopsis"], [18, "synopsis"], [19, "synopsis"], [20, "synopsis"], [21, "synopsis"], [22, "synopsis"], [23, "synopsis"], [24, "synopsis"], [25, "synopsis"], [26, "synopsis"], [27, "synopsis"], [28, "synopsis"], [29, "synopsis"], [30, "synopsis"], [31, "synopsis"], [32, "synopsis"], [36, "synopsis"]], "Attributes": [[0, "attributes"], [2, "attributes"], [3, "attributes"], [5, "attributes"], [6, "attributes"], [7, "attributes"], [8, "attributes"], [10, "attributes"], [11, "attributes"], [12, "attributes"], [13, "attributes"], [14, "attributes"], [16, "attributes"], [17, "attributes"], [18, "attributes"], [19, "attributes"], [20, "attributes"], [21, "attributes"], [22, "attributes"], [23, "attributes"], [24, "attributes"], [25, "attributes"], [26, "attributes"], [28, "attributes"], [29, "attributes"], [30, "attributes"], [31, "attributes"], [32, "attributes"]], "Examples": [[0, "examples"], [2, "examples"], [3, "examples"], [5, "examples"], [6, "examples"], [7, "examples"], [8, "examples"], [9, "examples"], [10, "examples"], [11, "examples"], [12, "examples"], [13, "examples"], [14, "examples"], [15, "examples"], [16, "examples"], [17, "examples"], [18, "examples"], [19, "examples"], [20, "examples"], [21, "examples"], [22, "examples"], [23, "examples"], [24, "examples"], [25, "examples"], [26, "examples"], [27, "examples"], [28, "examples"], [29, "examples"], [30, "examples"], [31, "examples"], [32, "examples"]], "Returned Facts": [[0, "returned-facts"]], "Authors": [[0, "authors"], [1, "authors"], [2, "authors"], [3, "authors"], [4, "authors"], [5, "authors"], [6, "authors"], [7, "authors"], [8, "authors"], [9, "authors"], [10, "authors"], [11, "authors"], [12, "authors"], [13, "authors"], [14, "authors"], [15, "authors"], [16, "authors"], [17, "authors"], [18, "authors"], [19, "authors"], [20, "authors"], [21, "authors"], [22, "authors"], [23, "authors"], [24, "authors"], [25, "authors"], [26, "authors"], [27, "authors"], [28, "authors"], [29, "authors"], [30, "authors"], [31, "authors"], [32, "authors"], [36, "authors"]], "Collection links": [[0, "collection-links"], [1, "collection-links"], [2, "collection-links"], [3, "collection-links"], [4, "collection-links"], [5, "collection-links"], [6, "collection-links"], [7, "collection-links"], [8, "collection-links"], [9, "collection-links"], [10, "collection-links"], [11, "collection-links"], [12, "collection-links"], [13, "collection-links"], [14, "collection-links"], [15, "collection-links"], [16, "collection-links"], [17, "collection-links"], [18, "collection-links"], [19, "collection-links"], [20, "collection-links"], [21, "collection-links"], [22, "collection-links"], [23, "collection-links"], [24, "collection-links"], [25, "collection-links"], [26, "collection-links"], [27, "collection-links"], [28, "collection-links"], [29, "collection-links"], [30, "collection-links"], [31, "collection-links"], [32, "collection-links"], [36, "collection-links"]], "community.docker.docker_api connection \u2013 Run tasks in docker containers": [[1, "community-docker-docker-api-connection-run-tasks-in-docker-containers"]], "Requirements": [[1, "requirements"], [2, "requirements"], [3, "requirements"], [5, "requirements"], [6, "requirements"], [7, "requirements"], [8, "requirements"], [9, "requirements"], [10, "requirements"], [11, "requirements"], [12, "requirements"], [13, "requirements"], [14, "requirements"], [15, "requirements"], [16, "requirements"], [17, "requirements"], [18, "requirements"], [19, "requirements"], [20, "requirements"], [21, "requirements"], [22, "requirements"], [24, "requirements"], [26, "requirements"], [27, "requirements"], [28, "requirements"], [29, "requirements"], [30, "requirements"], [31, "requirements"], [32, "requirements"], [33, "requirements"]], "Parameters": [[1, "parameters"], [2, "parameters"], [3, "parameters"], [4, "parameters"], [5, "parameters"], [6, "parameters"], [7, "parameters"], [8, "parameters"], [9, "parameters"], [10, "parameters"], [11, "parameters"], [12, "parameters"], [13, "parameters"], [14, "parameters"], [15, "parameters"], [16, "parameters"], [17, "parameters"], [18, "parameters"], [19, "parameters"], [20, "parameters"], [21, "parameters"], [22, "parameters"], [24, "parameters"], [25, "parameters"], [26, "parameters"], [27, "parameters"], [28, "parameters"], [29, "parameters"], [30, "parameters"], [31, "parameters"], [32, "parameters"], [33, "parameters"], [36, "parameters"]], "Notes": [[1, "notes"], [2, "notes"], [3, "notes"], [5, "notes"], [6, "notes"], [7, "notes"], [8, "notes"], [9, "notes"], [10, "notes"], [11, "notes"], [12, "notes"], [13, "notes"], [14, "notes"], [16, "notes"], [17, "notes"], [18, "notes"], [19, "notes"], [20, "notes"], [21, "notes"], [22, "notes"], [26, "notes"], [28, "notes"], [29, "notes"], [30, "notes"], [31, "notes"], [32, "notes"], [36, "notes"]], "community.docker.docker_compose module \u2013 Manage multi-container Docker applications with Docker Compose.": [[2, "community-docker-docker-compose-module-manage-multi-container-docker-applications-with-docker-compose"]], "Return Values": [[2, "return-values"], [3, "return-values"], [5, "return-values"], [6, "return-values"], [7, "return-values"], [8, "return-values"], [10, "return-values"], [11, "return-values"], [12, "return-values"], [13, "return-values"], [14, "return-values"], [16, "return-values"], [17, "return-values"], [18, "return-values"], [19, "return-values"], [20, "return-values"], [21, "return-values"], [22, "return-values"], [23, "return-values"], [24, "return-values"], [25, "return-values"], [26, "return-values"], [28, "return-values"], [29, "return-values"], [30, "return-values"], [31, "return-values"], [32, "return-values"]], "community.docker.docker_config module \u2013 Manage docker configs.": [[3, "community-docker-docker-config-module-manage-docker-configs"]], "community.docker.docker connection \u2013 Run tasks in docker containers": [[4, "community-docker-docker-connection-run-tasks-in-docker-containers"]], "community.docker.docker_container_copy_into module \u2013 Copy a file into a Docker container": [[5, "community-docker-docker-container-copy-into-module-copy-a-file-into-a-docker-container"]], "community.docker.docker_container_exec module \u2013 Execute command in a docker container": [[6, "community-docker-docker-container-exec-module-execute-command-in-a-docker-container"]], "community.docker.docker_container_info module \u2013 Retrieves facts about docker container": [[7, "community-docker-docker-container-info-module-retrieves-facts-about-docker-container"]], "community.docker.docker_container module \u2013 manage Docker containers": [[8, "community-docker-docker-container-module-manage-docker-containers"]], "community.docker.docker_containers inventory \u2013 Ansible dynamic inventory plugin for Docker containers": [[9, "community-docker-docker-containers-inventory-ansible-dynamic-inventory-plugin-for-docker-containers"]], "community.docker.docker_host_info module \u2013 Retrieves facts about docker host and lists of objects of the services.": [[10, "community-docker-docker-host-info-module-retrieves-facts-about-docker-host-and-lists-of-objects-of-the-services"]], "community.docker.docker_image_info module \u2013 Inspect docker images": [[11, "community-docker-docker-image-info-module-inspect-docker-images"]], "community.docker.docker_image_load module \u2013 Load docker image(s) from archives": [[12, "community-docker-docker-image-load-module-load-docker-image-s-from-archives"]], "community.docker.docker_image module \u2013 Manage docker images": [[13, "community-docker-docker-image-module-manage-docker-images"]], "community.docker.docker_login module \u2013 Log into a Docker registry.": [[14, "community-docker-docker-login-module-log-into-a-docker-registry"]], "community.docker.docker_machine inventory \u2013 Docker Machine inventory source": [[15, "community-docker-docker-machine-inventory-docker-machine-inventory-source"]], "community.docker.docker_network_info module \u2013 Retrieves facts about docker network": [[16, "community-docker-docker-network-info-module-retrieves-facts-about-docker-network"]], "community.docker.docker_network module \u2013 Manage Docker networks": [[17, "community-docker-docker-network-module-manage-docker-networks"]], "community.docker.docker_node_info module \u2013 Retrieves facts about docker swarm node from Swarm Manager": [[18, "community-docker-docker-node-info-module-retrieves-facts-about-docker-swarm-node-from-swarm-manager"]], "community.docker.docker_node module \u2013 Manage Docker Swarm node": [[19, "community-docker-docker-node-module-manage-docker-swarm-node"]], "community.docker.docker_plugin module \u2013 Manage Docker plugins": [[20, "community-docker-docker-plugin-module-manage-docker-plugins"]], "community.docker.docker_prune module \u2013 Allows to prune various docker objects": [[21, "community-docker-docker-prune-module-allows-to-prune-various-docker-objects"]], "community.docker.docker_secret module \u2013 Manage docker secrets.": [[22, "community-docker-docker-secret-module-manage-docker-secrets"]], "community.docker.docker_stack_info module \u2013 Return information on a docker stack": [[23, "community-docker-docker-stack-info-module-return-information-on-a-docker-stack"]], "community.docker.docker_stack module \u2013 docker stack module": [[24, "community-docker-docker-stack-module-docker-stack-module"]], "community.docker.docker_stack_task_info module \u2013 Return information of the tasks on a docker stack": [[25, "community-docker-docker-stack-task-info-module-return-information-of-the-tasks-on-a-docker-stack"]], "community.docker.docker_swarm_info module \u2013 Retrieves facts about Docker Swarm cluster.": [[26, "community-docker-docker-swarm-info-module-retrieves-facts-about-docker-swarm-cluster"]], "community.docker.docker_swarm inventory \u2013 Ansible dynamic inventory plugin for Docker swarm nodes.": [[27, "community-docker-docker-swarm-inventory-ansible-dynamic-inventory-plugin-for-docker-swarm-nodes"]], "community.docker.docker_swarm module \u2013 Manage Swarm cluster": [[28, "community-docker-docker-swarm-module-manage-swarm-cluster"]], "community.docker.docker_swarm_service_info module \u2013 Retrieves information about docker services from a Swarm Manager": [[29, "community-docker-docker-swarm-service-info-module-retrieves-information-about-docker-services-from-a-swarm-manager"]], "community.docker.docker_swarm_service module \u2013 docker swarm service": [[30, "community-docker-docker-swarm-service-module-docker-swarm-service"]], "community.docker.docker_volume_info module \u2013 Retrieve facts about Docker volumes": [[31, "community-docker-docker-volume-info-module-retrieve-facts-about-docker-volumes"]], "community.docker.docker_volume module \u2013 Manage Docker volumes": [[32, "community-docker-docker-volume-module-manage-docker-volumes"]], "Docker Guide": [[33, "docker-guide"]], "Connecting to the Docker API": [[33, "connecting-to-the-docker-api"]], "Environment variables": [[33, "environment-variables"]], "Plain Docker daemon: images, networks, volumes, and containers": [[33, "plain-docker-daemon-images-networks-volumes-and-containers"]], "Docker Compose": [[33, "docker-compose"]], "Docker Machine": [[33, "docker-machine"]], "Docker stack": [[33, "docker-stack"]], "Docker Swarm": [[33, "docker-swarm"]], "Swarm management": [[33, "swarm-management"]], "Configuration management": [[33, "configuration-management"]], "Swarm services": [[33, "swarm-services"]], "Helpful links": [[33, "helpful-links"]], "Index of all Collection Environment Variables": [[34, "index-of-all-collection-environment-variables"]], "Community.Docker": [[35, "community-docker"]], "Description": [[35, "description"]], "Communication": [[35, "communication"]], "Scenario Guide": [[35, "scenario-guide"]], "Plugin Index": [[35, "plugin-index"]], "Modules": [[35, "modules"]], "Connection Plugins": [[35, "connection-plugins"]], "Inventory Plugins": [[35, "inventory-plugins"]], "community.docker.nsenter connection \u2013 execute on host running controller container": [[36, "community-docker-nsenter-connection-execute-on-host-running-controller-container"]]}, "indexentries": {"ansible_docker_timeout": [[1, "index-1"], [4, "index-1"], [34, "envvar-ANSIBLE_DOCKER_TIMEOUT"]], "ansible_remote_user": [[1, "index-2"], [4, "index-2"]], "ansible_timeout": [[1, "index-0"], [4, "index-0"]], "environment variable": [[1, "index-0"], [1, "index-1"], [1, "index-2"], [4, "index-0"], [4, "index-1"], [4, "index-2"], [9, "index-0"], [15, "index-0"], [27, "index-0"], [34, "envvar-ANSIBLE_DOCKER_TIMEOUT"], [34, "envvar-ANSIBLE_INVENTORY_USE_EXTRA_VARS"], [34, "envvar-ANSIBLE_NSENTER_PID"], [36, "index-0"]], "ansible_inventory_use_extra_vars": [[9, "index-0"], [15, "index-0"], [27, "index-0"], [34, "envvar-ANSIBLE_INVENTORY_USE_EXTRA_VARS"]], "ansible_nsenter_pid": [[34, "envvar-ANSIBLE_NSENTER_PID"], [36, "index-0"]]}}) \ No newline at end of file