diff --git a/tag/1.5.0/.buildinfo b/tag/1.5.0/.buildinfo new file mode 100644 index 0000000..54d7e76 --- /dev/null +++ b/tag/1.5.0/.buildinfo @@ -0,0 +1,4 @@ +# 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: 01ba99357b9fe97b784fdfe65a6e108b +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/tag/1.5.0/_static/_sphinx_javascript_frameworks_compat.js b/tag/1.5.0/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/tag/1.5.0/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * 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/tag/1.5.0/_static/antsibull-minimal.css b/tag/1.5.0/_static/antsibull-minimal.css new file mode 100644 index 0000000..10794e4 --- /dev/null +++ b/tag/1.5.0/_static/antsibull-minimal.css @@ -0,0 +1,4 @@ +@charset "UTF-8"; +/* Copyright (c) Ansible and contributors */ +/* GNU General Public License v3.0+ (see https://www.gnu.org/licenses/gpl-3.0.txt) */ +:root{--antsibull-links-background:#5bbdbf;--antsibull-links-background-active:#91d9db;--antsibull-links-focus-outline:#204748;--antsibull-links-text:#fff;--antsibull-table-background-header:#6ab0de;--antsibull-table-background-even:#e7f2fa;--antsibull-table-background-odd:#fff;--antsibull-table-border:#000;--antsibull-narrowtable-background:#e7f2fa;--antsibull-option-type:purple;--antsibull-option-elements:purple;--antsibull-option-required:red;--antsibull-option-version-added:#006400;--antsibull-option-aliases:#006400;--antsibull-option-default:blue;--antsibull-option-sample:blue;--antsibull-option-sample-header:#000;--antsibull-attribute-support-none:red;--antsibull-attribute-support-partial:#a5a500;--antsibull-attribute-support-full:green;--antsibull-attribute-support-na:inherit}.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;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:flex-start}.ansible-links>*{margin:2px 4px!important}.ansible-links>li{list-style:none!important}.ansible-links>li>p{display:inline}.ansible-links a{background-color:var(--antsibull-links-background);border-radius:3px;color:var(--antsibull-links-text);cursor:pointer;display:block;padding:4px 12px}.ansible-links a:active,.ansible-links a:focus,.ansible-links a:hover{background-color:var(--antsibull-links-background-active)}.ansible-links a:focus{outline:3px solid var(--antsibull-links-focus-outline)}table.documentation-table{border-bottom:1px solid var(--antsibull-table-border);border-right:1px solid var(--antsibull-table-border)}table.documentation-table th{background-color:var(--antsibull-table-background-header)}table.documentation-table td,table.documentation-table th{border-left:1px solid var(--antsibull-table-border);border-top:1px solid var(--antsibull-table-border);padding:4px}table.documentation-table td.elbow-placeholder{border-top:0;min-width:30px;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}table.documentation-table tr .ansibleOptionLink:after{content:"🔗";opacity:0}table.documentation-table tr:hover .ansibleOptionLink:after{opacity:1}table.documentation-table tr:nth-child(odd){background-color:var(--antsibull-table-background-odd)}table.documentation-table tr:nth-child(2n){background-color:var(--antsibull-table-background-even)}table.ansible-option-table{border-color:var(--antsibull-table-border)!important;display:table;height:1px}table.ansible-option-table tr{height:100%}table.ansible-option-table td,table.ansible-option-table th{border-color:var(--antsibull-table-border)!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:var(--antsibull-table-background-header)}table.ansible-option-table tbody .row-odd td{background-color:var(--antsibull-table-background-odd)!important}table.ansible-option-table tbody .row-even td{background-color:var(--antsibull-table-background-even)!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-type{color:var(--antsibull-option-type)}table.ansible-option-table .ansible-option-elements{color:var(--antsibull-option-elements)}table.ansible-option-table .ansible-option-required{color:var(--antsibull-option-required)}table.ansible-option-table .ansible-option-versionadded{color:var(--antsibull-option-version-added);font-size:small}table.ansible-option-table .ansible-option-aliases{color:var(--antsibull-option-aliases);white-space:normal}table.ansible-option-table .ansible-option-line{margin-top:8px}table.ansible-option-table .ansible-option-choices-default-mark,table.ansible-option-table .ansible-option-default,table.ansible-option-table .ansible-option-default-bold{color:var(--antsibull-option-default)}table.ansible-option-table .ansible-option-sample{color:var(--antsibull-option-sample);word-wrap:break-word;word-break:break-all}table.ansible-option-table .ansible-option-sample-bold{color:var(--antsibull-option-sample-header)}table.ansible-option-table .ansible-attribute-support-none{color:var(--antsibull-attribute-support-none)}table.ansible-option-table .ansible-attribute-support-partial{color:var(--antsibull-attribute-support-partial)}table.ansible-option-table .ansible-attribute-support-full{color:var(--antsibull-attribute-support-full)}table.ansible-option-table .ansible-attribute-support-na{color:var(--antsibull-attribute-support-na)}table.ansible-option-table .ansibleOptionLink{display:inline-block}table.ansible-option-table .ansibleOptionLink:after{content:"🔗";opacity:0}table.ansible-option-table p{margin:0 0 8px}table.ansible-option-table tr:hover .ansibleOptionLink:after{opacity:1}table.ansible-option-table td{padding:0!important;white-space:normal}table.ansible-option-table td>div.ansible-option-cell{border-top:1px solid var(--antsibull-table-border);padding:8px 16px}table.ansible-option-table td:first-child{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:inherit;-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;max-width:100%;white-space:nowrap}table.ansible-option-table .ansible-option-indent{border-right:1px solid var(--antsibull-table-border);margin-left:2em}table.ansible-option-table .ansible-attribute-support-label{display:none}@media (max-width:1200px){table.ansible-option-table{border:none!important;display:block;height:unset}table.ansible-option-table thead{display:none}table.ansible-option-table tbody,table.ansible-option-table td,table.ansible-option-table tr{border:none!important;display:block}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:var(--antsibull-narrowtable-background)!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{border:none;border-right:3px solid var(--antsibull-narrowtable-background);margin-left:1em}table.ansible-option-table .ansible-attribute-support-label{display:unset}}.ansible-version-added{font-style:italic}.ansible-option a.reference.external,.ansible-option a.reference.external:hover,.ansible-option a.reference.internal,.ansible-option a.reference.internal:hover,.ansible-option-value a.reference.external,.ansible-option-value a.reference.external:hover,.ansible-option-value a.reference.internal,.ansible-option-value a.reference.internal:hover,.ansible-return-value a.reference.external,.ansible-return-value a.reference.external:hover,.ansible-return-value a.reference.internal,.ansible-return-value a.reference.internal:hover{color:unset} \ No newline at end of file diff --git a/tag/1.5.0/_static/basic.css b/tag/1.5.0/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/tag/1.5.0/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 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:visited { + color: #551A8B; +} + +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; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +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, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::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; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type: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 > 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; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +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; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- 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/tag/1.5.0/_static/css/ansible.css b/tag/1.5.0/_static/css/ansible.css new file mode 100644 index 0000000..8ecc337 --- /dev/null +++ b/tag/1.5.0/_static/css/ansible.css @@ -0,0 +1,491 @@ +@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-docs/blob/main/src/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, and tables + * sometimes overlap the text above + * */ + section a[id], section table[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/tag/1.5.0/_static/css/badge_only.css b/tag/1.5.0/_static/css/badge_only.css new file mode 100644 index 0000000..c718cee --- /dev/null +++ b/tag/1.5.0/_static/css/badge_only.css @@ -0,0 +1 @@ +.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/tag/1.5.0/_static/css/fonts/Roboto-Slab-Bold.woff b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/tag/1.5.0/_static/css/fonts/Roboto-Slab-Bold.woff2 b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/tag/1.5.0/_static/css/fonts/Roboto-Slab-Regular.woff b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/tag/1.5.0/_static/css/fonts/Roboto-Slab-Regular.woff2 b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/tag/1.5.0/_static/css/fonts/fontawesome-webfont.eot b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/tag/1.5.0/_static/css/fonts/fontawesome-webfont.svg b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tag/1.5.0/_static/css/fonts/fontawesome-webfont.ttf b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/tag/1.5.0/_static/css/fonts/fontawesome-webfont.woff b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/tag/1.5.0/_static/css/fonts/fontawesome-webfont.woff2 b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/tag/1.5.0/_static/css/fonts/lato-bold-italic.woff b/tag/1.5.0/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-bold-italic.woff differ diff --git a/tag/1.5.0/_static/css/fonts/lato-bold-italic.woff2 b/tag/1.5.0/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/tag/1.5.0/_static/css/fonts/lato-bold.woff b/tag/1.5.0/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-bold.woff differ diff --git a/tag/1.5.0/_static/css/fonts/lato-bold.woff2 b/tag/1.5.0/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-bold.woff2 differ diff --git a/tag/1.5.0/_static/css/fonts/lato-normal-italic.woff b/tag/1.5.0/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-normal-italic.woff differ diff --git a/tag/1.5.0/_static/css/fonts/lato-normal-italic.woff2 b/tag/1.5.0/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/tag/1.5.0/_static/css/fonts/lato-normal.woff b/tag/1.5.0/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-normal.woff differ diff --git a/tag/1.5.0/_static/css/fonts/lato-normal.woff2 b/tag/1.5.0/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/tag/1.5.0/_static/css/fonts/lato-normal.woff2 differ diff --git a/tag/1.5.0/_static/css/rtd-ethical-ads.css b/tag/1.5.0/_static/css/rtd-ethical-ads.css new file mode 100644 index 0000000..a146003 --- /dev/null +++ b/tag/1.5.0/_static/css/rtd-ethical-ads.css @@ -0,0 +1,4 @@ +.ethical-sidebar, +.ethical-footer { + border-radius: 0 !important; +} diff --git a/tag/1.5.0/_static/css/theme.css b/tag/1.5.0/_static/css/theme.css new file mode 100644 index 0000000..19a446a --- /dev/null +++ b/tag/1.5.0/_static/css/theme.css @@ -0,0 +1,4 @@ +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 .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.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:auto minmax(80%,95%)}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{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}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>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: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{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}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{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.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 aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.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,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.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/tag/1.5.0/_static/doctools.js b/tag/1.5.0/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/tag/1.5.0/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 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/tag/1.5.0/_static/documentation_options.js b/tag/1.5.0/_static/documentation_options.js new file mode 100644 index 0000000..1823c1b --- /dev/null +++ b/tag/1.5.0/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + 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/tag/1.5.0/_static/file.png b/tag/1.5.0/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/tag/1.5.0/_static/file.png differ diff --git a/tag/1.5.0/_static/images/Ansible-Mark-RGB_Black.png b/tag/1.5.0/_static/images/Ansible-Mark-RGB_Black.png new file mode 100644 index 0000000..0b4e721 Binary files /dev/null and b/tag/1.5.0/_static/images/Ansible-Mark-RGB_Black.png differ diff --git a/tag/1.5.0/_static/images/Ansible-Mark-RGB_Black.svg b/tag/1.5.0/_static/images/Ansible-Mark-RGB_Black.svg new file mode 100644 index 0000000..c600b6e --- /dev/null +++ b/tag/1.5.0/_static/images/Ansible-Mark-RGB_Black.svg @@ -0,0 +1,14 @@ + + + diff --git a/tag/1.5.0/_static/images/Ansible-Mark-RGB_White.png b/tag/1.5.0/_static/images/Ansible-Mark-RGB_White.png new file mode 100644 index 0000000..5754701 Binary files /dev/null and b/tag/1.5.0/_static/images/Ansible-Mark-RGB_White.png differ diff --git a/tag/1.5.0/_static/images/Ansible-Mark-RGB_White.svg b/tag/1.5.0/_static/images/Ansible-Mark-RGB_White.svg new file mode 100644 index 0000000..2275aec --- /dev/null +++ b/tag/1.5.0/_static/images/Ansible-Mark-RGB_White.svg @@ -0,0 +1 @@ + diff --git a/tag/1.5.0/_static/jquery.js b/tag/1.5.0/_static/jquery.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/tag/1.5.0/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/tag/1.5.0/_static/js/html5shiv.min.js b/tag/1.5.0/_static/js/html5shiv.min.js new file mode 100644 index 0000000..cd1c674 --- /dev/null +++ b/tag/1.5.0/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/tag/1.5.0/_static/js/theme.js b/tag/1.5.0/_static/js/theme.js new file mode 100644 index 0000000..1fddb6e --- /dev/null +++ b/tag/1.5.0/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/tag/1.5.0/_static/minus.png b/tag/1.5.0/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/tag/1.5.0/_static/minus.png differ diff --git a/tag/1.5.0/_static/plus.png b/tag/1.5.0/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/tag/1.5.0/_static/plus.png differ diff --git a/tag/1.5.0/_static/pygments.css b/tag/1.5.0/_static/pygments.css new file mode 100644 index 0000000..fddd181 --- /dev/null +++ b/tag/1.5.0/_static/pygments.css @@ -0,0 +1,81 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc; border: 1px solid #edff00; padding-top: 2px; border-radius: 3px; display: block } +.highlight { background: #f8f8f8; } +.highlight .c { color: #6a737d; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2; border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .l { color: #032f62 } /* Literal */ +.highlight .n { color: #333333 } /* Name */ +.highlight .o { color: #666666; font-weight: bold } /* Operator */ +.highlight .p { font-weight: bold } /* Punctuation */ +.highlight .ch { color: #6a737d; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #6a737d; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #6a737d; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #6a737d; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #032f62 } /* Literal.Date */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086b3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #800080; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #555555; font-weight: bold } /* Name.Namespace */ +.highlight .nx { color: #333333 } /* Name.Other */ +.highlight .py { color: #333333 } /* Name.Property */ +.highlight .nt { color: #22863a; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #9960b5; font-weight: bold } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .pm { font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #009999 } /* Literal.Number.Bin */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sa { color: #dd1144 } /* Literal.String.Affix */ +.highlight .sb { color: #dd1144 } /* Literal.String.Backtick */ +.highlight .sc { color: #dd1144 } /* Literal.String.Char */ +.highlight .dl { color: #dd1144 } /* Literal.String.Delimiter */ +.highlight .sd { color: #dd1144; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #dd1144 } /* Literal.String.Double */ +.highlight .se { color: #dd1144; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #dd1144 } /* Literal.String.Heredoc */ +.highlight .si { color: #dd1144; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #dd1144 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #dd1144 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #008080; font-weight: bold } /* Name.Variable.Class */ +.highlight .vg { color: #008080; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #008080; font-weight: bold } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5; font-weight: bold } /* Name.Variable.Magic */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/tag/1.5.0/_static/searchtools.js b/tag/1.5.0/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/tag/1.5.0/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/tag/1.5.0/_static/sphinx_highlight.js b/tag/1.5.0/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/tag/1.5.0/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.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: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!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.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/tag/1.5.0/collections/environment_variables.html b/tag/1.5.0/collections/environment_variables.html new file mode 100644 index 0000000..4bad590 --- /dev/null +++ b/tag/1.5.0/collections/environment_variables.html @@ -0,0 +1,315 @@ + + + + + + + + Index of all Collection Environment Variables — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ +
+

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_INVENTORY_USE_EXTRA_VARS
+

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

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_AUTH_PROTOCOL
+

The authentication protocol to use when connecting to the LDAP host.

+

Defaults to certificate if LDAPS/StartTLS is used and certificate has been specified. Otherwise it defaults to negotiate.

+

simple is simple authentication where the user and password are sent in plaintext. It does not support any encryption so either must be used with LDAPS, or StartTLS. If using over a plaintext LDAP connection without TLS, encrypt=False must be specified to explicitly opt into no encryption.

+

certificate is TLS client certificate authentication. It can only be used with LDAPS or StartTLS. See certificate for more information on how to specify the client certificate used for authentication.

+

negotiate will attempt to negotiate Kerberos authentication with a fallback to NTLM. If Kerberos is available the Kerberos credential cache can be used if no username or password is specified.

+

kerberos will use Kerberos authentication with no NTLM fallback.

+

ntlm will use NTLM authentication with no Kerberos attempt.

+

negotiate, kerberos, and ntlm support encryption over LDAP.

+

Kerberos support requires the pyspnego[kerberos] extras to be installed.

+

See LDAP authentication for more information.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_CA_CERT
+

Can be the path to a CA certificate PEM or DER file, directory of PEM certificates, or the CA certificate PEM string that is used for certificate validation.

+

If omitted, the default CA store used for validation is dependent on the current Python settings.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_CERT_VALIDATION
+

The certificate validation behaviour when using a TLS connection.

+

This can be set to always, ignore, ignore_hostname.

+

always will perform certificate hostname and CA validation.

+

ignore will ignore any certificate errors.

+

ignore_hostname will validate the CA trust chain but will ignore any hostname checks performed by TLS.

+

See Certificate validation for more information.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_CERTIFICATE
+

The certificate or certificate with key bundle that is used for certificate authentication.

+

The value can either be a path to a file containing the certificate or string of the PEM encoded certificate.

+

If using a path to a certificate file, the file can be a PEM encoded certificate, a PEM encoded certificate and key bundle, a DER encoded certificate, or a PFX/PKCS12 encoded certificate and key bundle.

+

Use certificate_key if the certificate specified does not contain the key.

+

Use certificate_password if the key is encrypted with a password.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_CERTIFICATE_KEY
+

The certificate key that is used for certificate authentication.

+

The value can either be a path to a file containing the key in the PEM or DER encoded form, or it can be the string of a PEM encoded key.

+

Use certificate_password if the key is encrypted with a password.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_CERTIFICATE_PASSWORD
+

The password used to decrypt the certificate key specified by certificate or certificate_key.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_CONNECTION_TIMEOUT
+

The timeout in seconds to wait until the connection is established before failing.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_ENCRYPT
+

Whether encryption is required for the connection.

+

Encryption can either be performed using the authentication protocol or through TLS.

+

The auth_protocol negotiate, kerberos, and ntlm all support encryption over LDAP whereas simple does not.

+

If using auth_protocol=simple over LDAP without TLS then this must be set to False. As no encryption is used, all traffic will be in plaintext and should be avoided.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_PASSWORD
+

The password to authenticate with.

+

If auth_protocol is simple and no password is specified, the bind will be performed as an unauthenticated bind.

+

If auth_protocol is negotiate, kerberos, or ntlm and no password is specified, it will attempt to use the local cached credential specified by username if available.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_PORT
+

The LDAP port to use for the connection.

+

Port 389 is used for LDAP and port 686 is used for LDAPS.

+

Defaults to port 636 if tls_mode=ldaps otherwise 389.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_SERVER
+

The domain controller/server to connect to.

+

If not specified the server will be derived from the current krb5.conf default_realm setting and with an SRV DNS lookup.

+

See Server lookup for more information.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_TLS_MODE
+

The TLS operation to use.

+

If an explicit port is set to 636 then this defaults to ldaps.

+

ldaps will connect over LDAPS (port 636).

+

start_tls will connect over LDAP (port 389) and perform the StartTLS operation before the authentication bind.

+

It is recommended to use ldaps over start_tls if TLS is going to be used.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+
+MICROSOFT_AD_LDAP_USERNAME
+

The username to authenticate with.

+

If auth_protocol is simple and no username is specified, anonymous authentication is used.

+

If auth_protocol is negotiate, kerberos, or ntlm and no username is specified, it will attempt to use the local cached credential if available, for example one retrieved by kinit.

+

This option can be set using a Jinja2 template value.

+

Used by: +microsoft.ad.ldap inventory plugin

+
+ +
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/index.html b/tag/1.5.0/collections/index.html new file mode 100644 index 0000000..7a7b8d1 --- /dev/null +++ b/tag/1.5.0/collections/index.html @@ -0,0 +1,163 @@ + + + + + + + + Collection Index — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ +
+

Collection Index

+

These are the collections documented here.

+ +
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/index_filter.html b/tag/1.5.0/collections/index_filter.html new file mode 100644 index 0000000..f25cce2 --- /dev/null +++ b/tag/1.5.0/collections/index_filter.html @@ -0,0 +1,167 @@ + + + + + + + + Index of all Filter Plugins — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ +
+

Index of all Filter Plugins

+
+

microsoft.ad

+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/index_inventory.html b/tag/1.5.0/collections/index_inventory.html new file mode 100644 index 0000000..dc41b54 --- /dev/null +++ b/tag/1.5.0/collections/index_inventory.html @@ -0,0 +1,163 @@ + + + + + + + + Index of all Inventory Plugins — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ +
+

Index of all Inventory Plugins

+
+

microsoft.ad

+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/index_module.html b/tag/1.5.0/collections/index_module.html new file mode 100644 index 0000000..00476eb --- /dev/null +++ b/tag/1.5.0/collections/index_module.html @@ -0,0 +1,173 @@ + + + + + + + + Index of all Modules — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ +
+

Index of all Modules

+
+

microsoft.ad

+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/as_datetime_filter.html b/tag/1.5.0/collections/microsoft/ad/as_datetime_filter.html new file mode 100644 index 0000000..ab8342f --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/as_datetime_filter.html @@ -0,0 +1,308 @@ + + + + + + + + microsoft.ad.as_datetime filter – Converts an LDAP value to a datetime string — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.as_datetime filter – Converts an LDAP value to a datetime string

+
+

Note

+

This filter plugin is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.as_datetime.

+
+

New in microsoft.ad 1.1.0

+ +
+

Synopsis

+
    +
  • Converts an LDAP integer or raw value to a datetime string.

  • +
  • Should be used with the microsoft.ad.ldap plugin to convert attribute values to a datetime string.

  • +
+
+
+

Input

+

This describes the input of the filter, the value before | microsoft.ad.as_datetime.

+ + + + + + + + + + + +

Parameter

Comments

+

Input

+

any / required

+

The LDAP attribute bytes or integer value representing a FILETIME integer stored in LDAP.

+

The resulting datetime will be set as a UTC datetime as that’s how the FILETIME value is stored in LDAP.

+
+
+
+

Keyword parameters

+

This describes keyword parameters of the filter. These are the values key1=value1, key2=value2 and so on in the following +example: input | microsoft.ad.as_datetime(key1=value1, key2=value2, ...)

+ + + + + + + + + + + +

Parameter

Comments

+

format

+

string

+

The string format to format the datetime object as.

+

Defaults to an ISO 8601 compatible string, for example 2023-02-06T07:39:09.195321+0000.

+

Default: "%Y-%m-%dT%H:%M:%S.%f%z"

+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.as_guid

microsoft.ad.as_guid filter

+
+
microsoft.ad.as_sid

microsoft.ad.as_sid filter

+
+
microsoft.ad.ldap

microsoft.ad.ldap inventory

+
+
+
+
+
+

Examples

+
# This is an example used in the microsoft.ad.ldap plugin
+
+# Converting from the coerced value
+attributes:
+  pwdLastSet: this | microsoft.ad.as_datetime
+
+# Converting from the raw bytes value
+attributes:
+  maxPwdAge: raw | microsoft.ad.as_datetime
+
+
+
+
+

Return Value

+ + + + + + + + + + + +

Key

Description

+

Return value

+

string

+

The datetime string value(s) formatted as per the format option.

+

Returned: success

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+

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 Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/as_guid_filter.html b/tag/1.5.0/collections/microsoft/ad/as_guid_filter.html new file mode 100644 index 0000000..91061d3 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/as_guid_filter.html @@ -0,0 +1,279 @@ + + + + + + + + microsoft.ad.as_guid filter – Converts an LDAP value to a GUID string — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.as_guid filter – Converts an LDAP value to a GUID string

+
+

Note

+

This filter plugin is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.as_guid.

+
+

New in microsoft.ad 1.1.0

+ +
+

Synopsis

+
    +
  • Converts an LDAP string or raw value to a guid string.

  • +
  • Should be used with the microsoft.ad.ldap plugin to convert attribute values to a guid string.

  • +
+
+
+

Input

+

This describes the input of the filter, the value before | microsoft.ad.as_guid.

+ + + + + + + + + + + +

Parameter

Comments

+

Input

+

any / required

+

The LDAP attribute bytes or string value representing a GUID stored in LDAP.

+

If using a string as input, it must be a base64 string representing the GUIDs bytes.

+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.as_datetime

microsoft.ad.as_datetime filter

+
+
microsoft.ad.as_sid

microsoft.ad.as_sid filter

+
+
microsoft.ad.ldap

microsoft.ad.ldap inventory

+
+
+
+
+
+

Examples

+
# This is an example used in the microsoft.ad.ldap plugin
+
+attributes:
+  objectGuid: raw | microsoft.ad.as_guid
+
+
+
+
+

Return Value

+ + + + + + + + + + + +

Key

Description

+

Return value

+

string

+

The guid string value(s).

+

Returned: success

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+

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 Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/as_sid_filter.html b/tag/1.5.0/collections/microsoft/ad/as_sid_filter.html new file mode 100644 index 0000000..89c0d82 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/as_sid_filter.html @@ -0,0 +1,279 @@ + + + + + + + + microsoft.ad.as_sid filter – Converts an LDAP value to a Security Identifier string — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.as_sid filter – Converts an LDAP value to a Security Identifier string

+
+

Note

+

This filter plugin is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.as_sid.

+
+

New in microsoft.ad 1.1.0

+ +
+

Synopsis

+
    +
  • Converts an LDAP string or raw value to a security identifier string.

  • +
  • Should be used with the microsoft.ad.ldap plugin to convert attribute values to a security identifier string.

  • +
+
+
+

Input

+

This describes the input of the filter, the value before | microsoft.ad.as_sid.

+ + + + + + + + + + + +

Parameter

Comments

+

Input

+

any / required

+

The LDAP attribute bytes or string value representing a Security Identifier stored in LDAP.

+

If using a string as input, it must be a base64 string representing the SIDs bytes.

+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.as_datetime

microsoft.ad.as_datetime filter

+
+
microsoft.ad.as_guid

microsoft.ad.as_guid filter

+
+
microsoft.ad.ldap

microsoft.ad.ldap inventory

+
+
+
+
+
+

Examples

+
# This is an example used in the microsoft.ad.ldap plugin
+
+attributes:
+  objectSid: raw | microsoft.ad.as_sid
+
+
+
+
+

Return Value

+ + + + + + + + + + + +

Key

Description

+

Return value

+

string

+

The security identifier string value(s).

+

Returned: success

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+

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 Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/computer_module.html b/tag/1.5.0/collections/microsoft/ad/computer_module.html new file mode 100644 index 0000000..b208f20 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/computer_module.html @@ -0,0 +1,755 @@ + + + + + + + + microsoft.ad.computer module – Manage Active Directory computer objects — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.computer module – Manage Active Directory computer objects

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.computer.

+
+ +
+

Synopsis

+
    +
  • Manages Active Directory computer objects and their attributes.

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

attributes

+

dictionary

+

The attributes to either add, remove, or set on the AD object.

+

The value of each attribute option should be a dictionary where the key is the LDAP attribute, e.g. firstName, comment and the value is the value, or list of values, to set for that attribute.

+

The attribute value(s) can either be the raw string, integer, or bool value to add, remove, or set on the attribute in question.

+

The value can also be a dictionary with the type key set to bytes, date_time, security_descriptor, or raw and the value for this entry under the value key.

+

The bytes type has a value that is a base64 encoded string of the raw bytes to set.

+

The date_time type has a value that is the ISO 8601 DateTime string of the DateTime to set. The DateTime will be set as the Microsoft FILETIME integer value which is the number of 100 nanoseconds since 1601-01-01 in UTC.

+

The security_descriptor type has a value that is the Security Descriptor SDDL string used for the nTSecurityDescriptor attribute.

+

The raw type is the int, string, or boolean value to set.

+

String attribute values are compared using a case sensitive match on the AD object being managed.

+

See LDAP attributes help for more information.

+

Default: {}

+
+

add

+

dictionary

+

A dictionary of all the attributes and their value(s) to add to the AD object being managed if they are not already present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

remove

+

dictionary

+

A dictionary of all the attributes and their value(s) to remove from the AD object being managed if they are present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

set

+

dictionary

+

A dictionary of all attributes and their value(s) to set on the AD object being managed.

+

This will replace any existing values if they do not match the ones being requested.

+

The order of attribute values are not checked only, only that the values requested are the only values on the object attribute.

+

Set this to null or an empty list to clear any values for the attribute.

+

Default: {}

+
+
+

delegates

+

aliases: principals_allowed_to_delegate

+

dictionary

+

The principal objects that the current AD object can trust for delegation to either add, remove or set.

+

The values for each sub option must be specified as a distinguished name CN=shenetworks,CN=Users,DC=ansible,DC=test

+

This is the value set on the msDS-AllowedToActOnBehalfOfOtherIdentity LDAP attribute.

+

This is a highly sensitive attribute as it allows the principals specified to impersonate any account when authenticating with the AD computer object being managed.

+

To clear all principals, use set with an empty list.

+

See Setting list option values for more information on how to add/remove/set list options.

+
+
+

add

+

list / elements=string

+

The AD objects by their DistinguishedName to add as a principal allowed to delegate.

+

Any existing principals not specified by add will be untouched unless specified by remove or not in set.

+
+
+

remove

+

list / elements=string

+

The AD objects by their DistinguishedName to remove as a principal allowed to delegate.

+

Any existing pricipals not specified by remove will be untouched unless set is defined.

+
+
+

set

+

list / elements=string

+

The AD objects by their DistinguishedName to set as the only principals allowed to delegate.

+

This will remove any existing principals if not specified in this list.

+

Specify an empty list to remove all principals allowed to delegate.

+
+

description

+

string

+

The description of the AD object to set.

+

This is the value set on the description LDAP attribute.

+
+

display_name

+

string

+

The display name of the AD object to set.

+

This is the value of the displayName LDAP attribute.

+
+

dns_hostname

+

string

+

Specifies the fully qualified domain name (FQDN) of the computer.

+

This is the value set on the dNSHostName LDAP attribute.

+
+

domain_password

+

string

+

The password for domain_username.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_username

+

string

+

The username to use when interacting with AD.

+

If this is not set then the user that is used for authentication will be the connection user.

+

Ansible will be unable to use the connection user unless auth is Kerberos with credential delegation or CredSSP, or become is used on the task.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

enabled

+

boolean

+

yes will enable the group.

+

no will disable the group.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

identity

+

string

+

The identity of the AD object used to find the AD object to manage.

+

This must be specified if; name is not set, when trying to rename the object with a new name, or when trying to move the object into a different path.

+

The identity can be in the form of a GUID representing the objectGUID value, the userPrincipalName, sAMAccountName, objectSid, or distinguishedName.

+

If omitted, the AD object to manage is selected by the distinguishedName using the format CN={{ name }},{{ path }}. If path is not defined, the defaultNamingContext is used instead.

+
+

kerberos_encryption_types

+

dictionary

+

Specifies the Kerberos encryption types supported the AD computer account.

+

This is the value set on the msDS-SupportedEncryptionTypes LDAP attribute.

+

Avoid using rc4 or des as they are older an insecure encryption protocols.

+

To clear all encryption types, use set with an empty list.

+

See Setting list option values for more information on how to add/remove/set list options.

+
+

add

+

list / elements=string

+

The encryption types to add to the existing set.

+

Any existing encryption types not specified by add will be untouched unless specified by remove or not in set.

+

Choices:

+
    +
  • "aes128"

  • +
  • "aes256"

  • +
  • "des"

  • +
  • "rc4"

  • +
+
+

remove

+

list / elements=string

+

The encryption types to remove from the existing set.

+

Any existing encryption types not specified by remove will be untouched unless set is defined.

+

Choices:

+
    +
  • "aes128"

  • +
  • "aes256"

  • +
  • "des"

  • +
  • "rc4"

  • +
+
+

set

+

list / elements=string

+

The encryption types to set as the only encryption types allowed by the AD computer.

+

This will remove any existing encryption types if not specified in this list.

+

Specify an empty list to remove all encryption types.

+

Choices:

+
    +
  • "aes128"

  • +
  • "aes256"

  • +
  • "des"

  • +
  • "rc4"

  • +
+
+

location

+

string

+

Sets the location of the computer account.

+

This is the value set on the location LDAP attribute.

+
+

managed_by

+

string

+

The user or group that manages the object.

+

The value can be in the form of a distinguishedName, objectGUID, objectSid, or sAMAccountName).

+

This is the value set on the managedBy LDAP attribute.

+
+

name

+

string

+

The name of the AD object to manage, this is not the sAMAccountName of the object but the LDAP cn or name entry of the object in the path specified. Use identity to select an object to manage by its sAMAccountName.

+

If identity is specified, and the name of the object found by that identity does not match this value, the object will be renamed.

+

This must be specified if identity is not set.

+
+

path

+

string

+

The path of the OU or the container where the new object should exist in.

+

If creating a new object, the new object will be created at the path specified. If no path is specified then the defaultNamingContext of the domain will be used as the path for most object types.

+

If managing an existing object found by identity, the path of the found object will be moved to the one specified by this option. If no path is specified, the object will not be moved.

+

The modules microsoft.ad.computer, microsoft.ad.user, and microsoft.ad.group have their own default path that is configured on the Active Directory domain controller.

+

This can be set to the literal value microsoft.ad.default_path which will equal the default value used when creating a new object.

+
+

protect_from_deletion

+

boolean

+

Marks the object as protected from accidental deletion.

+

This applies a deny access right from deleting the object normally and the protection needs to be removed before the object can be deleted through the GUI or any other tool outside Ansible.

+

Using state=absent will still delete the AD object even if it is marked as protected from deletion.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

sam_account_name

+

string

+

The sAMAccountName value to set for the group.

+

If omitted, the name value is used when creating a new group.

+

It has a maximum of 256 characters, 15 is advised for older operating systems compatibility.

+

If ommitted the value is the same as name$ when the computer is created.

+

Note that all computer sAMAccountName values need to end with a $.

+

If $ is omitted, it will be added to the end.

+
+
+

spn

+

aliases: spns

+

dictionary

+

Specifies the service principal name(s) for the account to add, remove or set.

+

This is the value set on the servicePrincipalName LDAP attribute.

+

To clear all service principal names, use set with an empty list.

+

See Setting list option values for more information on how to add/remove/set list options.

+
+
+

add

+

list / elements=string

+

The SPNs to add to servicePrincipalName.

+
+
+

remove

+

list / elements=string

+

The SPNs to remove from servicePrincipalName.

+
+
+

set

+

list / elements=string

+

The SPNs to set as the only values in servicePrincipalName.

+

This will clear out any existing SPNs if not in the specified list.

+

Set to an empty list to clear all SPNs on the AD object.

+
+

state

+

string

+

Set to present to ensure the AD object exists.

+

Set to absent to remove the AD object if it exists.

+

The option name must be set when state=present.

+

Using absent will recursively remove the AD object and any child objects if it’s a container. It will also remove the AD object even if the object is marked as protected from accidental deletion.

+

Choices:

+
    +
  • "absent"

  • +
  • "present" ← (default)

  • +
+
+

trusted_for_delegation

+

boolean

+

Specifies whether an account is trusted for Kerberos delegation.

+

This is also known as unconstrained Kerberos delegation.

+

This sets the ADS_UF_TRUSTED_FOR_DELEGATION flag in the userAccountControl LDAP attribute.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

upn

+

string

+

Configures the User Principal Name (UPN) for the account.

+

The format is <username>@<domain>.

+

This is the value set on the userPrincipalName LDAP attribute.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • See win_domain_computer migration for help on migrating from community.windows.win_domain_computer to this module.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
  • Some LDAP attributes can have only a single value set while others can have multiple. Some attributes are also read only and cannot be changed. It is recommended to look at the schema metadata for an attribute where System-Only are read only values and Is-Single-Value are attributes with only 1 value.

  • +
  • Attempting to set multiple values to a Is-Single-Value attribute results in undefined behaviour.

  • +
  • If running on a server that is not a Domain Controller, credential delegation through CredSSP or Kerberos with delegation must be used or the domain_username, domain_password must be set.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.membership

Manage domain/workgroup membership for a Windows host.

+
+
microsoft.ad.object_info

Gather information an Active Directory object.

+
+
microsoft.ad.object

Manage Active Directory objects.

+
+
microsoft.ad.offline_join

Get the Offline Domain Join BLOB.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
Migration guide

This module replaces community.windows.win_domain_computer. See the migration guide for details.

+
+
community.windows.win_domain_computer

The official documentation on the community.windows.win_domain_computer module.

+
+
+
+
+
+

Examples

+
- name: Add linux computer to Active Directory OU using a windows machine
+  microsoft.ad.computer:
+    name: one_linux_server
+    sam_account_name: linux_server$
+    dns_hostname: one_linux_server.my_org.local
+    path: OU=servers,DC=my_org,DC=local
+    description: Example of linux server
+    enabled: yes
+    state: present
+
+- name: Remove linux computer from Active Directory using a windows machine
+  microsoft.ad.computer:
+    identity: one_linux_server
+    state: absent
+
+- name: Add SPNs to computer
+  microsoft.ad.computer:
+    identity: TheComputer
+    spn:
+      add:
+      - HOST/TheComputer
+      - HOST/TheComputer.domain.test
+      - HOST/TheComputer.domain.test:1234
+
+- name: Remove SPNs on the computer
+  microsoft.ad.computer:
+    identity: TheComputer
+    spn:
+      remove:
+      - HOST/TheComputer
+      - HOST/TheComputer.domain.test
+      - HOST/TheComputer.domain.test:1234
+
+- name: Set the principals the computer trusts for delegation from
+  microsoft.ad.computer:
+    identity: TheComputer
+    delegates:
+      set:
+      - CN=FileShare,OU=Computers,DC=domain,DC=test
+      - CN=DC,OU=Domain Controllers,DC=domain,DC=test
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + + + + + + + +

Key

Description

+

distinguished_name

+

string

+

The distinguishedName of the AD object that was created, removed, or edited.

+

Returned: always

+

Sample: "CN=MyComputer,CN=Computers,DC=domain,DC=test"

+
+

object_guid

+

string

+

The objectGUID of the AD object that was created, removed, or edited.

+

If a new object was created in check mode, a GUID of 0s will be returned.

+

Returned: always

+

Sample: "d84a141f-2b99-4f08-9da0-ed2d26864ba1"

+
+

sid

+

string

+

The Security Identifier (SID) of the account managed.

+

If a new computer was created in check mode, the SID will be S-1-5-0000.

+

Returned: always

+

Sample: "S-1-5-21-4151808797-3430561092-2843464588-1104"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/debug_ldap_client_module.html b/tag/1.5.0/collections/microsoft/ad/debug_ldap_client_module.html new file mode 100644 index 0000000..ab11032 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/debug_ldap_client_module.html @@ -0,0 +1,532 @@ + + + + + + + + microsoft.ad.debug_ldap_client module – Get host information for debugging LDAP connections — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.debug_ldap_client module – Get host information for debugging LDAP connections

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.debug_ldap_client.

+
+

New in microsoft.ad 1.1.0

+ +
+

Synopsis

+
    +
  • Get information about the current Ansible host to debug LDAP connections and their capabilities.

  • +
+
+

Note

+

This module has a corresponding action plugin.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

action

+

Support: full

+

Indicates this has a corresponding action plugin so some parts of the options can be executed on the controller

+
+

async

+

Support: full

+

Supports being used with the async keyword

+
+

bypass_host_loop

+

Support: none

+

Forces a ‘global’ task that does not execute per host, this bypasses per host templating and serial, throttle and other loop considerations

+

Conditionals will work as if run_once is being used, variables used will be from the first available host

+

This action will not work normally outside of lockstep strategies

+
+

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

+
+

platform

+

Platform: posix

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • See LDAP connection help for more information about LDAP connections.

  • +
  • The return values are not part of any contract and can change in the future. It is meant to give a snapshot of the Ansible host that can help debug LDAP connection issues and not be used as part of a normal playbook.

  • +
+
+
+
+

Examples

+
- name: Get information about the Ansible host's LDAP capabilities
+  microsoft.ad.debug_ldap_client:
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Key

Description

+

dns

+

complex

+

Details about the SRV LDAP server lookup.

+

The values will only be populated if dnspython is installed.

+

Returned: always

+
+

default_port

+

integer

+

The default port of the SRV record chosen.

+

Returned: dnspython is installed

+

Sample: 389

+
+

default_server

+

string

+

The default hostname of the SRV record chosen.

+

Returned: dnspython is installed

+

Sample: "dc01.domain.com"

+
+

exception

+

string

+

Any exceptions that occurred when getting the SRV records.

+

Returned: dnspython is installed

+

Sample: ""

+
+

records

+

list / elements=string

+

The SRV records that were found during the LDAP server lookup.

+

Returned: dnspython is installed

+
+

port

+

integer

+

The port of this SRV record.

+

Returned: dnspython is installed and default_realm is found

+

Sample: 389

+
+

priority

+

integer

+

The record priority value.

+

Returned: dnspython is installed and default_realm is found

+

Sample: 0

+
+

target

+

string

+

The target name of the SRV record.

+

Returned: dnspython is installed and default_realm is found

+

Sample: "dc01.domain.com."

+
+

weight

+

integer

+

The record weight value.

+

Returned: dnspython is installed and default_realm is found

+

Sample: 100

+
+

kerberos

+

complex

+

Details about the host Kerberos setup.

+

The values will only be populated if krb5 is installed.

+

Returned: always

+
+

default_cc

+

complex

+

Details about the default Kerberos credential cache.

+

Returned: krb5 is installed

+
+

creds

+

complex

+

A list of credentials that is stored in the ccache.

+

This requires krb5 >= 0.5.0 to be populated.

+

Returned: krb5 is installed

+
+

client

+

string

+

The client principal name the credential is for.

+

Returned: krb5 >= 0.5.0 is installed

+

Sample: "username@DOMAIN.COM"

+
+

server

+

string

+

The server principal name the credential is for.

+

Returned: krb5 >= 0.5.0 is installed

+

Sample: "krbtgt/DOMAIN.COM@DOMAIN.COM"

+
+

exception

+

string

+

Any exceptions that occurred when getting the ccache information.

+

Returned: krb5 is installed

+

Sample: ""

+
+

name

+

string

+

The default ccache type and name.

+

Returned: krb5 is installed

+

Sample: "FILE:/tmp/krb5cc_1000"

+
+

principal

+

string

+

The default principal of the ccache

+

Returned: krb5 is installed

+

Sample: "username@DOMAIN.COM"

+
+

default_realm

+

string

+

The default_realm as reported by Kerberos.

+

This value is used for the automatic server lookup.

+

Returned: krb5 is installed

+

Sample: "domain.com"

+
+

exception

+

string

+

Exception details if the default realm could not be retrieved.

+

Returned: krb5 is installed

+

Sample: ""

+
+

packages

+

complex

+

All the packages used by this collection for LDAP connections and their installed versions.

+

If the package is not installed, or failed to import, the value is the traceback from the import process.

+

This can be used to determine the availability of optional features like Kerberos authentication or server lookups.

+

Returned: always

+
+

dnspython

+

string

+

The installed version of dnspython or the import error if not installed.

+

Returned: always

+

Sample: "2.3.0"

+
+

dpapi_ng

+

string

+

The installed version of dpapi-ng or the import error if not installed.

+

Returned: always

+

Sample: "0.1.0"

+
+

krb5

+

string

+

The installed version of krb5 or the import error if not installed.

+

Returned: always

+

Sample: "0.5.0"

+
+

pyspnego

+

string

+

The installed version of pyspnego or the import error if not installed.

+

Returned: always

+

Sample: "0.8.0"

+
+

sansldap

+

string

+

The installed version of sansldap or the import error if not installed.

+

Returned: always

+

Sample: "0.1.0"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/dn_escape_filter.html b/tag/1.5.0/collections/microsoft/ad/dn_escape_filter.html new file mode 100644 index 0000000..aa83fae --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/dn_escape_filter.html @@ -0,0 +1,284 @@ + + + + + + + + microsoft.ad.dn_escape filter – Escape an LDAP DistinguishedName value string. — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.dn_escape filter – Escape an LDAP DistinguishedName value string.

+
+

Note

+

This filter plugin is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.dn_escape.

+
+

New in microsoft.ad 1.5.0

+ +
+

Synopsis

+
    +
  • Escapes a string value for use in an LDAP DistinguishedName.

  • +
  • This can be used to escape special characters when building a DistinguishedName value.

  • +
+
+
+

Input

+

This describes the input of the filter, the value before | microsoft.ad.dn_escape.

+ + + + + + + + + + + +

Parameter

Comments

+

Input

+

string / required

+

The string value to escape.

+

This should be just the RDN value not including the attribute type that prefixes the value, for example MyValue and not CN=MyValue.

+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.parse_dn

microsoft.ad.parse_dn filter

+
+
microsoft.ad.ldap

microsoft.ad.ldap inventory

+
+
+
+
+
+

Examples

+
# This is an example used in the microsoft.ad.ldap plugin
+
+search_base: OU={{ my_ou_variable | microsoft.ad.dn_escape }},DC=domain,DC=com
+
+# This is an example with the microsoft.ad.user module
+
+- microsoft.ad.user:
+    name: MyUser
+    password: MyPassword123
+    state: present
+    path: OU={{ my_ou_variable | microsoft.ad.dn_escape }},DC=domain,DC=com
+
+
+
+
+

Return Value

+ + + + + + + + + + + +

Key

Description

+

Return value

+

string

+

The escaped RDN attribute value.

+

Returned: success

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+

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 Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/docsite/guide_attributes.html b/tag/1.5.0/collections/microsoft/ad/docsite/guide_attributes.html new file mode 100644 index 0000000..ebe37c0 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/docsite/guide_attributes.html @@ -0,0 +1,441 @@ + + + + + + + Attributes guide — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+ +
+ + +
+ +
+

Attributes guide

+

A common use case for modules in this collection is to manage various Active Directory objects, such as users, groups, computers, and more. Some of these options are exposed as direct module options but other attributes might need to be set through the attributes option common to most modules in this collection.

+ +
+

LDAP Attributes

+

One core component of Microsoft’s Active Directory (AD) is a Lightweight Directory Access Protocol (LDAP) database. This database contains all the information relevant to an AD environment such as users, computers, organizational units, and more. Each object contains a dynamic set of attributes to describe the object and conform to a schema. For example users contain attributes like firstName, country, sAMAccountName to describe the object itself. Microsoft document all the builtin attributes in AD in their AD Attribute Schema. For example the SAM-Account-Name attribute contains the metadata around this attribute. It includes fields like:

+
    +
  • Ldap-Display-Name - The LDAP display name

  • +
  • Syntax - The underlying value type that the attribute stores

  • +
  • System-Only - Whether the attribute is set by the system, effectively making it read only

  • +
  • Is-Single-Value - Whether the attribute value is a single value or an array/list of values

  • +
+

The Ldap-Display-Name is the attribute name/key that is referenced by the Ansible module. For example to manage the SAM-Account-Name attribute, it would be referenced by the key sAMAccountName. Each attribute has at least 1 value associated with it, but some attributes can have multiple values. For example sAMAccountName is a Is-Single-Value attribute so only has one value but userCert can contain multiple values. The Active Directory Users and Computers snap-in (or dsa.msc) can be used to view these LDAP attributes in the advanced mode. This is useful for seeing existing values as well as what attributes can be set on an object.

+

The LDAP schema in AD can also be extended to add custom attributes for an organization. These custom attributes are also supported in the modules in this collection. To get the LDAP schema information for attributes, the following can be run in PowerShell:

+
Function Get-AttributeMetadata {
+    [CmdletBinding()]
+    param ([Parameter(ValueFromPipeline)][string[]]$Name)
+
+    begin {
+        $schema = (Get-ADRootDSE -Properties subschemaSubentry).subschemaSubentry
+        $getParams = @{
+            SearchBase = $schema
+            LDAPFilter = '(objectClass=*)'
+            Properties = 'attributeTypes'
+        }
+        $attributes = (Get-ADObject @getParams).attributeTypes
+        $queried = $false
+    }
+
+    process {
+        foreach ($n in $Name) {
+            $queried = $true
+            $attributes | Where-Object {
+                $_ -like "*Name '$n'*"
+            }
+        }
+    }
+
+    end {
+        if (-not $queried) {
+            $attributes
+        }
+    }
+}
+
+# Display all attributes
+Get-AttributeMetadata
+
+# Get specific attributes
+Get-AttributeMetadata -Name sAMAccountName, o, objectGuid
+
+
+

The output is in the format:

+
( $ATTRIBUTE_OID NAME '$ATTRIBUTE_NAME' SYNTAX '$TYPE_OID' [SINGLE-VALUE|NO-USER-MODIFICATION] )
+
+
+

The $TYPE_OID specifies the value type that can be used for this attribute. search the OID online for more information. The SINGLE-VALUE specifies if the attribute can only store 1 value. The NO-USER-MODIFICATION specifies if the attribute is read only and cannot be set.

+

The last example outputs:

+
( 1.2.840.113556.1.4.221 NAME 'sAMAccountName' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE )
+( 2.5.4.10 NAME 'o' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+( 1.2.840.113556.1.4.2 NAME 'objectGUID' SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' SINGLE-VALUE NO-USER-MODIFICATION )
+
+
+

This shows the sAMAccountName is a string that can only have 1 value. The o attribute is also a string but can store multiple values. The objectGUID is a byte array value that can only have 1 value and is also read only.

+
+
+

Setting Attributes

+

Each module that manages an Active Directory object will have an attributes option which is used to configure LDAP attributes directly. The dictionary accepts three keys:

+
    +
  • add - Adds the attribute values if not present

  • +
  • remove - Removes the attribute values if present

  • +
  • set - Replaces the existing attribute values with the ones specified.

  • +
+

Each of these keys contain a dictionary value where the keys are the LDAP attribute names by ldapDisplayName and their values to set. As an LDAP attribute can contain multiple values, the values specified can either be a single value or a list of values, for example:

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        comment: My Comment
+        extensionName:
+        - Extension Value 1
+        - Extension Value 2
+        - Extension Value 3
+
+
+

The above example will set the comment LDAP attribute of the MyUser object to the value specified. It will also ensure the extensionName attribute is set to those three values, removing any other value if present.

+

The add key can be used to ensure the LDAP attribute values specified are added to the Attribute value list. The opposite is true for attributes under the remove key. Any attributes there will have the values specified removed if they are present on the attribute in question. For example:

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      add:
+        extensionName:
+        - Extension Value 1
+        - Extension Value 3
+      remove:
+        extensionName:
+        - Extension Value 2
+
+
+

The above example will ensure the extensionName has the values Extension Value 1, Extension Value 3 and remove Extension Value 2 if it is set. Because set was not used, any existing values will not be touched unless they are in the remove entry.

+
+

Note

+

Only use LDAP attributes that can contain multiple values with add or remove. Using a Is-Single-Value attribute will result in undefined behaviour.

+
+

To clear an attribute value, define the attribute under set and set the value to either null (~) or an empty list. For example

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        # Null can either be represented by no value
+        # or with tilde (~)
+        comment: ~
+        company:
+        extensionName: []
+
+
+

This task will ensure the comment, company, and extensionName attributes are cleared of any value.

+
+
+

Attribute Types

+

There are a few different value types that can be stored in an attribute. +The common types are:

+
    +
  • Strings

  • +
  • Integers

  • +
  • Booleans

  • +
  • Byte Arrays

  • +
  • Dates

  • +
  • Security Descriptors

  • +
+

Setting a string, integer, or boolean value through an Ansible task is simply done through the YAML syntax, for example:

+
string: This is a string
+integer: 1
+boolean: true
+
+
+
+

Note

+

Strings are compared in a case sensitive operation, that is "String" != "string".

+
+

These simple types can also be represented by a dictionary with the keys type and value. The type key can be set to one of the following:

+
    +
  • bool - Value is casted to a boolean

  • +
  • bytes - Value is decoded as a base64 string

  • +
  • date_time - Value is decoded as an ISO 8601 datetime string

  • +
  • int - Value is decoded as an integer

  • +
  • security_descriptor - Value is decoded as a SDDL string

  • +
  • string - Value is casted to a string

  • +
  • raw - Value is used as is - this is the default type used

  • +
+

This looks like the following:

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        # comment: A raw value that is a string
+        comment:
+          type: raw
+          value: A string
+
+        # userAccountControl: 1234
+        userAccountControl:
+          type: int
+          value: 1234
+
+        # extensionName: ['Value 1', 'Value 2']
+        extensionName:
+        - type: raw
+          value: Value 1
+        - type: raw
+          value: Value 2
+
+
+

The complex dictionary value with the type and value structure is only really needed for the more complex types listed below. If omitted the value is treated as type: raw.

+
+

Byte Arrays

+

As raw bytes cannot be expressed in YAML, to set an attribute with a byte array value the following format is used:

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        # Attribute with single value
+        dsaSignature:
+          type: bytes
+          value: YmluYXJ5
+        # Attribute with multiple values
+        userCertificate:
+        - type: bytes
+          value: Zm9vYmFy
+        - type: bytes
+          value: YmFyZm9v
+
+
+

The value specified here is the bytes encoded as a base64 string.

+

The ansible.builtin.b64encode filter can be used to encode strings on the fly, and the ansible.builtin.file lookup could be used to read data from a file.

+
- vars:
+    sig_data: "{{ lookup('ansible.builtin.file', '/path/to/my/sig') }}"
+  microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        # Attribute with single value
+        dsaSignature:
+          type: bytes
+          value: "{{ sig_data | ansible.builtin.b64encode }}"
+
+
+
+
+

Dates

+

Attributes with datetime values are technically integer values but represent a point in time. For ease of use, these entries can be represented as an ISO 8601 extended format datetime and will be internally represented by the integer value. To specify an attribute value in the datetime format, use the same dictionary value structure as above but set the type to date_time. For example:

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        dateAttributeSingleValue:
+          type: date_time
+          value: '2019-09-07T15:50:00+00:00'
+        dateAttributeMultipleValue:
+        - type: date_time
+          value: '2019-09-07T15:50:00Z'
+        - type: date_time
+          value: '2019-09-07T11:50:00-04:00'
+
+
+

Internally the datetime is converted to the UTC time and converted to the number of 100 nanosecond increments since 1601-01-01. This PowerShell snippet shows what is happening internally to get the integer value:

+
$dt = '2019-09-07T15:50:00Z'
+$dtVal = [DateTimeOffset]::ParseExact(
+    $dt,
+    [string[]]@("yyyy-MM-dd'T'HH:mm:ss.FFFFFFFK"),
+    [System.Globalization.CultureInfo]::InvariantCulture,
+    [System.Globalization.DateTimeStyles]::AssumeUniversal)
+$dtVal.UtcDateTime.ToFileTimeUtc()
+
+
+
+

Note

+

If no timezone is specified, it is assumed to be in UTC.

+
+
+
+

Security Descriptors

+

A security descriptor is stored as a byte array in the attribute but the security_descriptor type can be used to more conveniently represent this value in a playbook. The value specified is the Security Descriptor Definition Language (SDDL). This string is internally converted to the byte array needed to set the SDDL. An example of setting an attribute of this type is:

+
- microsoft.ad.user:
+    name: MyUser
+    state: present
+    attributes:
+      set:
+        nTSecurityDescriptor:
+          type: security_descriptor
+          value: O:DAG:DAD:PAI(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
+
+
+

SDDL strings can be quite complex so building them manually is ill-advised. It is recommended to build a test object in the Active Directory Users and Computers snap-in (or dsa.msc) and set the security as needed in the Security tab. From there the SDDL string can be retrieved by doing the following:

+
$dn = 'CN=ObjectName,DC=domain,DC=test'
+$obj = Get-ADObject -Identity $dn -Properties nTSecurityDescriptor
+$obj.nTSecurityDescriptor.GetSecurityDescriptorSddlForm('All')
+
+
+
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/docsite/guide_ldap_connection.html b/tag/1.5.0/collections/microsoft/ad/docsite/guide_ldap_connection.html new file mode 100644 index 0000000..e2cdbf7 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/docsite/guide_ldap_connection.html @@ -0,0 +1,408 @@ + + + + + + + LDAP Connection guide — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

LDAP Connection guide

+

This guide covers information about communicating with an LDAP server, like Microsoft Active Directory, from the Ansible host. Unlike Windows hosts, there are no builtin mechanisms to communicate and authenticate with an LDAP server, so the plugins that run on the Ansible host require some extra configuration to get working.

+
+

Note

+

This guide covers LDAP communication from the Ansible host. This does not apply to the modules that run on the remote Windows hosts.

+
+ +
+

Requirements

+

The LDAP connection code requires the sansldap and pyspnego libraries. They can be installed using pip with:

+
$ python3 -m pip install --user \
+    'pyspnego >= 0.8.0'
+    sansldap
+
+
+
+

Note

+

This guide assumes python3 is the same Python that Ansible uses, see ansible --version for details on the Python version/location.

+
+

There are also optional dependencies to provide extra features

+ + + + + + + + + + + + + + + + + +

Feature

Package

Kerberos Authentication

pyspnego[kerberos] >= 0.8.0

Server Lookups

dnspython

LAPS Decryption

dpapi-ng

+

To install all the optional features run:

+
$ python3 -m pip install --user \
+    dnspython \
+    dpapi-ng \
+    'pyspnego[kerberos] >= 0.8.0'
+
+
+

The Kerberos authentication components require the Kerberos system libraries to be present. For RPM based systems, these are:

+
$ dnf install gcc python3-devel krb5-libs krb5-devel
+
+
+

Other Linux distributions require the same packages listed above but they are likely listed under different names than what dnf uses.

+

The microsoft.ad.debug_ldap_client. action plugin can be used to debug the Ansible host setup and its LDAP capabilities. It includes details such as:

+
    +
  • The Python packages related to LDAP that are installed, or import failure messages if not installed

  • +
  • The Kerberos host and credential cache information if the Kerberos extras are installed

  • +
  • The SRV lookup information if dnspython and Kerberos extras are installed

  • +
+

To use this module simply run

+
$ ansible localhost -m microsoft.ad.debug_ldap_client
+
+
+
+
+

Connection options

+

Connecting to a Microsoft Active Directory or LDAP server requires information like the domain controller hostname, port, whether to use LDAPS or StartTLS, and authentication information. Some of this information can be retrieved based on the Ansible host environment but can also be manually specified through the plugin options. These options include:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Option

Default

Purpose

server

Server lookup through Kerberos

The LDAP server hostname

port

389 or 686 if tls_mode=ldaps

The LDAP port

tls_mode

LDAPS if port=686 else None

TLS details - LDAP, LDAP + StartTLS, LDAPS

auth_protocol

Negotiate

Authentication protocol

username

None

Attempts to use Kerberos cache if available

password

None

Attempts to use Kerberos cache if available

+

The server lookup details are described below. The port defaults to 389 unless tls_mode: ldaps is specified. The TLS mode defaults to ldaps if the port is explicitly set to 686 otherwise it defaults to 389. The authentication protocol defaults to negotiate while attempting to use the implicit credential if it’s available.

+
+

Server lookup

+

If no server option was explicitly set, the plugin will attempt to lookup the LDAP server based on the current environment configuration. This is only possible if:

+
    +
  • The dnspython Python package is installed

  • +
  • The pyspnego[kerberos] Python package for Kerberos is installed

  • +
  • The underlying Kerberos library has a default_realm set in the MIT krb5.conf

  • +
+

If none of the above are true, the connection will fail and an explicit server must be supplied. If all the requirements are satisfied this is the server lookup workflow:

+
    +
  • The default_realm of the local Kerberos configuration is retrieved

  • +
  • A DNS SRV lookup is done for the record _ldap._tcp.dc._msdcs.{{ default_realm }}

  • +
  • The DNS records are sorted by priority and weight and the first is selected

  • +
  • The hostname and port on the selected SRV record are used for the lookup

  • +
+
+

Note

+

If an explicit port is specified, it will take priority over the port returned by the SRV record.

+
+
+
+
+

Authentication

+

A critical component of LDAP connections is how the user authenticates itself to the server. The following authentication mechanisms are supported:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Authentication

Supports Encryption

Implicit Credential

simple

No - TLS needed

Yes - Appears as Anonymous

certificate

Yes

No

negotiate

Yes

Yes - With Kerberos

kerberos

Yes

Yes

ntlm

Yes

No

+

Unless otherwise specified, the default authentication protocol used is negotiate which relies on the pyspnego library. See requirements for more information on how to install this requirement.

+

Any protocol that does not support encryption must either be used with LDAPS, StartTLS, or they must explicitly disable the encryption checks with the encrypt: false option. Disabling encryption is not recommended as it will send the credentials without any protection and any of the data exchanged can be seen by anyone. It also requires the target server to allow unencrypted connections as they can reject such connections.

+

Implicit credential support documents whether the authentication protocol can authenticate without an explicit username and password specified. Currently only simple and negotiate/kerberos supports implicit credentials. See each protocol section for more details.

+
+

Simple

+

Simple authentication is the most basic authentication protocol supported. It works by sending the username and password in plaintext to the server, similar to HTTP Basic authentication. Microsoft AD requires the username to be the sAMAccountName or userPrincipalName of the account but other LDAP implementations require the LDAP distinguishedName. While it is possible to do an anonymous bind when no username or password is specified, it is likely the server will reject any search operations unless it is authenticated with an actual users credentials. Simple authentication is not allowed over a connection that is not protected by TLS. It is possible to allow simple authentication over such connections by disabling the encryption check but this is not recommended.

+
+

Warning

+

Simple authentication should be avoided unless TLS is used, either through LDAPS or StartTLS. Failure to use use LDAPS will expose the credentials used during the authentication and the subsequent data unprotected from eavesdropping or tampering.

+
+
+
+

Certificate

+

Certificate authentication uses TLS client authentication as part of the TLS handshake to authenticate the user to the host. As it is part of the TLS handshake, it can only be used over an LDAPS connection or with StartTLS. It uses a certificate and certificate key of the user to authenticate as. There are three options that can be used to specify a client certificate and key to use for authentication:

+
    +
  • certificate - The certificate, and optionally bundled key

  • +
  • certificate_key - The certificate key if not bundled in certificate

  • +
  • certificate_password - The password used to decrypt the certificate key

  • +
+

The certificate and certificate_key can either be a file path to the certificate and key or they can be a string of the PEM encoded certificate/key. The certificate file path can be a PEM, DER, or PKCS12/PFX encoded certificate with optional key bundle whereas the certificate_key file path can be a PEM or DER encoded key. If the key inside the PEM, DER, or PKCS12/PFX content is encrypted, the certificate_password can be used to specify the password used to decrypt the key.

+
+

Note

+

Setting these options are dependent on the plugin itself, the keys here reflect the option name and not necessarily Ansible variables that can be set and read automatically by a plugin.

+
+
+
+

Negotiate

+

Negotiate authentication is the default authentication protocol used by LDAP connections. It is a combination of both kerberos and ntlm with the client negotiating which one to use. It will favor kerberos if it is available and fallback to ntlm if not. The pyspnego Python package provides negotiate with just ntlm support, kerberos support is provided by the pyspnego[kerberos] extras option. See requirements for more information on how to install this requirement.

+
+
+

Kerberos

+

Kerberos authentication is a modern authentication protocol supported by Microsoft AD servers and is the preferred protocol for authentication. It is only available if the pyspnego[kerberos] extras package is installed and the host has been configured properly. Typically this configuration is done through the /etc/krb5.conf file on the system. This guide will not go into configuring the host’s Kerberos settings as it is environment specific.

+

A good way to ensure the host has been configured to use Kerberos correctly is to ensure the following commands work:

+
$ python -c "import krb5"
+$ kinit username@DOMAIN.REALM
+$ kvno ldap/dc.domain.realm
+
+
+
+

Note

+

The kvno command is an MIT krb5 specific command, it is not available on hosts that use Heimdal krb5 like macOS.

+
+

The python command ensures the required Python libraries have been installed. The kinit command will retrieve a Kerberos ticket for the user specified and the kvno command will attempt to retrieve a service ticket for the service principal name (SPN) requested. If both commands work then there is a good chance Kerberos authentication will work with the LDAP connection.

+

Using the kinit command it is possible to set up a credential cache for Ansible to use for authentication. By having a credential retrieved using kinit, it is possible to authenticate with the LDAP server without any explicit username and password set in Ansible. It is still possible to use Kerberos with explicit credentials.

+
+
+

NTLM

+

NTLM authentication is a simple authentication protocol that can be used by itself or as part of the negotiate fallback if kerberos is unavailable. Unlike kerberos support, it does not normally support implicit credentials so typically needs an explicit username and password specified to be used. It requires no extra host configuration and should work once pyspnego has been installed.

+
+

Warning

+

While NTLM does support encryption it is considered weak by modern standards. It is recommended to only use NTLM with an LDAPS or StartTLS connection where the stronger encryption and server checks provided by TLS mitigate the weaknesses in NTLM.

+
+
+
+
+

Certificate validation

+

Using LDAPS or LDAP over StartTLS will perform a TLS handshake which by default has the client attempting to validate the certificate presented by the server. If the certificate chain cannot be trusted, or the hostname does not match the one being requested the connection will fail with an error indicating why. The default trust store location is dependent on the Python configuration and what SSL library it has been linked to. Typically it would be the OS’ default trust store but when in doubt the following Python code can be used to verify the LDAPS certificate. Make sure to change hostname to the hostname of the LDAP server that should be tested.

+
import socket
+import ssl
+
+hostname = 'dc.domain.com'
+port = 636
+context = ssl.create_default_context()
+
+with socket.create_connection((hostname, port)) as sock:
+    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
+        print(ssock.version())
+
+
+

The ca_cert connection option can be used to set an explicit CA bundle to use for verification. This is useful if the CA bundle is not part of the OS store but located somewhere else on the filesystem. The value can be in the form of:

+
    +
  • a file path to a PEM or DER encoded bundle of certificates

  • +
  • A directory path that contains several CA certificates in the PEM format following an OpenSSL specific layout as document by CApath

  • +
  • A string containing PEM encoded certificates

  • +
+

It is also possible to disable certificate verification using the cert_validation connection option. The default is always but can be set to ignore to disable all checks or ignore_hostname to disable just the hostname check. This can be useful for test environments that use self signed certificates but it should not be used in a production environment.

+
+

Warning

+

Disabling certificate validation removes a lot of the benefits that TLS offers. There is no way to verify the target server is who it says that it is.

+
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/docsite/guide_ldap_inventory.html b/tag/1.5.0/collections/microsoft/ad/docsite/guide_ldap_inventory.html new file mode 100644 index 0000000..18452cc --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/docsite/guide_ldap_inventory.html @@ -0,0 +1,560 @@ + + + + + + + LDAP Inventory guide — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

LDAP Inventory guide

+

This guide covers information about the LDAP inventory plugin included in this collection. This inventory plugin can be used to build an inventory from an LDAP server source, like Microsoft Active Directory.

+ +
+

Connection info

+

Details on how to configure an LDAP connection can be found under the LDAP connection guide. Each of the connection options described by the plugin documentation are specified in the inventory yml configuration file like the below.

+
plugin: microsoft.ad.ldap
+
+# LDAP connection options can be defined in the yaml config.
+auth_protocol: simple
+username: UserName
+password: MyPassword123
+tls_mode: ldaps
+
+
+
+
+

Attributes

+

The LDAP inventory plugin can be used to set custom facts for each host it retrieves based on the computer object’s LDAP attributes. Retrieving custom attributes is done through the attributes option in the inventory plugin definition. The value is set to one of the three following types:

+
    +
  • Empty string or null

  • +
  • A template string

  • +
  • A dictionary

  • +
+
+

Note

+

While an individual attribute can only be set to one of these types, it is possible to use the different value types for different attributes.

+
+

It is also possible to use the compose inventory option to use the builtin compose templating provided by inventory plugins but the LDAP attributes must first be requested through the attributes option and referenced in the compose template through the host fact the attributes set it on.

+
+

Empty string or null

+
attributes:
+  comment:
+  objectSid: ''
+  ms-Mcs-AdmPwd:
+
+
+

In this case each of the attribute values will be set as a host fact as they are coerced by the LDAP schema, see value types and templating. The name of each fact will be based on the attribute name with - being replaced by _. In the above example the host facts comment, objectSid, and ms_Mcs_AdmPwd will be set to the coerced values.

+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+comment: test comment
+ms_Mcs_AdmPwd: Password123!
+objectSid: S-1-5-21-1234-1108
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+
+
+

Template string

+
attributes:
+  comment: this
+  objectSid: raw | microsoft.ad.as_sid
+  ms-Mcs-AdmPwd: raw | first
+
+
+

This format will set the host fact based on the template value specified. Each template is implicitly wrapped with {{ ... }} and processed through Jinja2 to produce a result. This means the template string can contain filters provided by Ansible and other collections to convert the raw LDAP value into something more useful. The this variable refers to the coerced LDAP attribute value and raw refers to a list of base64 encoded byte strings of the raw LDAP attribute value. See value types and templating for more information around what can be done inside the templates. Each host fact will be named after the attribute name with - being replaced by _. In the above example the host facts command, objectSid, and ms_Mcs_AdmPwd will be set to the template results.

+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+comment: test comment
+ms_Mcs_AdmPwd: UGFzc3dvcmQxMjMh
+objectSid:
+- S-1-5-21-1234-1108
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+
+
+

Dictionary

+
attributes:
+  comment:
+    # Jinja2 native types will automatically convert this to a dict as
+    # the value is a json string.
+    my_comment:
+    other_var: this | from_json
+  objectSid:
+    sid: raw | microsoft.ad.as_sid | first
+  ms-Mcs-AdmPwd:
+    ansible_password: this
+
+
+

The final value that can be set on each attribute values is a dictionary where the keys are the host facts to set and the value is the template used to dervice the final value. It can be null or an empty string to refer to the LDAP coerced value of that attribute (this) or a template string to template a new value based on the requirements at hand. See the above two formats for more info on null/empty string vs a string template value. In the above example there are 4 host facts set:

+
    +
  • my_command - the coerced value for the comment attribute

  • +
  • other_var - a dictionary created from the coerced value of comment if it was a json string

  • +
  • sid - the computer SID value as a string derived from objectSid

  • +
  • ansible_password - the LAPS password coerced value derived from ms-Mcs-AdmPwd

  • +
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+ansible_password: Password123!
+my_comment:
+  foo: bar
+other_var:
+  foo: bar
+sid: S-1-5-21-1234-1108
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+
+

Note

+

The host fact names are used literally, there are no conversions from - to _ when using this format.

+
+
+
+
+

Inventory hostname

+

By default the inventory_hostname for a found host will be based on the name LDAP attribute value. If the dNSHostName attribute is set for the computer account found, it will be set as the ansible_host fact. To define a custom inventory_hostname or ansible_host either set it in the attributes or compose plugin option under that key. For example this will set the inventory_hostname to the value of sAMAccountName without the ending $ rather than the computer account LDAP name attribute.

+
attributes:
+  sAMAccountName:
+  inventory_hostname: sAMAccountName[:-1]
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+microsoft_ad_distinguished_name: CN=OtherName,CN=Computers,DC=domain,DC=com
+sAMAccountName: MYHOST$
+
+
+

It is also possible to set inventory_hostname under the compose key. The following will produce the same output as the above.

+
attributes:
+  sAMAccountName:
+
+compose:
+  inventory_hostname: sAMAccountName[:-1]
+
+
+

An example of setting a custom ansible_host fact that is used as the connection host but leaving the default inventory_hostname of the computer account name is:

+
attributes:
+  sAMAccountName:
+  ansible_host: sAMAccountName[:-1]
+
+
+
+
+

Value types and templating

+

Each LDAP attribute value is stored as a list of bytes but the schema supplied in the LDAP database can describe how those raw list of bytes are represented as a proper type, like a string, integer, boolean, etc. Currently only these four types are used when coercing LDAP attribute values

+
    +
  • Booleans

  • +
  • Integers

  • +
  • Bytes

  • +
  • Strings

  • +
+

Booleans, integers, and strings are coerced into those specific Python types but bytes are coerced into a base64 string encoding of those bytes.

+
+

Note

+

The objectGuid and objectSid attributes are always coerced into strings representing the security identifier and guid respectively. These are the only attributes that have special coercion rules outside of the LDAP schema syntax.

+
+

LDAP attribute values may also be marked as a a single or multi valued attribute. A single value contains just the coerced value, or None/null if it has not been set while a multi valued attribute will be set as a list of coerced values. For example the comment is a single valued string while servicePrincipalName is a multi valued string. Using this inventory configuration that requests comment, and servicePrincipalName we get the following inventory host definition:

+
plugin: microsoft.ad.ldap
+
+attributes:
+  comment:
+  servicePrincipalName:
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+comment: test comment
+servicePrincipalName:
+- WSMAN/MYHOST
+- WSMAN/MYHOST.domain.com
+- TERMSRV/MYHOST
+- TERMSRV/MYHOST.domain.com
+- RestrictedKrbHost/MYHOST
+- HOST/MYHOST
+- RestrictedKrbHost/MYHOST.domain.com
+- HOST/MYHOST.domain.com
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+

Some attributes like pwdLastSet are typically represented as a datetime value but internally are stored as integers. As there is no metadata in the LDAP schema to denote these integer values as datetime objects they will only be coerced into integer values by default.

+

The following filters can be used as an easy way to further convert the coerced values into something more readable:

+ +

An example of these filters being used in the attributes option can be seen below:

+
plugin: microsoft.ad.ldap
+
+attributes:
+  pwdLastSet:
+    password_last_set_int: this
+    password_last_set_datetime: this | microsoft.ad.as_datetime
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+password_last_set_datetime: 2023-02-06T07:39:09.195321+0000
+password_last_set_int: 133201427491953218
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+

The templates can also reference other filters that exist outside the collection, like the Ansible builtin from_json and more. The value is simply what would be placed inside {{ ... }} during a normal template operation.

+
+

Note

+

Lookups cannot be used in the attribute value templates, only filters.

+
+

Each template used in the attributes inventory option can reference the following variables:

+
    +
  • this

  • +
  • raw

  • +
  • Any previously defined attributes

  • +
+

The this variable refers to the coerced LDAP attribute value while raw refers to the list of base64 encoded strings representing the raw LDAP value that hasn’t been coerced. As each attribute host fact is processed, it is also available in the subsequent templates under that host fact name. Here is an example of a more complex set of attributes:

+
plugin: microsoft.ad.ldap
+
+attributes:
+  objectSid:
+    sid: this
+    sid_raw: raw
+    sid_raw_filtered: raw | microsoft.ad.as_sid | first
+  objectGuid:
+  sAMAccountName:
+    computer_name:
+  comment:
+    comment: this
+    # Can refer to previously set attributes above
+    description: computer_name ~ " - " ~ sid ~ " - " ~ objectGuid ~ " - " ~ this
+
+# Can also be used as a template and refer to the vars retrieved above
+compose:
+  comment2: comment
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+comment: test comment
+comment2: test comment
+computer_name: MYHOST$
+description: MYHOST$ - S-1-5-21-1234-1108 - 51cc490f-1de0-41ae-98ad-dc065d5b33e2 - test comment
+objectGuid: 51cc490f-1de0-41ae-98ad-dc065d5b33e2
+sid: S-1-5-21-1234-1108
+sid_raw:
+- AQMAAAAAAAUVAAAA0gQAAFQEAAA=
+sid_raw_filtered: S-1-5-21-1234-1108
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+
+
+

LAPS

+

Local Administrator Administrator Password Solution (LAPS) can be used to automatically change the password of the local administrator account on domain joined hosts. The LDAP connection plugin can retrieve the LAPS-managed value and assign it as the connection password for the target host.

+

There are three different attributes that can be used by LAPS to store the password information:

+
    +
  • ms-Mcs-AdmPwd - The legacy LAPS attribute containing the password

  • +
  • msLAPS-Password - The Windows LAPS attribute containing the username and password

  • +
  • msLAPS-EncryptedPassword - The Windows LAPS attribute containing the encrypted username and password

  • +
+

If using the legacy LAPS setup, the following will retrieve and assign the connection username and password to the LAPS-managed value:

+
plugin: microsoft.ad.ldap
+
+attributes:
+  ms-Mcs-AdmPwd:
+    ansible_user: '"Administrator"'
+    ansible_password: this
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+ansible_password: aR$lmrqK1l622H
+ansible_user: Administrator
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+
+
+
+

Note

+

Legacy LAPS does not store the username, the above example hardcodes the user name Administrator.

+
+

If using Windows LAPS without encryption, the following will assign the connection username and password to the LAPS-managed values:

+
plugin: microsoft.ad.ldap
+
+attributes:
+  msLAPS-Password:
+    ansible_user: (this | from_json).n
+    ansible_password: (this | from_json).p
+    raw_example: raw
+    this_example: this
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+ansible_password: AWznso@ZJ+J6p9
+ansible_user: Administrator
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+raw_example:
+- eyJuIjoiQWRtaW5pc3RyYXRvciIsInQiOiIxZDk4MmI0MzdiN2E1YzYiLCJwIjoiQVd6bnNvQFpKK0o2cDkifQ==
+this_example:
+  n: Administrator
+  p: AWznso@ZJ+J6p9
+  t: 1d982b437b7a5c6
+
+
+

Unlike Legacy LAPS, the attribute value is a json string that contains the keys:

+
    +
  • n - The account name the password was encrypted for

  • +
  • p - The password for the account

  • +
  • t - The time the password was set encoded as a FILETIME in base16

  • +
+
+

Note

+

It is recommended to use the from_json filter (as shown in the example above) on the this value to ensure consistent behavior in the presence or absence of Jinja2 native type support.

+
+

Getting an encrypted Windows LAPS value requires the dpapi-ng Python library to be installed. See the LDAP connection requirements for more information on this optional package and how to debug whether it’s installed or not.

+
+

Note

+

Using Windows LAPS encrypted password is currently an experimental feature.

+
+

With the dpapi-ng package installed, an authorized LDAP user can decrypt and assign the LAPS-managed username and password to the target host connection as follows:

+
plugin: microsoft.ad.ldap
+
+attributes:
+  msLAPS-EncryptedPassword:
+    ansible_user: (this.value | from_json).n
+    ansible_password: (this.value | from_json).p
+    raw_example: raw
+    this_example: this
+
+
+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+ansible_password: 6jr&}yK++{0Q}&
+ansible_user: Administrator
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+raw_example:
+- toLZAWR7rgfk...
+this_example:
+  encrypted_value: MIIETgYJKoZI...
+  flags: 0
+  info: ''
+  update_timestamp: 133281382308674404
+  value: '{"n":"Administrator","t":"1d982b607ae7b64","p":"6jr&}yK++{0Q}&"}'
+
+
+

The raw value contains the raw base64 encoded value as stored in AD. The this value contains a dictionary with the following keys:

+
    +
  • encrypted_value: The encrypted password blob as a base64 string

  • +
  • flags: The flags set as a bitwise int value, currently these are undocumented by Microsoft

  • +
  • update_timestamp: The FILETIME value of when the

  • +
  • value: The decrypted value containing the username and password as a JSON string

  • +
  • debug: Debug information that indicates why it failed to decrypt the value

  • +
+

The value key will only be present if the decryption process was successful. If it failed, the debug key will be present and contain the reason why it failed to be decrypted.

+

If the dpapi-ng library is not installed this is what the output would look like:

+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+raw_example:
+- toLZAWR7rgfk...
+this_example:
+  debug: Cannot decrypt value as the Python library dpapi-ng is not installed
+  encrypted_value: MIIETgYJKoZI...
+  flags: 0
+  update_timestamp: 133281382308674404
+
+
+

The value key is no longer present and debug contains the message that dpapi-ng is not installed.

+

If dpapi-ng library was installed but the connection user is not authorized to decrypt the value this is what the output would look like:

+
# ansible-inventory -i microsoft.ad.ldap.yml --host MYHOST --vars --yaml
+
+ansible_host: MYHOST.domain.com
+microsoft_ad_distinguished_name: CN=MYHOST,CN=Computers,DC=domain,DC=com
+raw_example:
+- toLZAWR7rgfk...
+this_example:
+  debug: Failed to decrypt value due to error - ValueError GetKey failed 0x80070005
+  encrypted_value: MIIETgYJKoZI...
+  flags: 0
+  update_timestamp: 133281382308674404
+
+
+

A simple way to test that the connection user is able to decrypt the password is to run Get-LapsADPassword -Identity MYHOST on a Windows host as that user.

+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/docsite/guide_list_values.html b/tag/1.5.0/collections/microsoft/ad/docsite/guide_list_values.html new file mode 100644 index 0000000..8fccd15 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/docsite/guide_list_values.html @@ -0,0 +1,268 @@ + + + + + + + Setting list option values guide — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

Setting list option values guide

+

Some AD options accept multiple values which require special rules when it comes to checking for idempotency in Ansible. This collection has been designed so that each of the modules which manage AD objects follow the same style when it comes to their options. In particular, they should all follow the style documented in this guide when it comes to options that contain multiple values like spn, delegates, etc.

+ +
+

Add, remove, and set

+

For each module option that manage a multi valued LDAP attribute there exists three actions:

+
    +
  • add

  • +
  • remove

  • +
  • set

  • +
+

The add and remove option will add or remove the specified value(s) from the existing value. The set option will replace the existing values with what was specified in the task. +Using an example of an AD object with the following servicePrincipalNames values:

+
    +
  • HTTP/host1

  • +
  • HTTP/host1.domain.com

  • +
  • HTTP/host1.domain.com:443

  • +
+

Doing add: ['HTTP/host1','HTTP/host2'] will add HTTP/host2 to the existing values bringing it to:

+
    +
  • HTTP/host1

  • +
  • HTTP/host1.domain.com

  • +
  • HTTP/host1.domain.com:443

  • +
  • HTTP/host2

  • +
+

Doing remove: ['HTTP/host1','HTTP/host3'] will remove HTTP/host1 from the existing values bringing it to:

+
    +
  • HTTP/host1.domain.com

  • +
  • HTTP/host1.domain.com:443

  • +
+

Doing set: ['HTTP/host1', 'HTTP/host2'] will remove any values not in that list and add values in that list but not set bringing it to:

+
    +
  • HTTP/host1

  • +
  • HTTP/host2

  • +
+

It is possible to use add and remove together but setting set will always take precedence over the others. +It is also possible to clear all the existing values by setting the set value to an empty list, for example set: [].

+
+
+

Examples

+

The add, remove, and set options are subkeys of the module option it controls. For example the microsoft.ad.user has an option called groups which control the list of groups the user is a member of. To add a group to the user, simply use the add key like so:

+
- name: add a user to a group
+  microsoft.ad.user:
+    name: MyUser
+    groups:
+      add:
+      - Group 1
+      - Group 2
+
+
+

This will ensure the user is added to the groups Group 1 and Group 2 while also preserving the existing membership. To remove a user from a user, simple use the remove key like so:

+
- name: remove a user from a group
+  microsoft.ad.user:
+    name: MyUser
+    groups:
+      remove:
+      - Group 1
+      - Group 2
+
+
+

This does the opposite to add and will remove the user from Group 1 and Group 2 but it will still preserve any existing group memberships of that user. It is also possible to combine add and remove together:

+
- name: add and remove user groups
+  microsoft.ad.user:
+    name: MyUser
+    groups:
+      add:
+      - Group 1
+      remove:
+      - Group 2
+
+
+

This will ensure the user is a member of Group 1 and is not a member of Group 2. Like before it will not touch the existing group membership if they are not specified.

+

The set option following the same format like so:

+
- name: set user groups
+  microsoft.ad.user:
+    name: MyUser
+    groups:
+      set:
+      - Group 1
+      - Group 2
+
+
+

This will ensure the user is only members of Group 1 and Group 2, removing any other group not in that list. While it is possible to combine set with either add or remove, the module will completely ignore the values in add or remove.

+

Finally to remove a user from all groups, use an empty list for the set option like so:

+
- name: remove user groups
+  microsoft.ad.user:
+    name: MyUser
+    groups:
+      set: []
+
+
+
+

Note

+

This is not actually possible for user groups as it will always be a member of its primary group, it is just used for demonstration purposes.

+
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/docsite/guide_migration.html b/tag/1.5.0/collections/microsoft/ad/docsite/guide_migration.html new file mode 100644 index 0000000..4134956 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/docsite/guide_migration.html @@ -0,0 +1,308 @@ + + + + + + + Migration guide — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+ +
+ + +
+ +
+

Migration guide

+

Some of the modules in this collection have come from the ansible.windows collection or the community.windows collection. This document will go through some of the changes made to help ease the transition from the older modules to the ones in this collection.

+ +
+

Migrated Modules

+

The following modules have been migrated in some shape or form into this collection

+
    +
  • ansible.windows.win_domain -> microsoft.ad.domain - details

  • +
  • ansible.windows.win_domain_controller -> microsoft.ad.domain_controller - details

  • +
  • ansible.windows.win_domain_membership -> microsoft.ad.membership - details

  • +
  • community.windows.win_domain_computer -> microsoft.ad.computer - details

  • +
  • community.windows.win_domain_group -> microsoft.ad.group - details

  • +
  • community.windows.win_domain_group_membership -> microsoft.ad.group - details

  • +
  • community.windows.win_domain_object_info -> microsoft.ad.object_info - details

  • +
  • community.windows.win_domain_ou -> microsoft.ad.ou - details

  • +
  • community.windows.win_domain_user -> microsoft.ad.user - details

  • +
+

While these modules are mostly drop in place compatible there are some breaking changes that need to be considered. See each module entry for more information.

+
+

Module win_domain

+

Migrated to microsoft.ad.domain.

+

There are no known breaking changes and should work as a drop in replacement. The reboot option has been added to have the module handle any reboots that are needed instead of a separate ansible.windows.win_reboot task. Due to the operations involved with promoting a domain controller, it is highly recommended to use this option.

+
+
+

Module win_domain_controller

+

Migrated to microsoft.ad.domain_controller.

+

The following options have been removed:

+
    +
  • log_path - Creating a debug log of module actions is not supported

  • +
+

The reboot option has been added to have the module handle any reboots instead of a separate ansible.windows.win_reboot task. Due to the operations involved with promoting a domain controller, it is highly recommended to use this option.

+
+
+

Module win_domain_membership

+

Migrated to microsoft.ad.membership.

+

The following options have been removed:

+
    +
  • log_path - Creating a debug log of module actions is not supported

  • +
+

The reboot option has been added to have the module handle any reboots instead of a separate ansible.windows.win_reboot task.

+
+
+

Module win_domain_computer

+

Migrated to microsoft.ad.computer.

+

The option dns_host_name is not required when state: present, the computer object is created without the dnsHostName LDAP attribute set if it is not defined.

+

The default for enabled is nothing, the group will still be enabled when created but it will use the existing status if the option is omitted.

+

The option ou is now named path to match the standard set by other modules.

+

The options offline_domain_join and odj_blob_path has been removed. Use the new module microsoft.ad.offline_join to generate the offline join blob. For example:

+
- name: create computer object
+  microsoft.ad.computer:
+    name: MyComputer
+    state: present
+  register: computer_obj
+
+- name: create offline blob
+  microsoft.ad.offline_join:
+    identity: '{{ computer_obj.object_guid }}'
+  when: computer_obj is changed
+  register: offline_blob
+
+- name: display offline blob
+  debug:
+    var: offline_blob.blob
+  when: computer_obj is changed
+
+
+
+
+

Module win_domain_group

+

Migrated to microsoft.ad.group.

+

The following options have changed:

+
    +
  • attributes - changed format as outlined in Attributes guid

  • +
  • ignore_protection - Has been removed and state: absent will also remove objects regardless of the protection status

  • +
  • organizational_unit and ou - Have been removed, use path instead

  • +
  • protect - Has been renamed to protect_from_deletion and is now not needed to be unset for state: absent to remove the group

  • +
+

The return values for win_domain_group have also been simplified to only return:

+
    +
  • distinguished_name - The Distinguished Name (DN) of the managed OU

  • +
  • object_guid - The Object GUID of the managed OU

  • +
  • sid - The Security Identifier of the managed user

  • +
+

All other return values have been removed, use microsoft.ad.object_info to get extra values if needed.

+
+
+

Module win_domain_group_membership

+

Migrated to microsoft.ad.group.

+

The functionality of this module has been merged with microsoft.ad.group. Use the members option to add, remove, or set to add, remove, or set group members respectively.

+
+
+

Module win_domain_object_info

+

Migrated to microsoft.ad.object_info.

+

There are no known breaking changes and should work as a drop in replacement.

+
+
+

Module win_domain_ou

+

Migrated to microsoft.ad.ou.

+

The following options have changed:

+
    +
  • protected - Has been renamed to protect_from_deletion and is now not needed to be unset for state: absent to remove the OU

  • +
  • recursive - Has been removed and state: absent will also remove objects recursively

  • +
  • filter - Has been removed, the name object refers to the OU name and identity can be used to select the OU by DistinguishedName or ObjectGUID if a rename or move is needed

  • +
  • properties - Has been removed, use the new attributes option

  • +
+

The return values for win_domain_ou have also been simplified to only return:

+
    +
  • distinguished_name - The Distinguished Name (DN) of the managed OU

  • +
  • object_guid - The Object GUID of the managed OU

  • +
+

All other return values have been removed, use microsoft.ad.object_info to get extra values if needed.

+
+
+

Module win_domain_user

+

Migrated to microsoft.ad.user.

+

The following options have changed:

+
    +
  • attributes - changed format as outlined in Attributes guid

  • +
  • delegates - changed format as outlined in Setting list values

  • +
  • groups - changed format as outlined in Setting list values

  • +
  • groups_action - has been removed in favour of the new groups format

  • +
  • groups_missing_behaviour - has been moved into the group dictionary value as missing_behaviour

  • +
  • spn- changed format as outlined in Setting list values

  • +
  • spn_action - has been removed in favour of the new spn format

  • +
  • state - No query option - use microsoft.ad.object_info instead

  • +
  • enabled - Does not default to true. Creating a new user without a password will use enabled=false but setting a password will use enabled=true

  • +
+

The groups_action and spn_action set value was renamed to align with common practice. The state=query functionality has been removed to simplify the module and favour microsoft.ad.object_info which is designed to return information about AD objects. The enabled default was removed to allow setting other attributes on an existing AD object without always having to specify enabled.

+

The return values for win_domain_user have also been simplified to only return:

+
    +
  • distinguished_name - The Distinguished Name (DN) of the managed user

  • +
  • object_guid - The Object GUID of the managed user

  • +
  • sid - The Security Identifier of the managed user

  • +
+

All other return values have been removed, use microsoft.ad.object_info to get extra values if needed.

+
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/domain_controller_module.html b/tag/1.5.0/collections/microsoft/ad/domain_controller_module.html new file mode 100644 index 0000000..3ab73b7 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/domain_controller_module.html @@ -0,0 +1,523 @@ + + + + + + + + microsoft.ad.domain_controller module – Manage domain controller/member server state for a Windows host — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.domain_controller module – Manage domain controller/member server state for a Windows host

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.domain_controller.

+
+ +
+

Synopsis

+
    +
  • Ensure that a Windows Server 2012+ host is configured as a domain controller or demoted to member server.

  • +
  • This module may require subsequent use of the ansible.windows.win_reboot action if changes are made.

  • +
+
+

Note

+

This module has a corresponding action plugin.

+
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

database_path

+

path

+

The path to a directory on a fixed disk of the Windows host where the domain database will be created..

+

If not set then the default path is %SYSTEMROOT%\NTDS.

+
+

dns_domain_name

+

string

+

When state=domain_controller, the DNS name of the domain for which the targeted Windows host should be a DC.

+
+

domain_admin_password

+

string / required

+

Password for the specified domain_admin_user.

+
+

domain_admin_user

+

string / required

+

Username of a domain admin for the target domain (necessary to promote or demote a domain controller).

+
+

domain_log_path

+

path

+

Specified the fully qualified, non-UNC path to a directory on a fixed disk of the local computer that will contain the domain log files.

+
+

install_dns

+

boolean

+

Whether to install the DNS service when creating the domain controller.

+

If not specified then the -InstallDns option is not supplied to Install-ADDSDomainController command, see Install-ADDSDomainController.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

install_media_path

+

path

+

The path to a directory on a fixed disk of the Windows host where the Install From Media IFC data will be used.

+

See the Install using IFM guide for more information.

+
+

local_admin_password

+

string

+

Password to be assigned to the local Administrator user (required when state=member_server).

+
+

read_only

+

boolean

+

Whether to install the domain controller as a read only replica for an existing domain.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+

reboot

+

boolean

+

If true, this will reboot the host if a reboot was required to configure the server.

+

If false, this will not reboot the host if a reboot was required and instead sets the reboot_required return value to true.

+

Multiple reboots may occur if the host required a reboot before the domain promotion.

+

This cannot be used with async mode.

+

To use this parameter, ensure the fully qualified module name is used in the task or the collections keyword includes this collection.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+

safe_mode_password

+

string

+

Safe mode password for the domain controller (required when state=domain_controller).

+
+

site_name

+

string

+

Specifies the name of an existing site where you can place the new domain controller.

+

This option is required when read_only=true.

+
+

state

+

string / required

+

Whether the target host should be a domain controller or a member server.

+

Choices:

+
    +
  • "domain_controller"

  • +
  • "member_server"

  • +
+
+

sysvol_path

+

path

+

The path to a directory on a fixed disk of the Windows host where the Sysvol folder will be created.

+

If not set then the default path is %SYSTEMROOT%\SYSVOL.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

action

+

Support: full

+

Indicates this has a corresponding action plugin so some parts of the options can be executed on the controller

+
+

async

+

Support: partial

+

Supported for all scenarios except with reboot=True.

+

Supports being used with the async keyword

+
+

bypass_host_loop

+

Support: none

+

Forces a ‘global’ task that does not execute per host, this bypasses per host templating and serial, throttle and other loop considerations

+

Conditionals will work as if run_once is being used, variables used will be from the first available host

+

This action will not work normally outside of lockstep strategies

+
+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • It is highly recommended to set reboot=true to have Ansible manage the host reboot phase as the actions done by this module puts the host in a state where it may not be possible for Ansible to reconnect in a subsequent task without a reboot.

  • +
  • This module must be run on a Windows target host.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
microsoft.ad.membership

Manage domain/workgroup membership for a Windows host.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
Migration guide

This module replaces ansible.windows.win_domain_controller. See the migration guide for details.

+
+
ansible.windows.win_domain_controller

The official documentation on the ansible.windows.win_domain_controller module.

+
+
+
+
+
+

Examples

+
- name: Ensure a server is a domain controller
+  microsoft.ad.domain_controller:
+    dns_domain_name: ansible.vagrant
+    domain_admin_user: testguy@ansible.vagrant
+    domain_admin_password: password123!
+    safe_mode_password: password123!
+    state: domain_controller
+    reboot: true
+
+- name: Ensure a server is not a domain controller
+  microsoft.ad.domain_controller:
+    domain_admin_user: testguy@ansible.vagrant
+    domain_admin_password: password123!
+    local_admin_password: password123!
+    state: member_server
+    reboot: true
+
+- name: Promote server as a read only domain controller
+  microsoft.ad.domain_controller:
+    dns_domain_name: ansible.vagrant
+    domain_admin_user: testguy@ansible.vagrant
+    domain_admin_password: password123!
+    safe_mode_password: password123!
+    state: domain_controller
+    read_only: yes
+    site_name: London
+    reboot: true
+
+# This scenario is not recommended, use reboot: true when possible
+- name: Promote server with custom paths with manual reboot task
+  microsoft.ad.domain_controller:
+    dns_domain_name: ansible.vagrant
+    domain_admin_user: testguy@ansible.vagrant
+    domain_admin_password: password123!
+    safe_mode_password: password123!
+    state: domain_controller
+    sysvol_path: D:\SYSVOL
+    database_path: D:\NTDS
+    domain_log_path: D:\NTDS
+  register: dc_promotion
+
+- name: Reboot after promotion
+  microsoft.ad.win_reboot:
+  when: dc_promotion.reboot_required
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + +

Key

Description

+

reboot_required

+

boolean

+

True if changes were made that require a reboot.

+

Returned: always

+

Sample: true

+
+
+

Authors

+
    +
  • Matt Davis (@nitzmahone)

  • +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/domain_module.html b/tag/1.5.0/collections/microsoft/ad/domain_module.html new file mode 100644 index 0000000..2899f7b --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/domain_module.html @@ -0,0 +1,481 @@ + + + + + + + + microsoft.ad.domain module – Ensures the existence of a Windows domain — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.domain module – Ensures the existence of a Windows domain

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.domain.

+
+ +
+

Synopsis

+
    +
  • Ensure that the domain named by dns_domain_name exists and is reachable.

  • +
  • If the domain is not reachable, the domain is created in a new forest on the target Windows Server 2012+ host.

  • +
  • This module may require subsequent use of the ansible.windows.win_reboot action if changes are made.

  • +
+
+

Note

+

This module has a corresponding action plugin.

+
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

create_dns_delegation

+

boolean

+

Whether to create a DNS delegation that references the new DNS server that you install along with the domain controller.

+

Valid for Active Directory-integrated DNS only.

+

The default is computed automatically based on the environment.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

database_path

+

path

+

The path to a directory on a fixed disk of the Windows host where the domain database will be created.

+

If not set then the default path is %SYSTEMROOT%\NTDS.

+
+

dns_domain_name

+

string / required

+

The DNS name of the domain which should exist and be reachable or reside on the target Windows host.

+
+

domain_mode

+

string

+

Specifies the domain functional level of the first domain in the creation of a new forest.

+

The domain functional level cannot be lower than the forest functional level, but it can be higher.

+

The default is automatically computed and set.

+

Current known modes are Win2003, Win2008, Win2008R2, Win2012, Win2012R2, or WinThreshold.

+
+

domain_netbios_name

+

string

+

The NetBIOS name for the root domain in the new forest.

+

For NetBIOS names to be valid for use with this parameter they must be single label names of 15 characters or less, if not it will fail.

+

If this parameter is not set, then the default is automatically computed from the value of the domain_name parameter.

+
+

forest_mode

+

string

+

Specifies the forest functional level for the new forest.

+

The default forest functional level in Windows Server is typically the same as the version you are running.

+

Current known modes are Win2003, Win2008, Win2008R2, Win2012, Win2012R2, or WinThreshold.

+
+

install_dns

+

boolean

+

Whether to install the DNS service when creating the domain controller.

+

Choices:

+
    +
  • false

  • +
  • true ← (default)

  • +
+
+

log_path

+

path

+

Specifies the fully qualified, non-UNC path to a directory on a fixed disk of the local computer where the log file for this operation is written.

+

If not set then the default path is %SYSTEMROOT%\NTDS.

+
+

reboot

+

boolean

+

If true, this will reboot the host if a reboot was required to configure the domain.

+

If false, this will not reboot the host if a reboot was required and instead sets the reboot_required return value to true.

+

Multiple reboots may occur if the host required a reboot before the domain promotion.

+

This cannot be used with async mode.

+

To use this parameter, ensure the fully qualified module name is used in the task or the collections keyword includes this collection.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+

safe_mode_password

+

string / required

+

Safe mode password for the domain controller.

+
+

sysvol_path

+

path

+

The path to a directory on a fixed disk of the Windows host where the Sysvol file will be created.

+

If not set then the default path is %SYSTEMROOT%\SYSVOL.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

action

+

Support: full

+

Indicates this has a corresponding action plugin so some parts of the options can be executed on the controller

+
+

async

+

Support: partial

+

Supported for all scenarios except with reboot=True.

+

Supports being used with the async keyword

+
+

bypass_host_loop

+

Support: none

+

Forces a ‘global’ task that does not execute per host, this bypasses per host templating and serial, throttle and other loop considerations

+

Conditionals will work as if run_once is being used, variables used will be from the first available host

+

This action will not work normally outside of lockstep strategies

+
+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • This module must be run on a Windows target host.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
microsoft.ad.membership

Manage domain/workgroup membership for a Windows host.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
Migration guide

This module replaces ansible.windows.win_domain. See the migration guide for details.

+
+
ansible.windows.win_domain

The official documentation on the ansible.windows.win_domain module.

+
+
+
+
+
+

Examples

+
- name: Create new domain in a new forest on the target host and reboot
+  microsoft.ad.domain:
+    dns_domain_name: ansible.vagrant
+    safe_mode_password: password123!
+    reboot: true
+
+- name: Create new Windows domain in a new forest with specific parameters and reboot in post task
+  microsoft.ad.domain:
+    create_dns_delegation: false
+    database_path: C:\Windows\NTDS
+    dns_domain_name: ansible.vagrant
+    domain_mode: Win2012R2
+    domain_netbios_name: ANSIBLE
+    forest_mode: Win2012R2
+    safe_mode_password: password123!
+    sysvol_path: C:\Windows\SYSVOL
+  register: domain_install
+
+- name: Reboot host if install requires it
+  ansible.windows.win_reboot:
+  when: domain_install.reboot_required
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + +

Key

Description

+

reboot_required

+

boolean

+

True if changes were made that require a reboot.

+

Returned: always

+

Sample: true

+
+
+

Authors

+
    +
  • Matt Davis (@nitzmahone)

  • +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/group_module.html b/tag/1.5.0/collections/microsoft/ad/group_module.html new file mode 100644 index 0000000..34f8589 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/group_module.html @@ -0,0 +1,673 @@ + + + + + + + + microsoft.ad.group module – Manage Active Directory group objects — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.group module – Manage Active Directory group objects

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.group.

+
+ +
+

Synopsis

+
    +
  • Manages Active Directory group objects and their attributes.

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

attributes

+

dictionary

+

The attributes to either add, remove, or set on the AD object.

+

The value of each attribute option should be a dictionary where the key is the LDAP attribute, e.g. firstName, comment and the value is the value, or list of values, to set for that attribute.

+

The attribute value(s) can either be the raw string, integer, or bool value to add, remove, or set on the attribute in question.

+

The value can also be a dictionary with the type key set to bytes, date_time, security_descriptor, or raw and the value for this entry under the value key.

+

The bytes type has a value that is a base64 encoded string of the raw bytes to set.

+

The date_time type has a value that is the ISO 8601 DateTime string of the DateTime to set. The DateTime will be set as the Microsoft FILETIME integer value which is the number of 100 nanoseconds since 1601-01-01 in UTC.

+

The security_descriptor type has a value that is the Security Descriptor SDDL string used for the nTSecurityDescriptor attribute.

+

The raw type is the int, string, or boolean value to set.

+

String attribute values are compared using a case sensitive match on the AD object being managed.

+

See LDAP attributes help for more information.

+

Default: {}

+
+

add

+

dictionary

+

A dictionary of all the attributes and their value(s) to add to the AD object being managed if they are not already present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

remove

+

dictionary

+

A dictionary of all the attributes and their value(s) to remove from the AD object being managed if they are present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

set

+

dictionary

+

A dictionary of all attributes and their value(s) to set on the AD object being managed.

+

This will replace any existing values if they do not match the ones being requested.

+

The order of attribute values are not checked only, only that the values requested are the only values on the object attribute.

+

Set this to null or an empty list to clear any values for the attribute.

+

Default: {}

+
+

category

+

string

+

The category of the group.

+

If a new group is created then security will be used by default.

+

A security group can be associated with access control lists whereas distribution groups are typically associated with mailing distribution lists.

+

This is the value set on the groupType LDAP attributes.

+

Choices:

+
    +
  • "distribution"

  • +
  • "security"

  • +
+
+

description

+

string

+

The description of the AD object to set.

+

This is the value set on the description LDAP attribute.

+
+

display_name

+

string

+

The display name of the AD object to set.

+

This is the value of the displayName LDAP attribute.

+
+

domain_password

+

string

+

The password for domain_username.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_username

+

string

+

The username to use when interacting with AD.

+

If this is not set then the user that is used for authentication will be the connection user.

+

Ansible will be unable to use the connection user unless auth is Kerberos with credential delegation or CredSSP, or become is used on the task.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

homepage

+

string

+

The homepage of the group.

+

This is the value set on the wWWHomePage LDAP attribute.

+
+

identity

+

string

+

The identity of the AD object used to find the AD object to manage.

+

This must be specified if; name is not set, when trying to rename the object with a new name, or when trying to move the object into a different path.

+

The identity can be in the form of a GUID representing the objectGUID value, the userPrincipalName, sAMAccountName, objectSid, or distinguishedName.

+

If omitted, the AD object to manage is selected by the distinguishedName using the format CN={{ name }},{{ path }}. If path is not defined, the defaultNamingContext is used instead.

+
+

managed_by

+

string

+

The user or group that manages the group.

+

The value can be in the form of a distinguishedName, objectGUID, objectSid, or sAMAccountName.

+

This is the value set on the managedBy LDAP attribute.

+
+

members

+

dictionary

+

The members of the group to set.

+

The value is a dictionary that contains 3 keys, add, remove, and set.

+

Each subkey is set to a list of AD principal objects to add, remove or set as the members of this AD group respectively. A principal can be in the form of a distinguishedName, objectGUID, objectSid, or sAMAccountName.

+

The module will fail if it cannot find any of the members referenced.

+
+

add

+

list / elements=string

+

Adds the principals specified as members of the group, keeping the existing membership if they are not specified.

+
+

remove

+

list / elements=string

+

Removes the principals specified as members of the group, keeping the existing membership if they are not specified.

+
+

set

+

list / elements=string

+

Sets only the principals specified as members of the group.

+

Any other existing member will be removed from the group membership if not specified in this list.

+

Set this to an empty list to remove all members from a group.

+
+

name

+

string

+

The name of the AD object to manage, this is not the sAMAccountName of the object but the LDAP cn or name entry of the object in the path specified. Use identity to select an object to manage by its sAMAccountName.

+

If identity is specified, and the name of the object found by that identity does not match this value, the object will be renamed.

+

This must be specified if identity is not set.

+
+

path

+

string

+

The path of the OU or the container where the new object should exist in.

+

If creating a new object, the new object will be created at the path specified. If no path is specified then the defaultNamingContext of the domain will be used as the path for most object types.

+

If managing an existing object found by identity, the path of the found object will be moved to the one specified by this option. If no path is specified, the object will not be moved.

+

The modules microsoft.ad.computer, microsoft.ad.user, and microsoft.ad.group have their own default path that is configured on the Active Directory domain controller.

+

This can be set to the literal value microsoft.ad.default_path which will equal the default value used when creating a new object.

+
+

protect_from_deletion

+

boolean

+

Marks the object as protected from accidental deletion.

+

This applies a deny access right from deleting the object normally and the protection needs to be removed before the object can be deleted through the GUI or any other tool outside Ansible.

+

Using state=absent will still delete the AD object even if it is marked as protected from deletion.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

sam_account_name

+

string

+

The sAMAccountName value to set for the group.

+

If omitted, the name value is used when creating a new group.

+
+

scope

+

string

+

The scope of the group.

+

This is required when state=present and the group does not already exist.

+

See Group scope for more information on the various domain group scopes.

+

This is the value set on the groupType LDAP attributes.

+

Choices:

+
    +
  • "domainlocal"

  • +
  • "global"

  • +
  • "universal"

  • +
+
+

state

+

string

+

Set to present to ensure the AD object exists.

+

Set to absent to remove the AD object if it exists.

+

The option name must be set when state=present.

+

Using absent will recursively remove the AD object and any child objects if it’s a container. It will also remove the AD object even if the object is marked as protected from accidental deletion.

+

Choices:

+
    +
  • "absent"

  • +
  • "present" ← (default)

  • +
+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • See win_group migration for help on migrating from community.windows.win_domain_group to this module.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
  • Some LDAP attributes can have only a single value set while others can have multiple. Some attributes are also read only and cannot be changed. It is recommended to look at the schema metadata for an attribute where System-Only are read only values and Is-Single-Value are attributes with only 1 value.

  • +
  • Attempting to set multiple values to a Is-Single-Value attribute results in undefined behaviour.

  • +
  • If running on a server that is not a Domain Controller, credential delegation through CredSSP or Kerberos with delegation must be used or the domain_username, domain_password must be set.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.membership

Manage domain/workgroup membership for a Windows host.

+
+
microsoft.ad.object_info

Gather information an Active Directory object.

+
+
microsoft.ad.object

Manage Active Directory objects.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
Migration guide

This module replaces community.windows.win_domain_group. See the migration guide for details.

+
+
community.windows.win_domain_group

The official documentation on the community.windows.win_domain_group module.

+
+
+
+
+
+

Examples

+
- name: Ensure a group exists
+  microsoft.ad.group:
+    identity: Cow
+    scope: global
+
+- name: Remove a group
+  microsoft.ad.group:
+    identity: Cow
+    state: absent
+
+- name: Create a group in a custom path
+  microsoft.ad.group:
+    name: Cow
+    scope: global
+    path: OU=groups,DC=ansible,DC=local
+    state: present
+
+- name: Remove a group in a custom path
+  microsoft.ad.group:
+    name: Cow
+    path: OU=groups,DC=ansible,DC=local
+    state: absent
+
+- name: Create group with delete protection enabled and custom attributes
+  microsoft.ad.group:
+    name: Ansible Users
+    scope: domainlocal
+    category: security
+    homepage: www.ansible.com
+    attributes:
+      set:
+        mail: helpdesk@ansible.com
+    protect_from_deletion: true
+
+- name: Change the path of a group
+  microsoft.ad.group:
+    name: MyGroup
+    scope: global
+    identity: S-1-5-21-2171456218-3732823212-122182344-1189
+    path: OU=groups,DC=ansible,DC=local
+
+- name: Add managed_by user
+  microsoft.ad.group:
+    name: Group Name Here
+    scope: global
+    managed_by: Domain Admins
+
+- name: Add group and specify the AD domain services to use for the create
+  microsoft.ad.group:
+    name: Test Group
+    domain_username: user@CORP.ANSIBLE.COM
+    domain_password: Password01!
+    domain_server: corp-DC12.corp.ansible.com
+    scope: domainlocal
+
+- name: Add members to the group, preserving existing membership
+  microsoft.ad.group:
+    name: Test Group
+    scope: domainlocal
+    members:
+      add:
+      - Domain Admins
+      - Domain Users
+
+- name: Remove members from the group, preserving existing membership
+  microsoft.ad.group:
+    name: Test Group
+    scope: domainlocal
+    members:
+      remove:
+      - Domain Admins
+      - Domain Users
+
+- name: Replace entire membership of group
+  microsoft.ad.group:
+    name: Test Group
+    scope: domainlocal
+    members:
+      set:
+      - Domain Admins
+      - Domain Users
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + + + + + + + +

Key

Description

+

distinguished_name

+

string

+

The distinguishedName of the AD object that was created, removed, or edited.

+

Returned: always

+

Sample: "CN=MyGroup,CN=Users,,DC=domain,DC=test"

+
+

object_guid

+

string

+

The objectGUID of the AD object that was created, removed, or edited.

+

If a new object was created in check mode, a GUID of 0s will be returned.

+

Returned: always

+

Sample: "d84a141f-2b99-4f08-9da0-ed2d26864ba1"

+
+

sid

+

string

+

The Security Identifier (SID) of the group managed.

+

If a new group was created in check mode, the SID will be S-1-5-0000.

+

Returned: always

+

Sample: "S-1-5-21-4151808797-3430561092-2843464588-1104"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/index.html b/tag/1.5.0/collections/microsoft/ad/index.html new file mode 100644 index 0000000..2f2be19 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/index.html @@ -0,0 +1,265 @@ + + + + + + + + Microsoft.Ad — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+ +
+ + +
+ +
+

Microsoft.Ad

+

Collection version 1.5.0

+ +
+

Description

+

Ansible collection for Active Directory management

+

Authors:

+
    +
  • Jordan Borean @jborean93

  • +
  • Matt Davis @nitzmahone

  • +
+

Supported ansible-core versions:

+
    +
  • 2.14 or newer

  • +
+ +
+
+

Communication

+ +
+
+
+
+

Scenario Guides

+ +
+
+

Plugin Index

+

These are the plugins in the microsoft.ad collection:

+
+

Modules

+ +
+
+
+
+

Filter Plugins

+ +
+
+
+
+

Inventory Plugins

+ +
+
+
+

See also

+

List of collections with docs hosted here.

+
+
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/ldap_inventory.html b/tag/1.5.0/collections/microsoft/ad/ldap_inventory.html new file mode 100644 index 0000000..07ee53f --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/ldap_inventory.html @@ -0,0 +1,797 @@ + + + + + + + + microsoft.ad.ldap inventory – Inventory plugin for Active Directory — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.ldap inventory – Inventory plugin for Active Directory

+
+

Note

+

This inventory plugin is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.ldap.

+
+

New in microsoft.ad 1.1.0

+ +
+

Synopsis

+
    +
  • Inventory plugin for Active Directory or other LDAP sources.

  • +
  • Uses a YAML configuration file that ends with microsoft.ad.ldap.{yml|yaml}.

  • +
  • Each host that is added will set the inventory_hostname to the name of the LDAP computer object and ansible_host to the value of the dNSHostName LDAP attribute if set. If the dNSHostName attribute is not set on the computer object then ansible_host is not set. See LDAP inventory hostname for more information on how these values are set and how to adjust them.

  • +
  • The host fact microsoft_ad_distinguished_name will also be set to the distinguished name of the host that was used to derive the host entry.

  • +
  • Any other fact that is needed, needs to be defined in the attributes option.

  • +
+
+
+

Requirements

+

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

+
    +
  • dnspython - For option server lookup support

  • +
  • pyspnego >= 0.8.0

  • +
  • pyspnego[kerberos] - For Kerberos and server lookup support

  • +
  • sansldap

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

attributes

+

dictionary

+

The LDAP attributes to retrieve.

+

The keys specified are the LDAP attributes requested and the values for each attribute is a dictionary that reflects what host var to set it to and how.

+

Each key of the inner dictionary value is the host variable name to set and the value is the template to use to derive the value. If no value is explicitly set then it will use the coerced value as returned from the LDAP attribute.

+

Attributes that are denoted as single value in the LDAP schema are returned as that single value, multi valued attributes are returned as a list of values.

+

See LDAP inventory attributes for more information.

+

Default: {}

+
+

auth_protocol

+

string

+

The authentication protocol to use when connecting to the LDAP host.

+

Defaults to certificate if LDAPS/StartTLS is used and certificate has been specified. Otherwise it defaults to negotiate.

+

simple is simple authentication where the user and password are sent in plaintext. It does not support any encryption so either must be used with LDAPS, or StartTLS. If using over a plaintext LDAP connection without TLS, encrypt=False must be specified to explicitly opt into no encryption.

+

certificate is TLS client certificate authentication. It can only be used with LDAPS or StartTLS. See certificate for more information on how to specify the client certificate used for authentication.

+

negotiate will attempt to negotiate Kerberos authentication with a fallback to NTLM. If Kerberos is available the Kerberos credential cache can be used if no username or password is specified.

+

kerberos will use Kerberos authentication with no NTLM fallback.

+

ntlm will use NTLM authentication with no Kerberos attempt.

+

negotiate, kerberos, and ntlm support encryption over LDAP.

+

Kerberos support requires the pyspnego[kerberos] extras to be installed.

+

See LDAP authentication for more information.

+

This option can be set using a Jinja2 template value.

+

Choices:

+
    +
  • "simple"

  • +
  • "certificate"

  • +
  • "negotiate"

  • +
  • "kerberos"

  • +
  • "ntlm"

  • +
+

Configuration:

+ +
+

ca_cert

+

string

+

Can be the path to a CA certificate PEM or DER file, directory of PEM certificates, or the CA certificate PEM string that is used for certificate validation.

+

If omitted, the default CA store used for validation is dependent on the current Python settings.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

cert_validation

+

string

+

The certificate validation behaviour when using a TLS connection.

+

This can be set to always, ignore, ignore_hostname.

+

always will perform certificate hostname and CA validation.

+

ignore will ignore any certificate errors.

+

ignore_hostname will validate the CA trust chain but will ignore any hostname checks performed by TLS.

+

See Certificate validation for more information.

+

This option can be set using a Jinja2 template value.

+

Choices:

+
    +
  • "always" ← (default)

  • +
  • "ignore"

  • +
  • "ignore_hostname"

  • +
+

Configuration:

+ +
+

certificate

+

string

+

The certificate or certificate with key bundle that is used for certificate authentication.

+

The value can either be a path to a file containing the certificate or string of the PEM encoded certificate.

+

If using a path to a certificate file, the file can be a PEM encoded certificate, a PEM encoded certificate and key bundle, a DER encoded certificate, or a PFX/PKCS12 encoded certificate and key bundle.

+

Use certificate_key if the certificate specified does not contain the key.

+

Use certificate_password if the key is encrypted with a password.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

certificate_key

+

string

+

The certificate key that is used for certificate authentication.

+

The value can either be a path to a file containing the key in the PEM or DER encoded form, or it can be the string of a PEM encoded key.

+

Use certificate_password if the key is encrypted with a password.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

certificate_password

+

string

+

The password used to decrypt the certificate key specified by certificate or certificate_key.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

compose

+

dictionary

+

Create vars from jinja2 expressions.

+

Default: {}

+
+

connection_timeout

+

integer

+

The timeout in seconds to wait until the connection is established before failing.

+

This option can be set using a Jinja2 template value.

+

Default: 5

+

Configuration:

+ +
+

encrypt

+

boolean

+

Whether encryption is required for the connection.

+

Encryption can either be performed using the authentication protocol or through TLS.

+

The auth_protocol negotiate, kerberos, and ntlm all support encryption over LDAP whereas simple does not.

+

If using auth_protocol=simple over LDAP without TLS then this must be set to False. As no encryption is used, all traffic will be in plaintext and should be avoided.

+

This option can be set using a Jinja2 template value.

+

Choices:

+
    +
  • false

  • +
  • true ← (default)

  • +
+

Configuration:

+ +
+

filter

+

string

+

The LDAP filter string used to query the computer objects.

+

By default, this will be combined with the filter “(objectClass=computer)”. Use filter_without_computer to override this behavior and have filter be the only filter used.

+
+

filter_without_computer

+

boolean

+

added in microsoft.ad 1.3.0

+

Will not combine the filter value with the filter “(objectClass=computer)”.

+

In most cases this should be false but can be set to true to have the filter value specified be the only filter used.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+

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)

  • +
+
+

password

+

string

+

The password to authenticate with.

+

If auth_protocol is simple and no password is specified, the bind will be performed as an unauthenticated bind.

+

If auth_protocol is negotiate, kerberos, or ntlm and no password is specified, it will attempt to use the local cached credential specified by username if available.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

port

+

integer

+

The LDAP port to use for the connection.

+

Port 389 is used for LDAP and port 686 is used for LDAPS.

+

Defaults to port 636 if tls_mode=ldaps otherwise 389.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

search_base

+

string

+

The LDAP search base to find the computer objects in.

+

Defaults to the defaultNamingContext of the Active Directory server if not specified.

+

If searching a larger Active Directory database, it is recommended to narrow the search base to speed up the queries.

+
+

search_scope

+

string

+

The scope of the LDAP search to perform.

+

base will search only the current path or object specified by search_base. This is typically not useful for inventory plugins.

+

one_level will search only the immediate child objects in search_base.

+

subtree will search the immediate child objects and any nested objects in search_base.

+

Choices:

+
    +
  • "base"

  • +
  • "one_level"

  • +
  • "subtree" ← (default)

  • +
+
+

server

+

string

+

The domain controller/server to connect to.

+

If not specified the server will be derived from the current krb5.conf default_realm setting and with an SRV DNS lookup.

+

See Server lookup for more information.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+

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

  • +
+
+

tls_mode

+

string

+

The TLS operation to use.

+

If an explicit port is set to 636 then this defaults to ldaps.

+

ldaps will connect over LDAPS (port 636).

+

start_tls will connect over LDAP (port 389) and perform the StartTLS operation before the authentication bind.

+

It is recommended to use ldaps over start_tls if TLS is going to be used.

+

This option can be set using a Jinja2 template value.

+

Choices:

+
    +
  • "ldaps"

  • +
  • "start_tls"

  • +
+

Configuration:

+ +
+

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:

+ +
+

username

+

string

+

The username to authenticate with.

+

If auth_protocol is simple and no username is specified, anonymous authentication is used.

+

If auth_protocol is negotiate, kerberos, or ntlm and no username is specified, it will attempt to use the local cached credential if available, for example one retrieved by kinit.

+

This option can be set using a Jinja2 template value.

+

Configuration:

+ +
+
+
+

Notes

+
+

Note

+
    +
  • See LDAP inventory for more details on how to use this inventory plugin.

  • +
  • See LAPS for more details on how this plugin can retrieve the LAPS password information.

  • +
  • This plugin is a tech preview and the module options are subject to change based on feedback received.

  • +
  • Unless specified otherwise in the option description, the value specified in the config file is used as is. Only the LDAP connection options allow using a Jinja2 template.

  • +
  • See LDAP connection help for more information about LDAP connections.

  • +
+
+
+
+

Examples

+
# Set in the file ending with microsoft.ad.ldap.yml or microsoft.ad.ldap.yaml
+plugin: microsoft.ad.ldap
+
+
+####################################################################
+#                        Connection Options                        #
+#                                                                  #
+# These options control how the plugin connects to the LDAP server #
+####################################################################
+
+# Connects to ldap://dc01.domain.com:389
+server: dc01.domain.com
+port: 389
+
+# Connects to ldaps://dc01.domain.com:636
+server: dc01.domain.com
+tls_mode: ldaps
+
+# Connects to the global catalog
+# ldap://dc01.domain.com:3268
+server: dc01.domain.com
+port: 3268
+
+# Provides explicit user, will use the current Kerberos ticket if no credential
+# is provided.
+username: domain-user@DOMAIN.COM
+password: Password123!
+
+# Only allow Kerberos authentication.
+auth_protocol: kerberos
+
+# Verify LDAPS CA chain with custom CA chain.
+tls_mode: ldaps
+ca_cert: /home/user/certs/ldap.pem
+
+# The username and password can be retrieved using a template with a lookup.
+# Other connection options can also be set this way, the option description
+# tells you whether it can be set to a template.
+username: '{{ lookup("ansible.builtin.env", "LDAP_USERNAME") }}'
+password: '{{ lookup("ansible.builtin.env", "LDAP_PASSWORD") }}'
+
+##############################################
+#               Search Options               #
+#                                            #
+# These options control the searching rules  #
+##############################################
+
+# Search for computer accounts in the Workshop OU.
+search_base: OU=Workshop A,DC=domain,DC=com
+
+# Filter the computer accounts returned for only ones with the dNSDomainName
+# attribute set.
+filter: (dNSDomainName=*)
+
+# Filter computer accounts returned for ones starting with PROD and with the
+# LAPS password set.
+filter: (&(sAMAccountName=PROD*)(ms-Mcs-AdmPwd=*))
+
+# See documentation for more details
+attributes:
+  sAMAccountName:
+    sam_account_name:
+  objectSid:
+    computer_sid:
+  pwdLastSet:
+    password_last_set: this | microsoft.ad.as_datetime
+  comment:
+    host_comment
+  memberOf:
+    # Gets the value (1) of the first RDN (0) of each memberOf instance (this).
+    # For example 'CN=Domain Admins,CN=Users,DC=domain,DC=test'
+    # will be returned as just 'Domain Admins'
+    computer_membership: this | microsoft.ad.parse_dn | map(attribute="0.1")
+  location:
+
+
+############################################################################
+#                             LAPS Integration                             #
+#                                                                          #
+# Examples on how to use the new Windows LAPS values as connection options #
+############################################################################
+
+attributes:
+  # msLAPS-Password is used if no encryption has been configured.
+  # Currently an encrypted LAPS password is not supported.
+  msLAPS-Password:
+    ansible_user: (this | from_json).n
+    ansible_password: (this | from_json).p
+
+  # msLAPS-EncryptedPassword is used if encryption has been configured.
+  # If the Python dpapi-ng library is installed the `this`` value will
+  # contain the entry `value` which is the decrypted value. The ``info``
+  # entry will contain the reason why the value could not be decrypted.
+  msLAPS-EncryptedPassword:
+    ansible_user: (this.value | from_json).n
+    ansible_password: (this.value | from_json).p
+
+  # ms-Mcs-AdmPwd is used for Legacy LAPS and stores just the password.
+  # The username needs to be hardcoded as a string value for this template.
+  ms-Mcs-AdmPwd:
+    ansible_user: '"Administrator"'
+    ansible_password: this
+
+
+#####################################################################
+#                        Constructed Options                        #
+#                                                                   #
+# These options control the constructed values like vars and groups #
+#####################################################################
+
+# Build composed host variables. Requires attributes to be set in the
+# attributes option to be referenced here.
+compose:
+  host_var: computer_sid
+
+# Conditionals that adds found hosts to the groups specified.
+groups:
+  # Adds all hosts to the windows group
+  windows: true
+
+  # Uses the memberOf fact documented above to place the host in the production
+  # group if it's a member of that group
+  production: '"Production Group" in computer_membership'
+
+# Adds the host to a group site_{{ location }} with the default group of
+# site_unknown if the location isn't defined
+keyed_groups:
+- key: location | default(omit)
+  prefix: site
+  default_value: unknown
+
+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+

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 Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/membership_module.html b/tag/1.5.0/collections/microsoft/ad/membership_module.html new file mode 100644 index 0000000..92c2573 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/membership_module.html @@ -0,0 +1,468 @@ + + + + + + + + microsoft.ad.membership module – Manage domain/workgroup membership for a Windows host — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.membership module – Manage domain/workgroup membership for a Windows host

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.membership.

+
+ +
+

Synopsis

+
    +
  • Manages domain membership or workgroup membership for a Windows host. Also supports hostname changes.

  • +
  • This module may require subsequent use of the ansible.windows.win_reboot action if changes are made.

  • +
+
+

Note

+

This module has a corresponding action plugin.

+
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

dns_domain_name

+

string

+

When state=domain, this is the DNS name of the domain to which the targeted Windows host should be joined.

+

This cannot be set when offline_join_blob is specified.

+
+

domain_admin_password

+

string

+

Password for the specified domain_admin_user.

+

This must be set unless offline_join_blob is specified.

+
+

domain_admin_user

+

string

+

Username of a domain admin for the target domain (required to join or leave the domain).

+

This must be set unless offline_join_blob is specified.

+
+

domain_ou_path

+

string

+

The desired OU path for adding the computer object.

+

This is only used when adding the target host to a domain, if it is already a member then it is ignored.

+

This cannot be set when offline_join_blob is specified.

+
+

hostname

+

string

+

The desired hostname for the Windows host.

+

This cannot be set when offline_join_blob is specified.

+
+

offline_join_blob

+

string

+

The base64 string of the domain offline join blob to use when joining the host to a domain.

+

This blob can been generated by the microsoft.ad.offline_join module.

+

This is mutually exclusive with domain_admin_user, dns_domain_name, and domain_ou_path.

+

It also cannot be used with hostname.

+
+

reboot

+

boolean

+

If true, this will reboot the host if a reboot was required to configure the domain.

+

If false, this will not reboot the host if a reboot was required and instead sets the reboot_required return value to true.

+

If changing from a domain to workgroup, the connection account must be a local user that can connect to the host after it has unjoined the domain.

+

This cannot be used with async mode.

+

To use this parameter, ensure the fully qualified module name is used in the task or the collections keyword includes this collection.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+

state

+

string / required

+

Whether the target host should be a member of a domain or workgroup.

+

When state=domain, dns_domain_name, domain_admin_user, and domain_admin_password or offline_join_blob must be set.

+

When state=workgroup, workgroup_name must be set.

+

Choices:

+
    +
  • "domain"

  • +
  • "workgroup"

  • +
+
+

workgroup_name

+

string

+

When state=workgroup, this is the name of the workgroup that the Windows host should be in.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

action

+

Support: full

+

Indicates this has a corresponding action plugin so some parts of the options can be executed on the controller

+
+

async

+

Support: partial

+

Supported for all scenarios except with reboot=True.

+

Supports being used with the async keyword

+
+

bypass_host_loop

+

Support: none

+

Forces a ‘global’ task that does not execute per host, this bypasses per host templating and serial, throttle and other loop considerations

+

Conditionals will work as if run_once is being used, variables used will be from the first available host

+

This action will not work normally outside of lockstep strategies

+
+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • This module must be run on a Windows target host.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
microsoft.ad.offline_join

Get the Offline Domain Join BLOB.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
ansible.windows.win_group

The official documentation on the ansible.windows.win_group module.

+
+
ansible.windows.win_group_membership

The official documentation on the ansible.windows.win_group_membership module.

+
+
ansible.windows.win_user

The official documentation on the ansible.windows.win_user module.

+
+
Migration guide

This module replaces ansible.windows.win_domain_membership. See the migration guide for details.

+
+
ansible.windows.win_domain_membership

The official documentation on the ansible.windows.win_domain_membership module.

+
+
+
+
+
+

Examples

+
- name: join host to ansible.vagrant with automatic reboot
+  microsoft.ad.membership:
+    dns_domain_name: ansible.vagrant
+    hostname: mydomainclient
+    domain_admin_user: testguy@ansible.vagrant
+    domain_admin_password: password123!
+    domain_ou_path: "OU=Windows,OU=Servers,DC=ansible,DC=vagrant"
+    state: domain
+    reboot: true
+
+- name: join host to workgroup with manual reboot in later task
+  microsoft.ad.membership:
+    workgroup_name: mywg
+    domain_admin_user: '{{ win_domain_admin_user }}'
+    domain_admin_password: '{{ win_domain_admin_password }}'
+    state: workgroup
+  register: workgroup_res
+
+- name: reboot host after joining workgroup
+  ansible.windows.win_reboot:
+  when: workgroup_res.reboot_required
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + +

Key

Description

+

reboot_required

+

boolean

+

True if changes were made that require a reboot.

+

Returned: always

+

Sample: true

+
+
+

Authors

+
    +
  • Matt Davis (@nitzmahone)

  • +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/object_info_module.html b/tag/1.5.0/collections/microsoft/ad/object_info_module.html new file mode 100644 index 0000000..73ce0e4 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/object_info_module.html @@ -0,0 +1,464 @@ + + + + + + + + microsoft.ad.object_info module – Gather information an Active Directory object — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.object_info module – Gather information an Active Directory object

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.object_info.

+
+ +
+

Synopsis

+
    +
  • Gather information about multiple Active Directory object(s).

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

domain_password

+

string

+

The password for domain_username.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_username

+

string

+

The username to use when interacting with AD.

+

If this is not set then the user that is used for authentication will be the connection user.

+

Ansible will be unable to use the connection user unless auth is Kerberos with credential delegation or CredSSP, or become is used on the task.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

filter

+

string

+

Specifies a query string using the PowerShell Expression Language syntax.

+

This follows the same rules and formatting as the -Filter parameter for the PowerShell AD cmdlets except there is no variable substitutions.

+

This is mutually exclusive with identity and ldap_filter.

+
+

identity

+

string

+

Specifies a single Active Directory object by its distinguished name or its object GUID.

+

This is mutually exclusive with filter and ldap_filter.

+

This cannot be used with either the search_base or search_scope options.

+
+

include_deleted

+

boolean

+

Also search for deleted Active Directory objects.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+

ldap_filter

+

string

+

Like filter but this is a traditional LDAP query string to filter the objects to return.

+

This is mutually exclusive with filter and identity.

+
+

properties

+

list / elements=string

+

A list of properties to return.

+

If a property is *, all properties that have a set value on the AD object will be returned.

+

If a property is valid on the object but not set, it is only returned if defined explicitly in this option list.

+

The properties DistinguishedName, Name, ObjectClass, and ObjectGUID are always returned.

+

Specifying multiple properties can have a performance impact, it is best to only return what is needed.

+

If an invalid property is specified then the module will display a warning for each object it is invalid on.

+
+

search_base

+

string

+

Specify the Active Directory path to search for objects in.

+

This cannot be set with identity.

+

By default the search base is the default naming context of the target AD instance which is the DN returned by Get-ADRootDSE | Select-Object -ExpandProperty defaultNamingContext.

+
+

search_scope

+

string

+

Specify the scope of when searching for an object in the search_base.

+

base will limit the search to the base object so the maximum number of objects returned is always one. This will not search any objects inside a container..

+

one_level will search the current path and any immediate objects in that path.

+

subtree will search the current path and all objects of that path recursively.

+

This cannot be set with identity.

+

Choices:

+
    +
  • "base"

  • +
  • "one_level"

  • +
  • "subtree"

  • +
+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • The groupType_AnsibleFlags, msDS-SupportedEncryptionTypes_AnsibleFlags, sAMAccountType_AnsibleFlags, and userAccountControl_AnsibleFlags return property is something set by the module itself as an easy way to view what those flags represent. These properties cannot be used as part of the filter or ldap_filter and are automatically added if those properties were requested.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
microsoft.ad.object

Manage Active Directory objects.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
Migration guide

This module replaces community.windows.win_domain_object_info. See the migration guide for details.

+
+
community.windows.win_domain_object_info

The official documentation on the community.windows.win_domain_object_info module.

+
+
+
+
+
+

Examples

+
- name: Get all properties for the specified account using its DistinguishedName
+  microsoft.ad.object_info:
+    identity: CN=Username,CN=Users,DC=domain,DC=com
+    properties: '*'
+
+- name: Get the SID for all user accounts as a filter
+  microsoft.ad.object_info:
+    filter: ObjectClass -eq 'user' -and objectCategory -eq 'Person'
+    properties:
+    - objectSid
+
+- name: Get the SID for all user accounts as a LDAP filter
+  microsoft.ad.object_info:
+    ldap_filter: (&(objectClass=user)(objectCategory=Person))
+    properties:
+    - objectSid
+
+- name: Search all computer accounts in a specific path that were added after February 1st
+  microsoft.ad.object_info:
+    filter: objectClass -eq 'computer' -and whenCreated -gt '20200201000000.0Z'
+    properties: '*'
+    search_scope: one_level
+    search_base: CN=Computers,DC=domain,DC=com
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + +

Key

Description

+

objects

+

list / elements=dictionary

+

A list of dictionaries that are the Active Directory objects found and the properties requested.

+

The dict’s keys are the property name and the value is the value for the property.

+

All date properties are return in the ISO 8601 format in the UTC timezone.

+

All SID properties are returned as a dict with the keys Sid as the SID string and Name as the translated SID account name.

+

All byte properties are returned as a base64 string.

+

All security descriptor properties are returned as the SDDL string of that descriptor.

+

The properties DistinguishedName, Name, ObjectClass, and ObjectGUID are always returned.

+

Returned: always

+

Sample: "[{\n  \"accountExpires\": 0,\n  \"adminCount\": 1,\n  \"CanonicalName\": \"domain.com/Users/Administrator\",\n  \"CN\": \"Administrator\",\n  \"Created\": \"2020-01-13T09:03:22.0000000Z\",\n  \"Description\": \"Built-in account for administering computer/domain\",\n  \"DisplayName\": null,\n  \"DistinguishedName\": \"CN=Administrator,CN=Users,DC=domain,DC=com\",\n  \"memberOf\": [\n    \"CN=Group Policy Creator Owners,CN=Users,DC=domain,DC=com\",\n    \"CN=Domain Admins\",CN=Users,DC=domain,DC=com\"\n  ],\n  \"Name\": \"Administrator\",\n  \"nTSecurityDescriptor\": \"O:DAG:DAD:PAI(A;;LCRPLORC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPLOCRSDRCWDWO;;;BA)\",\n  \"ObjectCategory\": \"CN=Person,CN=Schema,CN=Configuration,DC=domain,DC=com\",\n  \"ObjectClass\": \"user\",\n  \"ObjectGUID\": \"c8c6569e-4688-4f3c-8462-afc4ff60817b\",\n  \"objectSid\": {\n    \"Sid\": \"S-1-5-21-2959096244-3298113601-420842770-500\",\n    \"Name\": \"DOMAIN\\Administrator\"\n  },\n  \"sAMAccountName\": \"Administrator\",\n}]\n"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/object_module.html b/tag/1.5.0/collections/microsoft/ad/object_module.html new file mode 100644 index 0000000..283ae16 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/object_module.html @@ -0,0 +1,593 @@ + + + + + + + + microsoft.ad.object module – Manage Active Directory objects — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.object module – Manage Active Directory objects

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.object.

+
+ +
+

Synopsis

+
    +
  • Manages Active Directory objects and their attributes.

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

attributes

+

dictionary

+

The attributes to either add, remove, or set on the AD object.

+

The value of each attribute option should be a dictionary where the key is the LDAP attribute, e.g. firstName, comment and the value is the value, or list of values, to set for that attribute.

+

The attribute value(s) can either be the raw string, integer, or bool value to add, remove, or set on the attribute in question.

+

The value can also be a dictionary with the type key set to bytes, date_time, security_descriptor, or raw and the value for this entry under the value key.

+

The bytes type has a value that is a base64 encoded string of the raw bytes to set.

+

The date_time type has a value that is the ISO 8601 DateTime string of the DateTime to set. The DateTime will be set as the Microsoft FILETIME integer value which is the number of 100 nanoseconds since 1601-01-01 in UTC.

+

The security_descriptor type has a value that is the Security Descriptor SDDL string used for the nTSecurityDescriptor attribute.

+

The raw type is the int, string, or boolean value to set.

+

String attribute values are compared using a case sensitive match on the AD object being managed.

+

See LDAP attributes help for more information.

+

Default: {}

+
+

add

+

dictionary

+

A dictionary of all the attributes and their value(s) to add to the AD object being managed if they are not already present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

remove

+

dictionary

+

A dictionary of all the attributes and their value(s) to remove from the AD object being managed if they are present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

set

+

dictionary

+

A dictionary of all attributes and their value(s) to set on the AD object being managed.

+

This will replace any existing values if they do not match the ones being requested.

+

The order of attribute values are not checked only, only that the values requested are the only values on the object attribute.

+

Set this to null or an empty list to clear any values for the attribute.

+

Default: {}

+
+

description

+

string

+

The description of the AD object to set.

+

This is the value set on the description LDAP attribute.

+
+

display_name

+

string

+

The display name of the AD object to set.

+

This is the value of the displayName LDAP attribute.

+
+

domain_password

+

string

+

The password for domain_username.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_username

+

string

+

The username to use when interacting with AD.

+

If this is not set then the user that is used for authentication will be the connection user.

+

Ansible will be unable to use the connection user unless auth is Kerberos with credential delegation or CredSSP, or become is used on the task.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

identity

+

string

+

The identity of the AD object used to find the AD object to manage.

+

This must be specified if; name is not set, when trying to rename the object with a new name, or when trying to move the object into a different path.

+

The identity can be in the form of a GUID representing the objectGUID value, the userPrincipalName, sAMAccountName, objectSid, or distinguishedName.

+

If omitted, the AD object to manage is selected by the distinguishedName using the format CN={{ name }},{{ path }}. If path is not defined, the defaultNamingContext is used instead.

+
+

name

+

string

+

The name of the AD object to manage, this is not the sAMAccountName of the object but the LDAP cn or name entry of the object in the path specified. Use identity to select an object to manage by its sAMAccountName.

+

If identity is specified, and the name of the object found by that identity does not match this value, the object will be renamed.

+

This must be specified if identity is not set.

+
+

path

+

string

+

The path of the OU or the container where the new object should exist in.

+

If creating a new object, the new object will be created at the path specified. If no path is specified then the defaultNamingContext of the domain will be used as the path for most object types.

+

If managing an existing object found by identity, the path of the found object will be moved to the one specified by this option. If no path is specified, the object will not be moved.

+

The modules microsoft.ad.computer, microsoft.ad.user, and microsoft.ad.group have their own default path that is configured on the Active Directory domain controller.

+

This can be set to the literal value microsoft.ad.default_path which will equal the default value used when creating a new object.

+
+

protect_from_deletion

+

boolean

+

Marks the object as protected from accidental deletion.

+

This applies a deny access right from deleting the object normally and the protection needs to be removed before the object can be deleted through the GUI or any other tool outside Ansible.

+

Using state=absent will still delete the AD object even if it is marked as protected from deletion.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

state

+

string

+

Set to present to ensure the AD object exists.

+

Set to absent to remove the AD object if it exists.

+

The option name must be set when state=present.

+

Using absent will recursively remove the AD object and any child objects if it’s a container. It will also remove the AD object even if the object is marked as protected from accidental deletion.

+

Choices:

+
    +
  • "absent"

  • +
  • "present" ← (default)

  • +
+
+

type

+

string

+

The object type of the AD object.

+

This corresponds to the objectClass of the AD object.

+

Some examples of a type are user, computer, group, subnet, contact, container.

+

This is required when state=present.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • This is a generic module used to create and manage any object type in Active Directory. It will not validate all the correct defaults are set for each type when it is created. If a type specific module is available to manage that AD object type it is recommend to use that.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
  • Some LDAP attributes can have only a single value set while others can have multiple. Some attributes are also read only and cannot be changed. It is recommended to look at the schema metadata for an attribute where System-Only are read only values and Is-Single-Value are attributes with only 1 value.

  • +
  • Attempting to set multiple values to a Is-Single-Value attribute results in undefined behaviour.

  • +
  • If running on a server that is not a Domain Controller, credential delegation through CredSSP or Kerberos with delegation must be used or the domain_username, domain_password must be set.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.object_info

Gather information an Active Directory object.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
+
+
+
+

Examples

+
# Use this to get all valid types in a domain environment
+# (Get-ADObject -SearchBase (Get-ADRootDSE).subschemaSubentry -Filter * -Properties objectClasses).objectClasses |
+#     Select-String -Pattern "Name\s+'(\w+)'" |
+#     ForEach-Object { $_.Matches.Groups[1].Value } |
+#     Sort-Object
+
+- name: Create a contact object
+  microsoft.ad.object:
+    name: MyContact
+    description: My Contact Description
+    type: contact
+    state: present
+
+- name: Rename a contact object
+  microsoft.ad.object:
+    identity: '{{ contact_obj.object_guid }}'
+    name: RenamedContact
+    type: contact
+    state: present
+
+- name: Move a contact object
+  microsoft.ad.object:
+    identity: '{{ contact_object.object_guid }}'
+    name: MyContact
+    path: OU=Contacts,DC=domain,DC=test
+    type: contact
+    state: present
+
+- name: Remove a contact object in default path
+  microsoft.ad.object:
+    name: MyContact
+    state: absent
+
+- name: Remove a contact object in custom path
+  microsoft.ad.object:
+    name: MyContact
+    path: OU=Contacts,DC=domain,DC=test
+    state: absent
+
+- name: Remove a contact by identity
+  microsoft.ad.object:
+    identity: '{{ contact_obj.object_guid }}'
+    state: absent
+
+- name: Create container object with custom attributes
+  microsoft.ad.object:
+    name: App
+    attributes:
+      set:
+        wWWHomePage: https://ansible.com
+    type: container
+    state: present
+
+- name: Clear attribute of any value
+  microsoft.ad.object:
+    name: App
+    attributes:
+      set:
+        wWWHomePage: ~
+    type: container
+    state: present
+
+- name: Edit object security with Everyone Allow All access
+  microsoft.ad.object:
+    name: App
+    attributes:
+      add:
+        nTSecurityDescriptor:
+          type: security_descriptor
+          value: O:DAG:DAD:PAI(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
+    type: container
+    state: present
+
+- name: Ensure multiple values are present in attribute
+  microsoft.ad.object:
+    name: App
+    attributes:
+      add:
+        extensionName:
+        - value 1
+        - value 2
+    type: container
+    state: present
+
+- name: Ensure multiple values are not present in attribute
+  microsoft.ad.object:
+    name: App
+    attributes:
+      remove:
+        extensionName:
+        - value 1
+        - value 3
+    type: container
+    state: present
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + + + + +

Key

Description

+

distinguished_name

+

string

+

The distinguishedName of the AD object that was created, removed, or edited.

+

Returned: always

+

Sample: "CN=TestUser,CN=Users,DC=domain,DC=test"

+
+

object_guid

+

string

+

The objectGUID of the AD object that was created, removed, or edited.

+

If a new object was created in check mode, a GUID of 0s will be returned.

+

Returned: always

+

Sample: "d84a141f-2b99-4f08-9da0-ed2d26864ba1"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/offline_join_module.html b/tag/1.5.0/collections/microsoft/ad/offline_join_module.html new file mode 100644 index 0000000..72fe859 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/offline_join_module.html @@ -0,0 +1,413 @@ + + + + + + + + microsoft.ad.offline_join module – Get the Offline Domain Join BLOB — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.offline_join module – Get the Offline Domain Join BLOB

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.offline_join.

+
+ +
+

Synopsis

+
    +
  • Used to get the Offline Domain Join BLOB.

  • +
  • This BLOB is used to join computers to a domain without any network access.

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

blob_path

+

string

+

If set, will store the blob bytes into a file at this path.

+

This will not create the parent directory specified if it does not exist.

+

The existence of this file is also used as an idempotency check, if the file already exists the blob will not be regenerated.

+

If specified the module return value blob will be null.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+
+

identity

+

string

+

The identity of the computer object used to generate the offline join blob for.

+

This is mutually exclusive with name and (path).

+

The identity can be in the form of a GUID representing the objectGUID value, sAMAccountName, objectSid, or distinguishedName.

+

This option or name must be specified.

+
+

name

+

string

+

The name of the computer object used to generate the offline join blob for.

+

This is mutually exclusive with identity.

+

The name is combined with path to find the AD computer object that matches the DistinguishedName CN={{ name}},{{ path }}.

+

This option or identity must be specified.

+
+

path

+

string

+

The path where the computer object specified by name is stored.

+

By default the default computer path defined in AD is used, for example CN=Computers,DC=domain,DC=com.

+
+

provision_root_ca_certs

+

boolean

+

Adds all the root Certificate Authority certificates on the local machine and adds them to the blob.

+

Choices:

+
    +
  • false ← (default)

  • +
  • true

  • +
+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • For more information on Offline Domain Join see the step-by-step guide.

  • +
  • There is no way to specify specific credentials to communicate with the domain controller when creating the blob. Use become with net credentials if the current user cannot authenticate itself and bypass the double hop problem.

  • +
  • The data returned by this module is very sensitive. If not using blob_path then no_log=True should be used on the task to avoid the data being leaked.

  • +
  • This module will always report a change unless blob_path is specified. If the path is specified then then the existence of that path will act as the idempotency check.

  • +
  • Generating a new blob will reset the password of the computer object, take care that this isn’t called under a computer account that has already been joined.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.membership

Manage domain/workgroup membership for a Windows host.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
+
+
+
+

Examples

+
- name: create computer object
+  microsoft.ad.computer:
+    name: MyComputer
+    state: present
+  register: computer_obj
+
+- name: create offline blob
+  microsoft.ad.offline_join:
+    identity: '{{ computer_obj.object_guid }}'
+  when: computer_obj is changed
+  register: offline_blob
+  no_log: true
+
+- name: join host by offline blob
+  microsoft.ad.membership:
+    offline_join_blob: '{{ offline_blob.blob }}'
+    state: domain
+    reboot: true
+  delegate_to: member-host
+
+- name: create blob and store it in a file on the target host
+  microsoft.ad.offline_join:
+    name: MyComputer
+    path: OU=Production,DC=domain,DC=com
+    blob_path: C:\Windows\TEMP\offline_blob
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + +

Key

Description

+

blob

+

string

+

The blob as a base64 string.

+

This value is empty when running in check mode.

+

This value is null when blob_path is specified.

+

This value is highly sensitive as it contains the credentials and other authentication data needed for an offline join.

+

Returned: always

+

Sample: "ARAIAMzMzMygCAAAAAAAAAAAAgABAAAA"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/ou_module.html b/tag/1.5.0/collections/microsoft/ad/ou_module.html new file mode 100644 index 0000000..bce5f18 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/ou_module.html @@ -0,0 +1,583 @@ + + + + + + + + microsoft.ad.ou module – Manage Active Directory organizational units — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.ou module – Manage Active Directory organizational units

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.ou.

+
+ +
+

Synopsis

+
    +
  • Manages Active Directory organizational units and their attributes.

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

attributes

+

dictionary

+

The attributes to either add, remove, or set on the AD object.

+

The value of each attribute option should be a dictionary where the key is the LDAP attribute, e.g. firstName, comment and the value is the value, or list of values, to set for that attribute.

+

The attribute value(s) can either be the raw string, integer, or bool value to add, remove, or set on the attribute in question.

+

The value can also be a dictionary with the type key set to bytes, date_time, security_descriptor, or raw and the value for this entry under the value key.

+

The bytes type has a value that is a base64 encoded string of the raw bytes to set.

+

The date_time type has a value that is the ISO 8601 DateTime string of the DateTime to set. The DateTime will be set as the Microsoft FILETIME integer value which is the number of 100 nanoseconds since 1601-01-01 in UTC.

+

The security_descriptor type has a value that is the Security Descriptor SDDL string used for the nTSecurityDescriptor attribute.

+

The raw type is the int, string, or boolean value to set.

+

String attribute values are compared using a case sensitive match on the AD object being managed.

+

See LDAP attributes help for more information.

+

Default: {}

+
+

add

+

dictionary

+

A dictionary of all the attributes and their value(s) to add to the AD object being managed if they are not already present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

remove

+

dictionary

+

A dictionary of all the attributes and their value(s) to remove from the AD object being managed if they are present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

set

+

dictionary

+

A dictionary of all attributes and their value(s) to set on the AD object being managed.

+

This will replace any existing values if they do not match the ones being requested.

+

The order of attribute values are not checked only, only that the values requested are the only values on the object attribute.

+

Set this to null or an empty list to clear any values for the attribute.

+

Default: {}

+
+

city

+

string

+

Configures the user’s city.

+

This is the value set on the l LDAP attribute.

+
+

country

+

string

+

Configures the user’s country code.

+

Note that this is a two-character ISO 3166 code.

+

This is the value set on the c LDAP attribute.

+
+

description

+

string

+

The description of the AD object to set.

+

This is the value set on the description LDAP attribute.

+
+

display_name

+

string

+

The display name of the AD object to set.

+

This is the value of the displayName LDAP attribute.

+
+

domain_password

+

string

+

The password for domain_username.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_username

+

string

+

The username to use when interacting with AD.

+

If this is not set then the user that is used for authentication will be the connection user.

+

Ansible will be unable to use the connection user unless auth is Kerberos with credential delegation or CredSSP, or become is used on the task.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

identity

+

string

+

The identity of the AD object used to find the AD object to manage.

+

This must be specified if; name is not set, when trying to rename the object with a new name, or when trying to move the object into a different path.

+

The identity can be in the form of a GUID representing the objectGUID value, the userPrincipalName, sAMAccountName, objectSid, or distinguishedName.

+

If omitted, the AD object to manage is selected by the distinguishedName using the format CN={{ name }},{{ path }}. If path is not defined, the defaultNamingContext is used instead.

+
+

managed_by

+

string

+

The user or group that manages the object.

+

The value can be in the form of a distinguishedName, objectGUID, objectSid, or sAMAccountName).

+

This is the value set on the managedBy LDAP attribute.

+
+

name

+

string

+

The name of the AD object to manage, this is not the sAMAccountName of the object but the LDAP cn or name entry of the object in the path specified. Use identity to select an object to manage by its sAMAccountName.

+

If identity is specified, and the name of the object found by that identity does not match this value, the object will be renamed.

+

This must be specified if identity is not set.

+
+

path

+

string

+

The path of the OU or the container where the new object should exist in.

+

If creating a new object, the new object will be created at the path specified. If no path is specified then the defaultNamingContext of the domain will be used as the path for most object types.

+

If managing an existing object found by identity, the path of the found object will be moved to the one specified by this option. If no path is specified, the object will not be moved.

+

The modules microsoft.ad.computer, microsoft.ad.user, and microsoft.ad.group have their own default path that is configured on the Active Directory domain controller.

+

This can be set to the literal value microsoft.ad.default_path which will equal the default value used when creating a new object.

+
+

postal_code

+

string

+

Configures the user’s postal code / zip code.

+

This is the value set on the postalcode LDAP attribute.

+
+

protect_from_deletion

+

boolean

+

Marks the object as protected from accidental deletion.

+

This applies a deny access right from deleting the object normally and the protection needs to be removed before the object can be deleted through the GUI or any other tool outside Ansible.

+

Using state=absent will still delete the AD object even if it is marked as protected from deletion.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

state

+

string

+

Set to present to ensure the AD object exists.

+

Set to absent to remove the AD object if it exists.

+

The option name must be set when state=present.

+

Using absent will recursively remove the AD object and any child objects if it’s a container. It will also remove the AD object even if the object is marked as protected from accidental deletion.

+

Choices:

+
    +
  • "absent"

  • +
  • "present" ← (default)

  • +
+
+

state_province

+

string

+

Configures the user’s state.

+

This is the value set on the state LDAP attribute.

+
+

street

+

string

+

Configures the user’s street address.

+

This is the value set on the street LDAP attribute.

+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • When an OU is created, protect_from_deletion defaults to True if not specified.

  • +
  • See win_domain_ou migration for help on migrating from community.windows.win_domain_ou to this module.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
  • Some LDAP attributes can have only a single value set while others can have multiple. Some attributes are also read only and cannot be changed. It is recommended to look at the schema metadata for an attribute where System-Only are read only values and Is-Single-Value are attributes with only 1 value.

  • +
  • Attempting to set multiple values to a Is-Single-Value attribute results in undefined behaviour.

  • +
  • If running on a server that is not a Domain Controller, credential delegation through CredSSP or Kerberos with delegation must be used or the domain_username, domain_password must be set.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
microsoft.ad.object_info

Gather information an Active Directory object.

+
+
microsoft.ad.user

Manage Active Directory users.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
Migration guide

This module replaces community.windows.win_domain_ou. See the migration guide for details.

+
+
community.windows.win_domain_ou

The official documentation on the community.windows.win_domain_ou module.

+
+
+
+
+
+

Examples

+
- name: Ensure OU is present & protected
+  microsoft.ad.ou:
+    name: AnsibleFest
+    state: present
+
+- name: Ensure OU is present & protected
+  microsoft.ad.ou:
+    name: EUC Users
+    path: DC=euc,DC=vmware,DC=lan
+    state: present
+    protect_from_deletion: true
+
+- name: Ensure OU is absent
+  microsoft.ad.ou:
+    name: EUC Users
+    path: DC=euc,DC=vmware,DC=lan
+    state: absent
+
+- name: Ensure OU is present with specific properties
+  microsoft.ad.ou:
+    name: WS1Users
+    path: CN=EUC Users,DC=euc,DC=vmware,DC=lan
+    protect_from_deletion: true
+    description: EUC Business Unit
+    city: Sandy Springs
+    country: US
+    state_province: Georgia
+    street: 1155 Perimeter Center West
+    postal_code: 30189
+
+- name: Ensure OU updated with new properties
+  microsoft.ad.ou:
+    name: WS1Users
+    path: DC=euc,DC=vmware,DC=lan
+    protected: false
+    managed_by: jzollo@vmware.com
+    attributes:
+      set:
+        comment: A comment for the OU
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + + + + +

Key

Description

+

distinguished_name

+

string

+

The distinguishedName of the AD object that was created, removed, or edited.

+

Returned: always

+

Sample: "CN=TestUser,CN=Users,DC=domain,DC=test"

+
+

object_guid

+

string

+

The objectGUID of the AD object that was created, removed, or edited.

+

If a new object was created in check mode, a GUID of 0s will be returned.

+

Returned: always

+

Sample: "d84a141f-2b99-4f08-9da0-ed2d26864ba1"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/parse_dn_filter.html b/tag/1.5.0/collections/microsoft/ad/parse_dn_filter.html new file mode 100644 index 0000000..1795d72 --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/parse_dn_filter.html @@ -0,0 +1,302 @@ + + + + + + + + microsoft.ad.parse_dn filter – Parses an LDAP DistinguishedName string into an object. — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.parse_dn filter – Parses an LDAP DistinguishedName string into an object.

+
+

Note

+

This filter plugin is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

To install it, use: ansible-galaxy collection install microsoft.ad.

+

To use it in a playbook, specify: microsoft.ad.parse_dn.

+
+

New in microsoft.ad 1.5.0

+ +
+

Synopsis

+
    +
  • Parses the provided LDAP DistinguishedName (DN) string value into a structured object.

  • +
  • The rules for parsing as defined in RFC 4514.

  • +
  • Each DN contains Relative DistinguishedNames (RDN) separated by , and each RDN can contain multiple attribute type values also known as an AVA. While Microsoft Active Directory DNs can only contain 1 AVA in an RDN this parser supports multiple AVAs.

  • +
  • The returned object for each DN will be provided as a list of lists where the outer list is each RDN component separated by , and the inner list is each AVA separated by = and +. Each RDN entry is guaranteed to have 2 string values for the AVA type and value but can contain more if the RDN contains multiple AVAs separated by +.

  • +
  • The parsed RDN attribute values will be unescaped to represent the actual value rather than the raw string in the DN.

  • +
  • A DN that is invalid will raise a filter error.

  • +
+
+
+

Input

+

This describes the input of the filter, the value before | microsoft.ad.parse_dn.

+ + + + + + + + + + + +

Parameter

Comments

+

Input

+

string / required

+

The LDAP DistinguishedName string to parse.

+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.dn_escape

microsoft.ad.dn_escape filter

+
+
microsoft.ad.ldap

microsoft.ad.ldap inventory

+
+
+
+
+
+

Examples

+
- name: Parses a simple DN
+  set_fact:
+    my_dn: '{{ "CN=Foo,DC=domain,DC=com" | microsoft.ad.parse_dn }}'
+
+# [
+#   ["CN", "Foo"],
+#   ["DC", "domain"],
+#   ["DC", "com"],
+# ]
+
+- name: Parses a DN with an escaped and multi attribute values
+  set_fact:
+    my_dn: '{{ "CN=CA,O=Acme\, Inc.,C=AU+ST=Queensland" | microsoft.ad.parse_dn }}'
+
+# [
+#   ["CN", "CA"],
+#   ["O", "Acme, Inc."],
+#   ["C", "AU", "ST", "Queensland"]
+# ]
+
+# Extract the group names the computer is a member of in the ldap inventory
+# plugin, for example gets the first RDN value inside the parsed DN.
+attributes:
+  memberOf:
+    computer_membership: this | microsoft.ad.parse_dn | map(attribute="0.1")
+
+
+
+
+

Return Value

+ + + + + + + + + + + +

Key

Description

+

Return value

+

list / elements=list

+

The parsed LDAP DN values.

+

Returned: success

+

Sample: [["CN", "Foo"], ["DC", "domain"], ["DC", "com"]]

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+

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 Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/ad/user_module.html b/tag/1.5.0/collections/microsoft/ad/user_module.html new file mode 100644 index 0000000..da58f9f --- /dev/null +++ b/tag/1.5.0/collections/microsoft/ad/user_module.html @@ -0,0 +1,933 @@ + + + + + + + + microsoft.ad.user module – Manage Active Directory users — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

microsoft.ad.user module – Manage Active Directory users

+
+

Note

+

This module is part of the microsoft.ad collection (version 1.5.0).

+

It is not included in ansible-core. +To check whether it is installed, run ansible-galaxy collection list.

+

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

+

To use it in a playbook, specify: microsoft.ad.user.

+
+ +
+

Synopsis

+
    +
  • Manages Active Directory users and their attributes.

  • +
+
+
+

Requirements

+

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

+
    +
  • ActiveDirectory PowerShell module

  • +
+
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Comments

+

account_locked

+

boolean

+

no will unlock the user account if locked.

+

Note that there is not a way to lock an account as an administrator.

+

Accounts are locked due to user actions; as an admin, you may only unlock a locked account.

+

If you wish to administratively disable an account, set enabled to no.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

attributes

+

dictionary

+

The attributes to either add, remove, or set on the AD object.

+

The value of each attribute option should be a dictionary where the key is the LDAP attribute, e.g. firstName, comment and the value is the value, or list of values, to set for that attribute.

+

The attribute value(s) can either be the raw string, integer, or bool value to add, remove, or set on the attribute in question.

+

The value can also be a dictionary with the type key set to bytes, date_time, security_descriptor, or raw and the value for this entry under the value key.

+

The bytes type has a value that is a base64 encoded string of the raw bytes to set.

+

The date_time type has a value that is the ISO 8601 DateTime string of the DateTime to set. The DateTime will be set as the Microsoft FILETIME integer value which is the number of 100 nanoseconds since 1601-01-01 in UTC.

+

The security_descriptor type has a value that is the Security Descriptor SDDL string used for the nTSecurityDescriptor attribute.

+

The raw type is the int, string, or boolean value to set.

+

String attribute values are compared using a case sensitive match on the AD object being managed.

+

See LDAP attributes help for more information.

+

Default: {}

+
+

add

+

dictionary

+

A dictionary of all the attributes and their value(s) to add to the AD object being managed if they are not already present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

remove

+

dictionary

+

A dictionary of all the attributes and their value(s) to remove from the AD object being managed if they are present.

+

This is used for attributes that can contain multiple values, if the attribute only allows a single value, use set instead.

+

Default: {}

+
+

set

+

dictionary

+

A dictionary of all attributes and their value(s) to set on the AD object being managed.

+

This will replace any existing values if they do not match the ones being requested.

+

The order of attribute values are not checked only, only that the values requested are the only values on the object attribute.

+

Set this to null or an empty list to clear any values for the attribute.

+

Default: {}

+
+

city

+

string

+

Configures the user’s city.

+

This is the value set on the l LDAP attribute.

+
+

company

+

string

+

Configures the user’s company name.

+

This is the value set on the company LDAP attribute.

+
+

country

+

string

+

Configures the user’s country code.

+

Note that this is a two-character ISO 3166 code.

+

This is the value set on the c LDAP attribute.

+
+
+

delegates

+

aliases: principals_allowed_to_delegate

+

dictionary

+

The principal objects that the current AD object can trust for delegation to either add, remove or set.

+

The values for each sub option must be specified as a distinguished name CN=shenetworks,CN=Users,DC=ansible,DC=test

+

This is the value set on the msDS-AllowedToActOnBehalfOfOtherIdentity LDAP attribute.

+

This is a highly sensitive attribute as it allows the principals specified to impersonate any account when authenticating with the AD computer object being managed.

+

To clear all principals, use set with an empty list.

+

See Setting list option values for more information on how to add/remove/set list options.

+
+
+

add

+

list / elements=string

+

The AD objects by their DistinguishedName to add as a principal allowed to delegate.

+

Any existing principals not specified by add will be untouched unless specified by remove or not in set.

+
+
+

remove

+

list / elements=string

+

The AD objects by their DistinguishedName to remove as a principal allowed to delegate.

+

Any existing principals not specified by remove will be untouched unless set is defined.

+
+
+

set

+

list / elements=string

+

The AD objects by their DistinguishedName to set as the only principals allowed to delegate.

+

This will remove any existing principals if not specified in this list.

+

Specify an empty list to remove all principals allowed to delegate.

+
+

description

+

string

+

The description of the AD object to set.

+

This is the value set on the description LDAP attribute.

+
+

display_name

+

string

+

The display name of the AD object to set.

+

This is the value of the displayName LDAP attribute.

+
+

domain_password

+

string

+

The password for domain_username.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_server

+

string

+

Specified the Active Directory Domain Services instance to connect to.

+

Can be in the form of an FQDN or NetBIOS name.

+

If not specified then the value is based on the default domain of the computer running PowerShell.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

domain_username

+

string

+

The username to use when interacting with AD.

+

If this is not set then the user that is used for authentication will be the connection user.

+

Ansible will be unable to use the connection user unless auth is Kerberos with credential delegation or CredSSP, or become is used on the task.

+

This can be set under the play’s module defaults under the group/microsoft.ad.domain group.

+
+

email

+

string

+

Configures the user’s email address.

+

This is a record in AD and does not do anything to configure any email servers or systems.

+

This is the value set on the mail LDAP attribute.

+
+

enabled

+

boolean

+

yes will enable the user account.

+

no will disable the account.

+

The default when creating a new is yes if password is specified. If no password is specified then the user will not be enabled.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

firstname

+

string

+

Configures the user’s first name (given name).

+

This is the value set on the givenName LDAP attribute.

+
+

groups

+

dictionary

+

Specifies the group membership the user is added, removed, or set to.

+

To clear all group memberships, use set with an empty list.

+

Note that users cannot be removed from their principal group (for example, “Domain Users”). Attempting to do so will display a warning.

+

Each subkey is set to a list of groups objects to add, remove or set as the membership of this AD user respectively. A group can be in the form of a distinguishedName, objectGUID, objectSid, or sAMAccountName.

+

See Setting list option values for more information on how to add/remove/set list options.

+
+

add

+

list / elements=string

+

The groups to add the user to.

+
+

missing_behaviour

+

string

+

Controls what happens when a group specified by groups is an invalid group name.

+

fail is the default and will return an error any groups do not exist.

+

ignore will ignore any groups that does not exist.

+

warn will display a warning for any groups that do not exist but will continue without failing.

+

Choices:

+
    +
  • "fail" ← (default)

  • +
  • "ignore"

  • +
  • "warn"

  • +
+
+

remove

+

list / elements=string

+

The groups to remove the user from.

+
+

set

+

list / elements=string

+

The only groups the user is a member of.

+

This will clear out any existing groups if not in the specified list.

+

Set to an empty list to clear all group membership of the user.

+
+

identity

+

string

+

The identity of the AD object used to find the AD object to manage.

+

This must be specified if; name is not set, when trying to rename the object with a new name, or when trying to move the object into a different path.

+

The identity can be in the form of a GUID representing the objectGUID value, the userPrincipalName, sAMAccountName, objectSid, or distinguishedName.

+

If omitted, the AD object to manage is selected by the distinguishedName using the format CN={{ name }},{{ path }}. If path is not defined, the defaultNamingContext is used instead.

+
+

name

+

string

+

The name of the AD object to manage, this is not the sAMAccountName of the object but the LDAP cn or name entry of the object in the path specified. Use identity to select an object to manage by its sAMAccountName.

+

If identity is specified, and the name of the object found by that identity does not match this value, the object will be renamed.

+

This must be specified if identity is not set.

+
+

password

+

string

+

Optionally set the user’s password to this (plain text) value.

+

To enable an account - enabled - a password must already be configured on the account, or you must provide a password here.

+

Use the update_password option to control how a password is checked for idempotency.

+
+

password_expired

+

boolean

+

yes will require the user to change their password at next login.

+

no will clear the expired password flag.

+

This is mutually exclusive with password_never_expires.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

password_never_expires

+

boolean

+

yes will set the password to never expire.

+

no will allow the password to expire.

+

This is mutually exclusive with password_expired.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

path

+

string

+

The path of the OU or the container where the new object should exist in.

+

If creating a new object, the new object will be created at the path specified. If no path is specified then the defaultNamingContext of the domain will be used as the path for most object types.

+

If managing an existing object found by identity, the path of the found object will be moved to the one specified by this option. If no path is specified, the object will not be moved.

+

The modules microsoft.ad.computer, microsoft.ad.user, and microsoft.ad.group have their own default path that is configured on the Active Directory domain controller.

+

This can be set to the literal value microsoft.ad.default_path which will equal the default value used when creating a new object.

+
+

postal_code

+

string

+

Configures the user’s postal code / zip code.

+

This is the value set on the postalcode LDAP attribute.

+
+

protect_from_deletion

+

boolean

+

Marks the object as protected from accidental deletion.

+

This applies a deny access right from deleting the object normally and the protection needs to be removed before the object can be deleted through the GUI or any other tool outside Ansible.

+

Using state=absent will still delete the AD object even if it is marked as protected from deletion.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+

sam_account_name

+

string

+

The sAMAccountName value to set for the user.

+

If omitted, the name value is used when creating a new user.

+
+
+

spn

+

aliases: spns

+

dictionary

+

Specifies the service principal name(s) for the account to add, remove or set.

+

This is the value set on the servicePrincipalName LDAP attribute.

+

To clear all service principal names, use set with an empty list.

+

See Setting list option values for more information on how to add/remove/set list options.

+
+
+

add

+

list / elements=string

+

The SPNs to add to servicePrincipalName.

+
+
+

remove

+

list / elements=string

+

The SPNs to remove from servicePrincipalName.

+
+
+

set

+

list / elements=string

+

The SPNs to set as the only values in servicePrincipalName.

+

This will clear out any existing SPNs if not in the specified list.

+

Set to an empty list to clear all SPNs on the AD object.

+
+

state

+

string

+

Set to present to ensure the AD object exists.

+

Set to absent to remove the AD object if it exists.

+

The option name must be set when state=present.

+

Using absent will recursively remove the AD object and any child objects if it’s a container. It will also remove the AD object even if the object is marked as protected from accidental deletion.

+

Choices:

+
    +
  • "absent"

  • +
  • "present" ← (default)

  • +
+
+

state_province

+

string

+

Configures the user’s state.

+

This is the value set on the state LDAP attribute.

+
+

street

+

string

+

Configures the user’s street address.

+

This is the value set on the streetaddress LDAP attribute.

+
+
+

surname

+

aliases: lastname

+

string

+

Configures the user’s last name (surname).

+

This is the value set on the sn LDAP attribute.

+
+

update_password

+

string

+

always will always update passwords.

+

on_create will only set the password for newly created users.

+

when_changed will only set the password when changed.

+

Using when_changed will not work if the account is not enabled or is expired.

+

Choices:

+
    +
  • "always" ← (default)

  • +
  • "on_create"

  • +
  • "when_changed"

  • +
+
+

upn

+

string

+

Configures the User Principal Name (UPN) for the account.

+

This is not required, but is best practice to configure for modern versions of Active Directory.

+

The format is <username>@<domain>.

+

This is the value set on the userPrincipalName LDAP attribute.

+
+

user_cannot_change_password

+

boolean

+

yes will prevent the user from changing their password.

+

no will allow the user to change their password.

+

Choices:

+
    +
  • false

  • +
  • true

  • +
+
+
+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

Attribute

Support

Description

+

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

+
+

platform

+

Platform: windows

+

Target OS/families that can be operated against

+
+
+
+

Notes

+
+

Note

+
    +
  • See win_domain_user migration for help on migrating from community.windows.win_domain_user to this module.

  • +
  • This module must be run on a Windows target host with the ActiveDirectory module installed.

  • +
  • Some LDAP attributes can have only a single value set while others can have multiple. Some attributes are also read only and cannot be changed. It is recommended to look at the schema metadata for an attribute where System-Only are read only values and Is-Single-Value are attributes with only 1 value.

  • +
  • Attempting to set multiple values to a Is-Single-Value attribute results in undefined behaviour.

  • +
  • If running on a server that is not a Domain Controller, credential delegation through CredSSP or Kerberos with delegation must be used or the domain_username, domain_password must be set.

  • +
+
+
+
+

See Also

+
+

See also

+
+
microsoft.ad.domain

Ensures the existence of a Windows domain.

+
+
microsoft.ad.domain_controller

Manage domain controller/member server state for a Windows host.

+
+
microsoft.ad.group

Manage Active Directory group objects.

+
+
microsoft.ad.object

Manage Active Directory objects.

+
+
microsoft.ad.object_info

Gather information an Active Directory object.

+
+
microsoft.ad.computer

Manage Active Directory computer objects.

+
+
Migration guide

This module replaces community.windows.win_domain_user. See the migration guide for details.

+
+
community.windows.win_domain_user

The official documentation on the community.windows.win_domain_user module.

+
+
+
+
+
+

Examples

+
- name: Ensure user bob is present with address information
+  microsoft.ad.user:
+    identity: bob
+    firstname: Bob
+    surname: Smith
+    company: BobCo
+    password: B0bP4ssw0rd
+    state: present
+    groups:
+      set:
+      - Domain Admins
+    street: 123 4th St.
+    city: Sometown
+    state_province: IN
+    postal_code: 12345
+    country: US
+    attributes:
+      set:
+        telephoneNumber: 555-123456
+
+- name: Ensure user bob is created and use custom credentials to create the user
+  microsoft.ad.user:
+    identity: bob
+    firstname: Bob
+    surname: Smith
+    password: B0bP4ssw0rd
+    state: present
+    domain_username: DOMAIN\admin-account
+    domain_password: SomePas2w0rd
+    domain_server: domain@DOMAIN.COM
+
+- name: Ensure user bob is present in OU ou=test,dc=domain,dc=local
+  microsoft.ad.user:
+    identity: bob
+    password: B0bP4ssw0rd
+    state: present
+    path: ou=test,dc=domain,dc=local
+    groups:
+      set:
+      - Domain Admins
+      - Domain Users
+
+- name: Ensure user bob is absent
+  microsoft.ad.user:
+    identity: bob
+    state: absent
+
+- name: Ensure user has only these spn's defined
+  microsoft.ad.user:
+    identity: liz.kenyon
+    spn:
+      set:
+      - MSSQLSvc/us99db-svr95:1433
+      - MSSQLSvc/us99db-svr95.vmware.com:1433
+
+- name: Ensure user has spn added
+  microsoft.ad.user:
+    identity: liz.kenyon
+    spn:
+      add:
+      - MSSQLSvc/us99db-svr95:2433
+
+- name: Ensure user is created with delegates and spn's defined
+  microsoft.ad.user:
+    identity: shmemmmy
+    password: The3rubberducki33!
+    state: present
+    groups:
+      set:
+      - Domain Admins
+      - Domain Users
+      - Enterprise Admins
+    delegates:
+      set:
+      - CN=shenetworks,CN=Users,DC=ansible,DC=test
+      - CN=mk.ai,CN=Users,DC=ansible,DC=test
+      - CN=jessiedotjs,CN=Users,DC=ansible,DC=test
+    spn:
+      set:
+      - MSSQLSvc/us99db-svr95:2433
+
+# The name option is the name of the AD object as seen in dsa.msc and not the
+# sAMAccountName. For example, this will change the sAMAccountName of the user
+# CN=existing_user,CN=Users,DC=domain,DC=com to 'new_sam_name'.
+# E.g. This will change
+- name: Change the user's sAMAccountName
+  microsoft.ad.user:
+    name: existing_user
+    sam_account_name: new_sam_name
+    state: present
+
+# This will rename the AD object that is specified by identity to 'new_name'.
+# The identity value can be the object's GUID, SecurityIdentifier, or
+# sAMAccountName. It is important to use the identity value when renaming or
+# moving a user object to ensure the object is moved/renamed rather than a new
+# one being created.
+- name: Rename user LDAP name
+  microsoft.ad.user:
+    name: new_name
+    identity: '{{ user_obj.object_guid }}'
+    state: present
+
+# Like changing the name example above, the identity option is needed to ensure
+# the existing user object specified is moved rather than a new one created at
+# the path specified.
+- name: Move user object to different OU
+  microsoft.ad.user:
+    name: user
+    path: OU=Admins,DC=domain,DC=com
+    identity: '{{ user_obj.sid }}'
+    state: present
+
+
+
+
+

Return Values

+

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

+ + + + + + + + + + + + + + + + + +

Key

Description

+

distinguished_name

+

string

+

The distinguishedName of the AD object that was created, removed, or edited.

+

Returned: always

+

Sample: "CN=TestUser,CN=Users,DC=domain,DC=test"

+
+

object_guid

+

string

+

The objectGUID of the AD object that was created, removed, or edited.

+

If a new object was created in check mode, a GUID of 0s will be returned.

+

Returned: always

+

Sample: "d84a141f-2b99-4f08-9da0-ed2d26864ba1"

+
+

sid

+

string

+

The Security Identifier (SID) of the account managed.

+

If a new user was created in check mode, the SID will be S-1-5-0000.

+

Returned: always

+

Sample: "S-1-5-21-4151808797-3430561092-2843464588-1104"

+
+
+

Authors

+
    +
  • Jordan Borean (@jborean93)

  • +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/collections/microsoft/index.html b/tag/1.5.0/collections/microsoft/index.html new file mode 100644 index 0000000..3835eac --- /dev/null +++ b/tag/1.5.0/collections/microsoft/index.html @@ -0,0 +1,167 @@ + + + + + + + + Collections in the Microsoft Namespace — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+ +
+
+
+ + +
+ +
+

Collections in the Microsoft Namespace

+

These are the collections documented here in the microsoft namespace.

+ +
+
+
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/index.html b/tag/1.5.0/index.html new file mode 100644 index 0000000..c6199cc --- /dev/null +++ b/tag/1.5.0/index.html @@ -0,0 +1,172 @@ + + + + + + + Welcome to my Ansible collection documentation — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ +
+

Welcome to my Ansible collection documentation

+

This docsite contains documentation of microsoft.ad.

+
+

Collections:

+ +
+ + +
+ + +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/tag/1.5.0/objects.inv b/tag/1.5.0/objects.inv new file mode 100644 index 0000000..b9ea21c Binary files /dev/null and b/tag/1.5.0/objects.inv differ diff --git a/tag/1.5.0/search.html b/tag/1.5.0/search.html new file mode 100644 index 0000000..e8e80f0 --- /dev/null +++ b/tag/1.5.0/search.html @@ -0,0 +1,165 @@ + + + + + + Search — Ansible collections documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ansible Collections Documentation
+
+
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+ + +
+ + + + +
+ +
+ +
+
+ + +
+ +
+ +
+

© Copyright Ansible contributors.

+
+ + + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tag/1.5.0/searchindex.js b/tag/1.5.0/searchindex.js new file mode 100644 index 0000000..fea32f7 --- /dev/null +++ b/tag/1.5.0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["collections/environment_variables", "collections/index", "collections/index_filter", "collections/index_inventory", "collections/index_module", "collections/microsoft/ad/as_datetime_filter", "collections/microsoft/ad/as_guid_filter", "collections/microsoft/ad/as_sid_filter", "collections/microsoft/ad/computer_module", "collections/microsoft/ad/debug_ldap_client_module", "collections/microsoft/ad/dn_escape_filter", "collections/microsoft/ad/docsite/guide_attributes", "collections/microsoft/ad/docsite/guide_ldap_connection", "collections/microsoft/ad/docsite/guide_ldap_inventory", "collections/microsoft/ad/docsite/guide_list_values", "collections/microsoft/ad/docsite/guide_migration", "collections/microsoft/ad/domain_controller_module", "collections/microsoft/ad/domain_module", "collections/microsoft/ad/group_module", "collections/microsoft/ad/index", "collections/microsoft/ad/ldap_inventory", "collections/microsoft/ad/membership_module", "collections/microsoft/ad/object_info_module", "collections/microsoft/ad/object_module", "collections/microsoft/ad/offline_join_module", "collections/microsoft/ad/ou_module", "collections/microsoft/ad/parse_dn_filter", "collections/microsoft/ad/user_module", "collections/microsoft/index", "index"], "filenames": ["collections/environment_variables.rst", "collections/index.rst", "collections/index_filter.rst", "collections/index_inventory.rst", "collections/index_module.rst", "collections/microsoft/ad/as_datetime_filter.rst", "collections/microsoft/ad/as_guid_filter.rst", "collections/microsoft/ad/as_sid_filter.rst", "collections/microsoft/ad/computer_module.rst", "collections/microsoft/ad/debug_ldap_client_module.rst", "collections/microsoft/ad/dn_escape_filter.rst", "collections/microsoft/ad/docsite/guide_attributes.rst", "collections/microsoft/ad/docsite/guide_ldap_connection.rst", "collections/microsoft/ad/docsite/guide_ldap_inventory.rst", "collections/microsoft/ad/docsite/guide_list_values.rst", "collections/microsoft/ad/docsite/guide_migration.rst", "collections/microsoft/ad/domain_controller_module.rst", "collections/microsoft/ad/domain_module.rst", "collections/microsoft/ad/group_module.rst", "collections/microsoft/ad/index.rst", "collections/microsoft/ad/ldap_inventory.rst", "collections/microsoft/ad/membership_module.rst", "collections/microsoft/ad/object_info_module.rst", "collections/microsoft/ad/object_module.rst", "collections/microsoft/ad/offline_join_module.rst", "collections/microsoft/ad/ou_module.rst", "collections/microsoft/ad/parse_dn_filter.rst", "collections/microsoft/ad/user_module.rst", "collections/microsoft/index.rst", "index.rst"], "titles": ["Index of all Collection Environment Variables", "Collection Index", "Index of all Filter Plugins", "Index of all Inventory Plugins", "Index of all Modules", "microsoft.ad.as_datetime filter \u2013 Converts an LDAP value to a datetime string", "microsoft.ad.as_guid filter \u2013 Converts an LDAP value to a GUID string", "microsoft.ad.as_sid filter \u2013 Converts an LDAP value to a Security Identifier string", "microsoft.ad.computer module \u2013 Manage Active Directory computer objects", "microsoft.ad.debug_ldap_client module \u2013 Get host information for debugging LDAP connections", "microsoft.ad.dn_escape filter \u2013 Escape an LDAP DistinguishedName value string.", "Attributes guide", "LDAP Connection guide", "LDAP Inventory guide", "Setting list option values guide", "Migration guide", "microsoft.ad.domain_controller module \u2013 Manage domain controller/member server state for a Windows host", "microsoft.ad.domain module \u2013 Ensures the existence of a Windows domain", "microsoft.ad.group module \u2013 Manage Active Directory group objects", "Microsoft.Ad", "microsoft.ad.ldap inventory \u2013 Inventory plugin for Active Directory", "microsoft.ad.membership module \u2013 Manage domain/workgroup membership for a Windows host", "microsoft.ad.object_info module \u2013 Gather information an Active Directory object", "microsoft.ad.object module \u2013 Manage Active Directory objects", "microsoft.ad.offline_join module \u2013 Get the Offline Domain Join BLOB", "microsoft.ad.ou module \u2013 Manage Active Directory organizational units", "microsoft.ad.parse_dn filter \u2013 Parses an LDAP DistinguishedName string into an object.", "microsoft.ad.user module \u2013 Manage Active Directory users", "Collections in the Microsoft Namespace", "Welcome to my Ansible collection documentation"], "terms": {"The": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "follow": [0, 5, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27], "document": [0, 1, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 28], "declar": 0, "plugin": [0, 5, 6, 7, 9, 10, 12, 13, 16, 17, 21, 26], "us": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "ansibl": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "core": [0, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "configur": [0, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 25, 26, 27], "ar": [0, 1, 5, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28], "set": [0, 5, 8, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "ansible_inventory_use_extra_var": [0, 20], "merg": [0, 15, 20], "extra": [0, 12, 15, 20], "var": [0, 11, 13, 15, 20], "avail": [0, 9, 12, 13, 16, 17, 20, 21, 23], "composit": [0, 20], "highest": [0, 20], "preced": [0, 14, 20], "microsoft": [0, 1, 11, 12, 13, 14, 15, 29], "ad": [0, 1, 11, 12, 13, 14, 15, 28, 29], "ldap": [0, 2, 3, 4, 8, 14, 15, 18, 19, 22, 23, 25, 27], "inventori": [0, 5, 6, 7, 10, 26, 29], "microsoft_ad_ldap_auth_protocol": [0, 20], "authent": [0, 8, 9, 18, 20, 22, 23, 24, 25, 27], "protocol": [0, 8, 11, 12, 20], "when": [0, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "connect": [0, 4, 8, 18, 19, 20, 21, 22, 23, 24, 25, 27], "host": [0, 4, 8, 12, 13, 17, 18, 19, 20, 22, 23, 24, 25, 27], "default": [0, 5, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "certif": [0, 20, 24], "starttl": [0, 12, 20], "i": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "ha": [0, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "been": [0, 12, 13, 14, 15, 20, 21, 24], "specifi": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "otherwis": [0, 12, 20], "negoti": [0, 20], "simpl": [0, 11, 13, 14, 20, 26], "where": [0, 8, 11, 12, 13, 16, 17, 18, 20, 23, 24, 25, 26, 27], "user": [0, 4, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "password": [0, 8, 10, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "sent": [0, 20], "plaintext": [0, 12, 20], "It": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "doe": [0, 8, 9, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 25, 27], "support": [0, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "ani": [0, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 20, 22, 23, 24, 25, 27], "encrypt": [0, 8, 12, 13, 20], "so": [0, 5, 9, 11, 12, 14, 16, 17, 20, 21, 22, 27], "either": [0, 8, 11, 12, 13, 14, 18, 20, 22, 23, 25, 27], "must": [0, 6, 7, 8, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "If": [0, 6, 7, 8, 9, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "over": [0, 12, 14, 20], "without": [0, 8, 9, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "tl": [0, 12, 20], "fals": [0, 8, 11, 12, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "explicitli": [0, 12, 20, 22], "opt": [0, 20], "client": [0, 9, 12, 20], "can": [0, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "onli": [0, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 27], "see": [0, 9, 11, 12, 13, 15, 20], "more": [0, 8, 9, 11, 12, 13, 15, 16, 18, 20, 23, 24, 25, 26, 27], "inform": [0, 4, 8, 11, 12, 13, 15, 16, 18, 19, 20, 23, 24, 25, 27], "how": [0, 5, 8, 12, 13, 20, 27], "attempt": [0, 8, 12, 18, 20, 23, 25, 27], "kerbero": [0, 8, 9, 18, 20, 22, 23, 25, 27], "fallback": [0, 12, 20], "ntlm": [0, 20], "credenti": [0, 8, 9, 12, 18, 20, 22, 23, 24, 25, 27], "cach": [0, 9, 12, 20], "usernam": [0, 8, 9, 12, 13, 16, 18, 20, 21, 22, 23, 25, 27], "requir": [0, 5, 6, 7, 9, 10, 13, 14, 15, 16, 17, 21, 26], "pyspnego": [0, 9, 12, 20], "instal": [0, 5, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "thi": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29], "option": [0, 5, 8, 9, 11, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "jinja2": [0, 13, 20], "templat": [0, 9, 16, 17, 20, 21], "valu": [0, 2, 11, 12, 15, 19, 20], "microsoft_ad_ldap_ca_cert": [0, 20], "path": [0, 8, 10, 11, 12, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "ca": [0, 12, 20, 26], "pem": [0, 12, 20], "der": [0, 12, 20], "file": [0, 9, 11, 12, 13, 16, 17, 20, 24], "directori": [0, 3, 4, 11, 12, 13, 16, 17, 19, 21, 24, 26], "string": [0, 2, 8, 9, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "valid": [0, 17, 20, 22, 23], "omit": [0, 8, 11, 15, 18, 20, 23, 25, 27], "store": [0, 5, 6, 7, 9, 11, 12, 13, 20, 24], "depend": [0, 12, 20], "current": [0, 8, 9, 12, 13, 17, 20, 22, 24, 27], "python": [0, 12, 13, 20], "microsoft_ad_ldap_cert_valid": [0, 20], "behaviour": [0, 8, 11, 18, 20, 23, 25, 27], "alwai": [0, 8, 9, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "ignor": [0, 12, 14, 20, 21, 27], "ignore_hostnam": [0, 12, 20], "perform": [0, 12, 20, 22], "hostnam": [0, 9, 12, 20, 21], "error": [0, 9, 12, 13, 20, 26, 27], "trust": [0, 8, 12, 20, 27], "chain": [0, 12, 20], "check": [0, 5, 6, 7, 8, 9, 10, 12, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "microsoft_ad_ldap_certif": [0, 20], "kei": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "bundl": [0, 12, 20], "contain": [0, 8, 11, 12, 13, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 29], "encod": [0, 8, 11, 12, 13, 18, 20, 23, 25, 27], "pfx": [0, 12, 20], "pkcs12": [0, 12, 20], "certificate_kei": [0, 12, 20], "certificate_password": [0, 12, 20], "microsoft_ad_ldap_certificate_kei": [0, 20], "form": [0, 8, 12, 15, 18, 20, 22, 23, 24, 25, 27], "microsoft_ad_ldap_certificate_password": [0, 20], "decrypt": [0, 12, 13, 20], "microsoft_ad_ldap_connection_timeout": [0, 20], "timeout": [0, 20], "second": [0, 20], "wait": [0, 20], "until": [0, 20], "establish": [0, 20], "befor": [0, 5, 6, 7, 8, 10, 14, 16, 17, 18, 20, 23, 25, 26, 27], "fail": [0, 9, 12, 13, 17, 18, 20, 27], "microsoft_ad_ldap_encrypt": [0, 20], "whether": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "through": [0, 8, 11, 12, 13, 15, 18, 20, 23, 25, 27], "auth_protocol": [0, 12, 13, 20], "wherea": [0, 12, 18, 20], "As": [0, 11, 12, 13, 20], "traffic": [0, 20], "should": [0, 5, 6, 7, 8, 10, 12, 14, 15, 16, 17, 18, 20, 21, 23, 24, 25, 27], "avoid": [0, 8, 12, 20, 24], "microsoft_ad_ldap_password": [0, 20], "bind": [0, 12, 20], "an": [0, 2, 4, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 27], "unauthent": [0, 20], "local": [0, 8, 12, 13, 16, 17, 18, 20, 21, 24, 27], "microsoft_ad_ldap_port": [0, 20], "port": [0, 9, 12, 20], "389": [0, 9, 12, 20], "686": [0, 12, 20], "636": [0, 12, 20], "tls_mode": [0, 12, 13, 20], "microsoft_ad_ldap_serv": [0, 20], "domain": [0, 4, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20, 22, 23, 25, 26, 27], "control": [0, 4, 8, 9, 12, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "server": [0, 4, 8, 9, 13, 17, 18, 19, 20, 21, 22, 23, 25, 27], "deriv": [0, 13, 20], "from": [0, 5, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 25, 27], "krb5": [0, 9, 12, 20], "conf": [0, 12, 20], "default_realm": [0, 9, 12, 20], "srv": [0, 9, 12, 20], "dn": [0, 9, 11, 12, 15, 16, 17, 20, 21, 22, 26], "lookup": [0, 9, 11, 13, 20], "microsoft_ad_ldap_tls_mod": [0, 20], "oper": [0, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "explicit": [0, 12, 20], "start_tl": [0, 20], "recommend": [0, 8, 11, 12, 13, 15, 16, 18, 20, 23, 25, 27], "go": [0, 12, 15, 20], "microsoft_ad_ldap_usernam": [0, 20], "anonym": [0, 12, 20], "exampl": [0, 11, 13, 15], "one": [0, 8, 11, 12, 13, 18, 20, 22, 23, 25, 27], "retriev": [0, 9, 11, 12, 13, 20], "kinit": [0, 12, 20], "These": [1, 5, 11, 12, 13, 19, 20, 22, 28], "here": [1, 8, 9, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28], "as_datetim": [2, 6, 7, 13, 19, 20], "convert": [2, 11, 13, 19], "datetim": [2, 8, 11, 13, 18, 19, 23, 25, 27], "as_guid": [2, 5, 7, 13, 19], "guid": [2, 8, 16, 17, 18, 21, 22, 23, 24, 25, 27], "as_sid": [2, 5, 6, 13, 19], "secur": [2, 8, 13, 15, 18, 19, 22, 23, 25, 27], "identifi": [2, 8, 13, 15, 18, 19, 27], "dn_escap": [2, 19, 26], "escap": [2, 19, 26], "distinguishednam": [2, 8, 12, 15, 18, 19, 22, 23, 24, 25, 27], "parse_dn": [2, 10, 13, 19, 20], "pars": [2, 19], "object": [2, 4, 5, 11, 13, 14, 15, 16, 17, 19, 20, 21, 24, 25, 27], "activ": [3, 4, 11, 12, 13, 16, 17, 19, 21, 24, 26], "comput": [4, 11, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "manag": [4, 11, 13, 14, 15, 17, 19, 22, 24], "debug_ldap_cli": [4, 12, 19], "get": [4, 8, 11, 12, 13, 15, 19, 20, 21, 22, 23, 26], "debug": [4, 12, 13, 15, 19], "ensur": [4, 8, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 25, 27], "exist": [4, 8, 11, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27], "window": [4, 8, 12, 13, 15, 18, 19, 20, 22, 23, 24, 25, 27], "domain_control": [4, 8, 15, 17, 18, 19, 21, 22, 23, 25, 27], "member": [4, 8, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "state": [4, 8, 10, 11, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27], "group": [4, 8, 11, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 27], "membership": [4, 8, 14, 15, 16, 17, 18, 19, 24, 27], "workgroup": [4, 8, 16, 17, 18, 19, 24], "object_info": [4, 8, 15, 18, 19, 23, 25, 27], "gather": [4, 8, 18, 19, 23, 25, 27], "offline_join": [4, 8, 15, 19, 21], "offlin": [4, 8, 15, 19, 21], "join": [4, 8, 13, 15, 19, 21], "blob": [4, 8, 13, 15, 19, 21], "ou": [4, 8, 10, 15, 18, 19, 20, 21, 23, 24, 27], "organiz": [4, 11, 19], "unit": [4, 11, 19], "part": [5, 6, 7, 8, 9, 10, 12, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "version": [5, 6, 7, 8, 9, 10, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "1": [5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "5": [5, 6, 7, 8, 9, 10, 11, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "0": [5, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "includ": [5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "To": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "run": [5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "galaxi": [5, 6, 7, 8, 9, 10, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "list": [5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "playbook": [5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "new": [5, 6, 7, 8, 9, 10, 13, 15, 16, 17, 18, 20, 23, 24, 25, 26, 27], "integ": [5, 8, 9, 11, 13, 18, 20, 23, 25, 27], "raw": [5, 6, 7, 8, 11, 13, 18, 23, 25, 26, 27], "attribut": [5, 6, 7, 10, 14, 15, 19, 20, 26], "describ": [5, 6, 7, 10, 11, 12, 13, 26], "comment": [5, 6, 7, 8, 10, 11, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "byte": [5, 6, 7, 8, 13, 18, 22, 23, 24, 25, 27], "repres": [5, 6, 7, 8, 11, 13, 18, 22, 23, 24, 25, 26, 27], "filetim": [5, 8, 13, 18, 23, 25, 27], "result": [5, 8, 11, 13, 18, 23, 25, 27], "utc": [5, 8, 11, 18, 22, 23, 25, 27], "": [5, 6, 7, 8, 9, 11, 12, 13, 14, 18, 20, 22, 23, 25, 27], "key1": 5, "value1": 5, "key2": 5, "value2": 5, "format": [5, 8, 11, 12, 13, 14, 15, 18, 22, 23, 25, 27], "iso": [5, 8, 11, 18, 22, 23, 25, 27], "8601": [5, 8, 11, 18, 22, 23, 25, 27], "compat": [5, 8, 15], "2023": [5, 13], "02": [5, 13], "06t07": [5, 13], "39": [5, 13], "09": [5, 11, 13], "195321": [5, 13], "0000": [5, 8, 13, 18, 27], "y": 5, "m": [5, 12, 13, 20], "dt": [5, 11], "h": 5, "f": 5, "z": 5, "coerc": [5, 13, 20], "pwdlastset": [5, 13, 20], "maxpwdag": 5, "descript": [5, 6, 7, 8, 9, 10, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "per": [5, 9, 16, 17, 21], "success": [5, 6, 7, 10, 13, 26], "jordan": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "borean": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "jborean93": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "entri": [5, 6, 7, 8, 10, 11, 15, 18, 20, 23, 25, 26, 27], "each": [5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 18, 20, 22, 23, 25, 26, 27], "type": [5, 6, 7, 8, 9, 10, 18, 20, 23, 25, 26, 27], "have": [5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 18, 20, 22, 23, 25, 26, 27], "low": [5, 6, 7, 10, 20, 26], "high": [5, 6, 7, 10, 20, 26], "prioriti": [5, 6, 7, 9, 10, 12, 20, 26], "order": [5, 6, 7, 8, 10, 18, 20, 23, 25, 26, 27], "For": [5, 6, 7, 10, 11, 12, 13, 14, 15, 17, 20, 24, 26, 27], "variabl": [5, 6, 7, 9, 10, 12, 13, 16, 17, 20, 21, 22, 26, 29], "lower": [5, 6, 7, 10, 17, 20, 26], "overrid": [5, 6, 7, 10, 20, 26], "higher": [5, 6, 7, 10, 17, 20, 26], "up": [5, 6, 7, 10, 12, 20, 26], "issu": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "tracker": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "repositori": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "sourc": [5, 6, 7, 8, 9, 10, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "report": [5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "commun": [5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "paramet": [6, 7, 10, 11, 26], "base64": [6, 7, 8, 11, 13, 18, 21, 22, 23, 24, 25, 27], "objectguid": [6, 8, 11, 13, 15, 18, 22, 23, 24, 25, 27], "sid": [7, 8, 13, 15, 18, 22, 27], "objectsid": [7, 8, 13, 18, 20, 22, 23, 24, 25, 27], "you": [8, 16, 17, 18, 20, 22, 23, 24, 25, 27], "need": [8, 9, 11, 12, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "further": [8, 13, 18, 20, 22, 23, 24, 25, 27], "abl": [8, 13, 18, 20, 22, 23, 24, 25, 27], "detail": [8, 9, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "below": [8, 11, 12, 13, 18, 20, 22, 23, 24, 25, 27], "execut": [8, 9, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "activedirectori": [8, 18, 22, 23, 24, 25, 27], "powershel": [8, 11, 18, 22, 23, 24, 25, 27], "dictionari": [8, 11, 15, 18, 20, 22, 23, 25, 27], "add": [8, 11, 15, 18, 20, 23, 24, 25, 27], "remov": [8, 11, 12, 15, 18, 23, 25, 27], "e": [8, 18, 23, 25, 27], "g": [8, 18, 23, 25, 27], "firstnam": [8, 11, 18, 23, 25, 27], "bool": [8, 11, 18, 23, 25, 27], "question": [8, 11, 18, 19, 23, 25, 27], "date_tim": [8, 11, 18, 23, 25, 27], "security_descriptor": [8, 11, 18, 23, 25, 27], "under": [8, 11, 12, 13, 18, 22, 23, 24, 25, 27], "which": [8, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 27], "number": [8, 11, 18, 22, 23, 25, 27], "100": [8, 9, 11, 18, 23, 25, 27], "nanosecond": [8, 11, 18, 23, 25, 27], "sinc": [8, 11, 18, 20, 23, 25, 27], "1601": [8, 11, 18, 23, 25, 27], "01": [8, 11, 18, 22, 23, 25, 27], "descriptor": [8, 18, 22, 23, 25, 27], "sddl": [8, 11, 18, 22, 23, 25, 27], "ntsecuritydescriptor": [8, 11, 18, 22, 23, 25, 27], "int": [8, 11, 13, 18, 23, 25, 27], "boolean": [8, 11, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "compar": [8, 11, 18, 23, 25, 27], "case": [8, 11, 13, 18, 20, 23, 25, 27], "sensit": [8, 11, 18, 23, 24, 25, 27], "match": [8, 12, 15, 18, 23, 24, 25, 27], "being": [8, 9, 12, 13, 16, 17, 18, 21, 23, 24, 25, 27], "help": [8, 9, 15, 18, 20, 23, 25, 27], "A": [8, 9, 11, 12, 13, 18, 20, 22, 23, 25, 26, 27], "all": [8, 9, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29], "thei": [8, 11, 12, 13, 14, 17, 18, 20, 23, 25, 27], "alreadi": [8, 18, 21, 23, 24, 25, 27], "present": [8, 10, 11, 12, 13, 15, 18, 23, 24, 25, 27], "multipl": [8, 11, 14, 16, 17, 18, 22, 23, 25, 26, 27], "allow": [8, 12, 15, 18, 20, 23, 25, 27], "singl": [8, 11, 13, 17, 18, 20, 22, 23, 25, 27], "instead": [8, 15, 16, 17, 18, 20, 21, 23, 25, 27], "replac": [8, 11, 13, 14, 15, 16, 17, 18, 21, 22, 23, 25, 27], "do": [8, 11, 12, 14, 18, 23, 25, 27], "ones": [8, 11, 15, 18, 20, 23, 25, 27], "request": [8, 12, 13, 18, 20, 22, 23, 25, 27], "null": [8, 11, 18, 22, 23, 24, 25, 27], "empti": [8, 11, 14, 18, 20, 23, 24, 25, 27], "clear": [8, 11, 14, 18, 23, 25, 27], "deleg": [8, 14, 15, 17, 18, 22, 23, 25, 27], "alias": [8, 27], "principals_allowed_to_deleg": [8, 27], "princip": [8, 9, 12, 18, 27], "sub": [8, 27], "distinguish": [8, 15, 20, 22, 27], "name": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "cn": [8, 10, 11, 13, 18, 20, 22, 23, 24, 25, 26, 27], "shenetwork": [8, 27], "dc": [8, 10, 11, 12, 13, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27], "test": [8, 11, 12, 13, 18, 20, 23, 25, 27], "msd": [8, 22, 27], "allowedtoactonbehalfofotherident": [8, 27], "highli": [8, 15, 16, 24, 27], "imperson": [8, 27], "account": [8, 11, 12, 13, 20, 21, 22, 24, 27], "element": [8, 9, 18, 20, 22, 26, 27], "untouch": [8, 27], "unless": [8, 11, 12, 18, 20, 21, 22, 23, 24, 25, 27], "pricip": 8, "defin": [8, 11, 13, 15, 18, 20, 22, 23, 24, 25, 26, 27], "display_nam": [8, 18, 23, 25, 27], "displai": [8, 11, 15, 18, 22, 23, 25, 27], "displaynam": [8, 18, 22, 23, 25, 27], "dns_hostnam": 8, "fulli": [8, 16, 17, 21], "qualifi": [8, 16, 17, 21], "fqdn": [8, 18, 22, 23, 24, 25, 27], "dnshostnam": [8, 13, 15, 20], "domain_password": [8, 18, 22, 23, 25, 27], "domain_usernam": [8, 18, 22, 23, 25, 27], "plai": [8, 18, 22, 23, 25, 27], "domain_serv": [8, 18, 22, 23, 24, 25, 27], "servic": [8, 12, 16, 17, 18, 22, 23, 24, 25, 27], "instanc": [8, 18, 20, 22, 23, 24, 25, 27], "netbio": [8, 17, 18, 22, 23, 24, 25, 27], "base": [8, 12, 13, 17, 18, 20, 22, 23, 24, 25, 27], "interact": [8, 18, 22, 23, 25, 27], "unabl": [8, 18, 22, 23, 25, 27], "auth": [8, 18, 22, 23, 25, 27], "credssp": [8, 18, 22, 23, 25, 27], "becom": [8, 18, 22, 23, 24, 25, 27], "task": [8, 9, 11, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27], "enabl": [8, 15, 18, 27], "ye": [8, 12, 16, 20, 27], "disabl": [8, 12, 27], "choic": [8, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "true": [8, 11, 12, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "ident": [8, 11, 13, 15, 18, 22, 23, 24, 25, 27], "find": [8, 18, 20, 23, 24, 25, 27], "try": [8, 18, 23, 25, 27], "renam": [8, 15, 18, 23, 25, 27], "move": [8, 15, 18, 23, 25, 27], "differ": [8, 11, 12, 13, 18, 23, 25, 27], "userprincipalnam": [8, 12, 18, 23, 25, 27], "samaccountnam": [8, 11, 12, 13, 18, 20, 22, 23, 24, 25, 27], "select": [8, 12, 15, 18, 22, 23, 25, 27], "defaultnamingcontext": [8, 18, 20, 22, 23, 25, 27], "kerberos_encryption_typ": 8, "supportedencryptiontyp": 8, "rc4": 8, "de": 8, "older": [8, 15], "insecur": 8, "aes128": 8, "aes256": 8, "locat": [8, 12, 20], "managed_bi": [8, 18, 25], "managedbi": [8, 18, 25], "its": [8, 12, 14, 18, 22, 23, 25, 27], "found": [8, 9, 13, 18, 20, 22, 23, 25, 27], "creat": [8, 13, 15, 16, 17, 18, 20, 22, 23, 24, 25, 27], "most": [8, 11, 12, 18, 20, 23, 25, 27], "own": [8, 18, 23, 25, 27], "liter": [8, 13, 18, 23, 25, 27], "default_path": [8, 18, 23, 25, 27], "equal": [8, 18, 23, 25, 27], "protect_from_delet": [8, 15, 18, 23, 25, 27], "mark": [8, 13, 18, 23, 25, 27], "protect": [8, 12, 15, 18, 23, 25, 27], "accident": [8, 18, 23, 25, 27], "delet": [8, 18, 22, 23, 25, 27], "appli": [8, 12, 18, 23, 25, 27], "deni": [8, 18, 23, 25, 27], "access": [8, 11, 18, 23, 24, 25, 27], "right": [8, 18, 23, 25, 27], "normal": [8, 9, 12, 13, 16, 17, 18, 21, 23, 25, 27], "gui": [8, 18, 23, 25, 27], "other": [8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 25, 27], "tool": [8, 18, 23, 25, 27], "outsid": [8, 9, 13, 16, 17, 18, 21, 23, 25, 27], "absent": [8, 15, 18, 23, 25, 27], "still": [8, 12, 14, 15, 18, 20, 23, 25, 27], "even": [8, 18, 23, 25, 27], "sam_account_nam": [8, 18, 20, 27], "maximum": [8, 22], "256": 8, "charact": [8, 10, 17, 25, 27], "15": [8, 11, 17], "advis": [8, 11], "system": [8, 11, 12, 18, 23, 25, 27], "ommit": 8, "same": [8, 11, 12, 13, 14, 17, 22], "end": [8, 11, 13, 20], "spn": [8, 12, 14, 15, 27], "serviceprincipalnam": [8, 13, 14, 27], "out": [8, 27], "recurs": [8, 15, 18, 22, 23, 25, 27], "child": [8, 18, 20, 23, 25, 27], "trusted_for_deleg": 8, "known": [8, 15, 17, 26], "unconstrain": 8, "ads_uf_trusted_for_deleg": 8, "flag": [8, 13, 22, 27], "useraccountcontrol": [8, 11], "upn": [8, 27], "check_mod": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "full": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "chang": [8, 9, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "statu": [8, 9, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27], "predict": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "modifi": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "target": [8, 9, 12, 13, 16, 17, 18, 21, 22, 23, 24, 25, 27], "diff_mod": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "Will": [8, 9, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "what": [8, 9, 11, 12, 13, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "possibli": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "diff": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "mode": [8, 9, 11, 12, 16, 17, 18, 21, 22, 23, 24, 25, 27], "platform": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "o": [8, 9, 11, 12, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27], "famili": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "against": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "win_domain_comput": 8, "migrat": [8, 16, 17, 18, 19, 21, 22, 25, 27], "some": [8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 21, 23, 25, 27], "while": [8, 12, 13, 14, 15, 18, 23, 25, 26, 27], "read": [8, 11, 12, 16, 18, 23, 25, 27], "cannot": [8, 11, 12, 13, 16, 17, 18, 21, 22, 23, 24, 25, 27], "look": [8, 11, 13, 18, 23, 25, 27], "schema": [8, 11, 13, 18, 20, 22, 23, 25, 27], "metadata": [8, 11, 13, 18, 23, 25, 27], "undefin": [8, 11, 18, 23, 25, 27], "offici": [8, 16, 17, 18, 21, 22, 25, 27], "linux": [8, 12], "machin": [8, 24], "one_linux_serv": 8, "linux_serv": 8, "my_org": 8, "thecomput": 8, "1234": [8, 11, 13], "fileshar": 8, "common": [8, 9, 11, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27], "field": [8, 9, 11, 16, 17, 18, 21, 22, 23, 24, 25, 27], "uniqu": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 27], "distinguished_nam": [8, 15, 18, 23, 25, 27], "wa": [8, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 25, 27], "edit": [8, 18, 23, 25, 27], "sampl": [8, 9, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27], "mycomput": [8, 15, 24], "object_guid": [8, 15, 18, 23, 24, 25, 27], "d84a141f": [8, 18, 23, 25, 27], "2b99": [8, 18, 23, 25, 27], "4f08": [8, 18, 23, 25, 27], "9da0": [8, 18, 23, 25, 27], "ed2d26864ba1": [8, 18, 23, 25, 27], "21": [8, 13, 18, 22, 27], "4151808797": [8, 18, 27], "3430561092": [8, 18, 27], "2843464588": [8, 18, 27], "1104": [8, 18, 27], "about": [9, 12, 13, 15, 20, 22], "capabl": [9, 12], "correspond": [9, 16, 17, 21, 23], "action": [9, 12, 14, 15, 16, 17, 21, 27], "indic": [9, 12, 13, 16, 17, 21], "async": [9, 16, 17, 21], "keyword": [9, 16, 17, 21], "bypass_host_loop": [9, 16, 17, 21], "none": [9, 12, 13, 16, 17, 21, 22, 24], "forc": [9, 16, 17, 21], "global": [9, 11, 16, 17, 18, 20, 21], "bypass": [9, 16, 17, 21, 24], "serial": [9, 16, 17, 21], "throttl": [9, 16, 17, 21], "loop": [9, 16, 17, 21], "consider": [9, 16, 17, 21], "condit": [9, 16, 17, 20, 21], "work": [9, 12, 15, 16, 17, 21, 27], "run_onc": [9, 16, 17, 21], "first": [9, 12, 13, 16, 17, 20, 21, 26, 27], "lockstep": [9, 16, 17, 21], "strategi": [9, 16, 17, 21], "posix": 9, "contract": 9, "futur": 9, "meant": 9, "give": 9, "snapshot": 9, "complex": [9, 11, 13], "popul": 9, "dnspython": [9, 12, 20], "default_port": 9, "record": [9, 12, 27], "chosen": 9, "default_serv": 9, "dc01": [9, 20], "com": [9, 10, 12, 13, 14, 18, 20, 22, 23, 24, 25, 26, 27], "except": [9, 16, 17, 21, 22], "occur": [9, 16, 17], "were": [9, 16, 17, 21, 22], "dure": [9, 12, 13], "weight": [9, 12], "setup": [9, 12, 13], "default_cc": 9, "cred": 9, "ccach": 9, "krbtgt": 9, "tmp": 9, "krb5cc_1000": 9, "automat": [9, 12, 13, 17, 21, 22], "realm": [9, 12], "could": [9, 11, 20], "packag": [9, 12, 13], "import": [9, 12, 27], "traceback": 9, "process": [9, 11, 13], "determin": 9, "featur": [9, 12, 13], "like": [9, 11, 12, 13, 14, 20, 22, 27], "2": [9, 11, 14, 19, 20, 23, 26], "3": [9, 11, 18, 20, 23], "dpapi_ng": 9, "dpapi": [9, 12, 13, 20], "ng": [9, 12, 13, 20], "8": [9, 12, 20], "sansldap": [9, 12, 20], "special": [10, 13, 14], "build": [10, 11, 13, 20], "just": [10, 12, 13, 14, 20], "rdn": [10, 20, 26], "prefix": [10, 20], "myvalu": 10, "search_bas": [10, 20, 22], "my_ou_vari": 10, "modul": [10, 11, 12, 14, 20, 29], "myuser": [10, 11, 14], "mypassword123": [10, 13], "collect": [11, 13, 14, 15, 19], "variou": [11, 18], "expos": [11, 12], "direct": 11, "might": [11, 20], "One": 11, "compon": [11, 12, 26], "lightweight": 11, "databas": [11, 13, 16, 17, 20], "relev": 11, "environ": [11, 12, 17, 20, 23, 29], "dynam": 11, "conform": 11, "countri": [11, 25, 27], "itself": [11, 12, 22, 24], "builtin": [11, 12, 13, 20], "sam": 11, "around": [11, 13], "syntax": [11, 13, 22], "underli": [11, 12], "effect": 11, "make": [11, 12, 20], "referenc": [11, 13, 18, 20], "would": [11, 12, 13], "least": 11, "associ": [11, 18], "usercert": 11, "snap": 11, "dsa": [11, 27], "msc": [11, 27], "view": [11, 22], "advanc": 11, "well": 11, "also": [11, 12, 13, 14, 15, 20], "extend": 11, "custom": [11, 13, 16, 18, 20, 23, 27], "organ": 11, "function": [11, 15, 17], "attributemetadata": 11, "cmdletbind": 11, "param": 11, "valuefrompipelin": 11, "begin": 11, "adrootds": [11, 22, 23], "properti": [11, 15, 22, 23, 25], "subschemasubentri": [11, 23], "getparam": 11, "searchbas": [11, 23], "ldapfilt": 11, "objectclass": [11, 20, 22, 23], "attributetyp": 11, "adobject": [11, 23], "queri": [11, 15, 20, 22], "foreach": [11, 23], "n": [11, 13, 20, 22], "_": [11, 13, 20, 23], "specif": [11, 12, 13, 17, 22, 23, 24, 25], "output": [11, 13], "attribute_oid": 11, "attribute_nam": 11, "type_oid": 11, "NO": 11, "modif": 11, "search": [11, 12, 20, 22], "oid": 11, "onlin": 11, "last": [11, 27], "840": 11, "113556": 11, "4": [11, 13], "221": 11, "6": 11, "1466": 11, "115": 11, "121": 11, "10": 11, "40": 11, "show": 11, "directli": 11, "accept": [11, 14], "three": [11, 12, 13, 14], "ldapdisplaynam": 11, "my": [11, 23], "extensionnam": [11, 23], "extens": 11, "abov": [11, 12, 13, 20, 27], "those": [11, 13, 20, 22], "opposit": [11, 14], "becaus": [11, 20], "touch": [11, 14], "tild": 11, "compani": [11, 27], "There": [11, 12, 13, 15, 24], "few": 11, "simpli": [11, 12, 13, 14], "done": [11, 12, 13, 16], "yaml": [11, 13, 20], "cast": 11, "decod": 11, "structur": [11, 26], "realli": 11, "treat": 11, "express": [11, 20, 22], "dsasignatur": 11, "ymluyxj5": 11, "usercertif": 11, "zm9vymfi": 11, "ymfyzm9v": 11, "b64encod": 11, "filter": [11, 13, 15, 20, 22, 23, 29], "fly": 11, "data": [11, 12, 16, 24], "sig_data": 11, "sig": 11, "technic": 11, "point": 11, "time": [11, 13], "eas": [11, 15], "intern": [11, 13], "dateattributesinglevalu": 11, "2019": 11, "07t15": 11, "50": 11, "00": 11, "dateattributemultiplevalu": 11, "00z": 11, "07t11": 11, "04": 11, "increment": 11, "snippet": 11, "happen": [11, 27], "dtval": 11, "datetimeoffset": 11, "parseexact": 11, "yyyi": 11, "mm": 11, "dd": 11, "t": [11, 13, 20, 24], "hh": 11, "ss": 11, "fffffffk": 11, "cultureinfo": 11, "invariantcultur": 11, "datetimestyl": 11, "assumeunivers": 11, "utcdatetim": 11, "tofiletimeutc": 11, "timezon": [11, 22], "assum": [11, 12], "conveni": 11, "definit": [11, 13], "languag": [11, 22], "dag": [11, 22, 23], "dad": [11, 22, 23], "pai": [11, 22, 23], "ci": [11, 23], "ccdclcswrpwpdtlocrsdrcwdwo": [11, 22, 23], "wd": [11, 23], "quit": 11, "them": [11, 20, 24], "manual": [11, 12, 16, 21], "ill": 11, "tab": 11, "objectnam": 11, "obj": 11, "getsecuritydescriptorsddlform": 11, "cover": [12, 13], "unlik": [12, 13], "mechan": 12, "remot": 12, "code": [12, 25, 27], "librari": [12, 13, 20], "pip": 12, "python3": 12, "provid": [12, 13, 20, 26, 27], "lap": [12, 20], "rpm": 12, "dnf": 12, "gcc": 12, "devel": 12, "lib": 12, "distribut": [12, 18], "than": [12, 13, 17, 26, 27], "relat": 12, "failur": 12, "messag": [12, 13], "localhost": 12, "purpos": [12, 14], "els": 12, "implicit": 12, "possibl": [12, 13, 14, 16, 20], "mit": 12, "suppli": [12, 13, 16], "satisfi": 12, "workflow": 12, "_ldap": 12, "_tcp": 12, "_msdc": 12, "sort": [12, 23], "take": [12, 14, 24], "return": [12, 15, 20], "critic": 12, "No": [12, 15], "appear": 12, "With": [12, 13], "reli": 12, "send": 12, "exchang": 12, "seen": [12, 13, 27], "anyon": 12, "unencrypt": 12, "reject": 12, "section": 12, "basic": 12, "similar": 12, "http": [12, 14, 23], "implement": 12, "actual": [12, 14, 26], "subsequ": [12, 13, 16, 17, 21], "unprotect": 12, "eavesdrop": 12, "tamper": 12, "handshak": 12, "insid": [12, 13, 22, 26], "content": 12, "reflect": [12, 20], "necessarili": 12, "combin": [12, 14, 20, 24], "both": 12, "favor": 12, "modern": [12, 27], "prefer": 12, "properli": 12, "typic": [12, 13, 17, 18, 20], "etc": [12, 13, 14], "good": 12, "wai": [12, 13, 20, 22, 24, 27], "correctli": 12, "command": [12, 13, 16], "c": [12, 17, 24, 25, 26, 27], "kvno": 12, "heimdal": 12, "maco": 12, "ticket": [12, 20], "chanc": 12, "By": [12, 13, 20, 22, 24], "unavail": 12, "onc": 12, "consid": [12, 15], "weak": 12, "standard": [12, 15], "stronger": 12, "mitig": 12, "why": [12, 13, 20], "ssl": 12, "link": 12, "doubt": 12, "verifi": [12, 20], "sure": 12, "socket": 12, "context": [12, 22], "create_default_context": 12, "create_connect": 12, "sock": 12, "wrap_socket": 12, "server_hostnam": 12, "ssock": 12, "print": 12, "ca_cert": [12, 20], "verif": 12, "somewher": 12, "filesystem": 12, "sever": 12, "openssl": 12, "layout": 12, "capath": 12, "cert_valid": [12, 20], "self": 12, "sign": 12, "product": [12, 20, 24], "lot": 12, "benefit": 12, "offer": 12, "who": 12, "sai": 12, "yml": [13, 20], "config": [13, 20], "fact": [13, 20], "individu": 13, "compos": [13, 20], "mc": [13, 20], "admpwd": [13, 20], "In": [13, 14, 20], "ms_mcs_admpwd": 13, "myhost": 13, "ansible_host": [13, 20], "password123": [13, 16, 17, 20, 21], "1108": 13, "microsoft_ad_distinguished_nam": [13, 20], "implicitli": 13, "wrap": 13, "produc": 13, "mean": 13, "someth": [13, 22], "refer": [13, 15, 17], "after": [13, 16, 20, 21, 22], "ugfzc3dvcmqxmjmh": 13, "nativ": 13, "dict": [13, 22], "json": 13, "my_com": 13, "other_var": 13, "from_json": [13, 20], "ansible_password": [13, 20], "final": [13, 14], "dervic": 13, "hand": 13, "two": [13, 25, 27], "v": 13, "my_command": 13, "foo": [13, 26], "bar": 13, "convers": 13, "inventory_hostnam": [13, 20], "rather": [13, 26, 27], "othernam": 13, "leav": [13, 21], "proper": 13, "four": 13, "respect": [13, 15, 18, 27], "coercion": 13, "rule": [13, 14, 20, 22, 26], "mai": [13, 16, 17, 21, 27], "multi": [13, 14, 20, 26], "we": [13, 20], "wsman": 13, "termsrv": 13, "restrictedkrbhost": 13, "denot": [13, 20], "easi": [13, 22], "readabl": 13, "password_last_set_int": 13, "password_last_set_datetim": 13, "133201427491953218": 13, "place": [13, 15, 16, 20], "previous": 13, "hasn": 13, "sid_raw": 13, "sid_raw_filt": 13, "computer_nam": 13, "comment2": 13, "51cc490f": 13, "1de0": 13, "41ae": 13, "98ad": 13, "dc065d5b33e2": 13, "aqmaaaaaaauvaaaa0gqaafqeaaa": 13, "administr": [13, 16, 20, 22, 27], "solut": 13, "assign": [13, 16], "legaci": [13, 20], "mslap": [13, 20], "encryptedpassword": [13, 20], "ansible_us": [13, 20], "lmrqk1l622h": 13, "hardcod": [13, 20], "p": [13, 20], "raw_exampl": 13, "this_exampl": 13, "awznso": 13, "zj": 13, "j6p9": 13, "eyjuijoiqwrtaw5pc3ryyxrvciisinqioiixzdk4mmi0mzdin2e1yzyilcjwijoiqvd6bnnvqfpkk0o2cdkifq": 13, "1d982b437b7a5c6": 13, "base16": 13, "shown": 13, "consist": 13, "behavior": [13, 20], "presenc": 13, "absenc": 13, "experiment": 13, "author": [13, 19], "6jr": 13, "yk": 13, "0q": 13, "tolzawr7rgfk": 13, "encrypted_valu": 13, "miietgyjkozi": 13, "update_timestamp": 13, "133281382308674404": 13, "1d982b607ae7b64": 13, "bitwis": 13, "undocu": 13, "reason": [13, 20], "longer": 13, "due": [13, 15, 27], "valueerror": 13, "getkei": 13, "0x80070005": 13, "lapsadpassword": 13, "come": [14, 15], "idempot": [14, 24, 27], "design": [14, 15], "style": 14, "particular": 14, "host1": 14, "443": 14, "host2": 14, "bring": 14, "host3": 14, "togeth": 14, "subkei": [14, 18, 27], "call": [14, 24], "preserv": [14, 18], "complet": 14, "primari": 14, "demonstr": 14, "made": [15, 16, 17, 21], "transit": 15, "shape": 15, "mostli": 15, "drop": 15, "break": 15, "reboot": [15, 16, 17, 21, 24], "handl": 15, "separ": [15, 20, 26], "win_reboot": [15, 16, 17, 21], "involv": 15, "promot": [15, 16, 17], "log_path": [15, 17], "log": [15, 16, 17], "dns_host_nam": 15, "noth": 15, "now": 15, "offline_domain_join": 15, "odj_blob_path": 15, "gener": [15, 19, 20, 21, 23, 24], "regist": [15, 16, 17, 21, 24], "computer_obj": [15, 24], "offline_blob": [15, 24], "outlin": 15, "ignore_protect": 15, "regardless": 15, "organizational_unit": 15, "unset": 15, "simplifi": 15, "groups_act": 15, "favour": 15, "groups_missing_behaviour": 15, "missing_behaviour": [15, 27], "spn_action": 15, "align": 15, "practic": [15, 27], "2012": [16, 17], "demot": 16, "database_path": [16, 17], "fix": [16, 17], "disk": [16, 17], "systemroot": [16, 17], "ntd": [16, 17], "dns_domain_nam": [16, 17, 21], "domain_admin_password": [16, 21], "domain_admin_us": [16, 21], "admin": [16, 18, 20, 21, 22, 27], "necessari": 16, "domain_log_path": 16, "non": [16, 17], "unc": [16, 17], "install_dn": [16, 17], "installdn": 16, "addsdomaincontrol": 16, "install_media_path": 16, "media": 16, "ifc": 16, "ifm": 16, "local_admin_password": 16, "member_serv": 16, "read_onli": 16, "replica": 16, "reboot_requir": [16, 17, 21], "safe_mode_password": [16, 17], "safe": [16, 17], "site_nam": 16, "site": [16, 20], "sysvol_path": [16, 17], "sysvol": [16, 17], "folder": 16, "partial": [16, 17, 21], "scenario": [16, 17, 21], "phase": 16, "put": 16, "reconnect": 16, "win_domain_control": 16, "vagrant": [16, 17, 21], "testgui": [16, 21], "london": 16, "d": 16, "dc_promot": 16, "matt": [16, 17, 19, 21], "davi": [16, 17, 19, 21], "nitzmahon": [16, 17, 19, 21], "reachabl": 17, "forest": 17, "create_dns_deleg": 17, "along": 17, "integr": [17, 20], "resid": 17, "domain_mod": 17, "level": 17, "creation": 17, "win2003": 17, "win2008": 17, "win2008r2": 17, "win2012": 17, "win2012r2": 17, "winthreshold": 17, "domain_netbios_nam": 17, "root": [17, 24], "label": 17, "less": 17, "domain_nam": 17, "forest_mod": 17, "written": 17, "win_domain": 17, "post": 17, "domain_instal": 17, "categori": 18, "mail": [18, 19, 27], "grouptyp": 18, "homepag": 18, "wwwhomepag": [18, 23], "keep": 18, "scope": [18, 20, 22], "domainloc": 18, "univers": 18, "win_group": [18, 21], "win_domain_group": 18, "cow": 18, "www": 18, "helpdesk": 18, "mygroup": 18, "2171456218": 18, "3732823212": 18, "122182344": 18, "1189": 18, "corp": 18, "password01": 18, "dc12": 18, "entir": 18, "14": 19, "newer": 19, "matrix": 19, "room": 19, "im": 19, "usag": 19, "irc": 19, "channel": 19, "libera": 19, "network": [19, 24], "project": 19, "subscrib": 19, "doc": 19, "adjust": 20, "node": 20, "inner": [20, 26], "connection_timeout": 20, "filter_without_comput": 20, "keyed_group": 20, "default_valu": 20, "12": 20, "mutual": [20, 21, 22, 24, 27], "exclus": [20, 21, 22, 24, 27], "trailing_separ": 20, "input": 20, "parent_group": 20, "parent": [20, 24], "start": 20, "leading_separ": 20, "11": 20, "conjunct": 20, "underscor": 20, "lead": 20, "given": [20, 27], "map": [20, 26], "concaten": 20, "item": 20, "larger": 20, "narrow": 20, "speed": 20, "search_scop": [20, 22], "one_level": [20, 22], "immedi": [20, 22], "subtre": [20, 22], "nest": 20, "strict": 20, "invalid": [20, 22, 26, 27], "fatal": 20, "skip": 20, "continu": [20, 27], "use_extra_var": 20, "ini": 20, "inventory_plugin": 20, "tech": 20, "preview": 20, "subject": 20, "feedback": 20, "receiv": 20, "catalog": 20, "3268": 20, "home": 20, "cert": 20, "tell": 20, "env": 20, "ldap_usernam": 20, "ldap_password": 20, "workshop": 20, "dnsdomainnam": 20, "prod": 20, "computer_sid": 20, "password_last_set": 20, "host_com": 20, "memberof": [20, 22, 26], "computer_membership": [20, 26], "info": 20, "construct": 20, "host_var": 20, "site_": 20, "site_unknown": 20, "isn": [20, 24], "unknown": 20, "offline_join_blob": [21, 24], "domain_ou_path": 21, "desir": 21, "unjoin": 21, "workgroup_nam": 21, "win_group_membership": 21, "win_us": 21, "win_domain_membership": 21, "mydomaincli": 21, "later": 21, "mywg": 21, "win_domain_admin_us": 21, "win_domain_admin_password": 21, "workgroup_r": 21, "cmdlet": 22, "substitut": 22, "ldap_filt": 22, "include_delet": 22, "tradit": 22, "impact": 22, "best": [22, 27], "warn": [22, 27], "expandproperti": 22, "limit": 22, "grouptype_ansibleflag": 22, "supportedencryptiontypes_ansibleflag": 22, "samaccounttype_ansibleflag": 22, "useraccountcontrol_ansibleflag": 22, "win_domain_object_info": 22, "eq": 22, "objectcategori": 22, "person": 22, "februari": 22, "1st": 22, "whencreat": 22, "gt": 22, "20200201000000": 22, "0z": 22, "date": 22, "translat": 22, "accountexpir": 22, "admincount": 22, "canonicalnam": 22, "2020": 22, "13t09": 22, "03": 22, "22": 22, "0000000z": 22, "built": 22, "administ": 22, "polici": 22, "creator": 22, "owner": 22, "lcrplorc": 22, "au": [22, 26], "sy": 22, "ccdclcswrpwplocrsdrcwdwo": 22, "ba": 22, "c8c6569e": 22, "4688": 22, "4f3c": 22, "8462": 22, "afc4ff60817b": 22, "2959096244": 22, "3298113601": 22, "420842770": 22, "500": 22, "subnet": 23, "contact": 23, "correct": 23, "pattern": 23, "w": 23, "mycontact": 23, "contact_obj": 23, "renamedcontact": 23, "contact_object": 23, "app": 23, "everyon": 23, "testus": [23, 25, 27], "blob_path": 24, "regener": 24, "provision_root_ca_cert": 24, "step": 24, "net": 24, "doubl": 24, "hop": 24, "problem": 24, "veri": 24, "no_log": 24, "leak": 24, "act": 24, "reset": 24, "care": 24, "delegate_to": 24, "temp": 24, "araiamzmzmygcaaaaaaaaaaaagabaaaa": 24, "citi": [25, 27], "l": [25, 27], "3166": [25, 27], "postal_cod": [25, 27], "postal": [25, 27], "zip": [25, 27], "postalcod": [25, 27], "state_provinc": [25, 27], "street": [25, 27], "address": [25, 27], "win_domain_": 25, "ansiblefest": 25, "euc": 25, "vmware": [25, 27], "lan": 25, "ws1user": 25, "busi": 25, "sandi": 25, "spring": 25, "u": [25, 27], "georgia": 25, "1155": 25, "perimet": 25, "center": 25, "west": 25, "30189": 25, "updat": [25, 27], "jzollo": 25, "rfc": 26, "4514": 26, "rel": 26, "ava": 26, "parser": 26, "outer": 26, "guarante": 26, "unescap": 26, "rais": 26, "set_fact": 26, "my_dn": 26, "acm": 26, "inc": 26, "st": [26, 27], "queensland": 26, "extract": 26, "account_lock": 27, "unlock": 27, "lock": 27, "wish": 27, "email": 27, "anyth": 27, "givennam": 27, "plain": 27, "text": 27, "update_password": 27, "password_expir": 27, "next": 27, "login": 27, "expir": 27, "password_never_expir": 27, "never": 27, "streetaddress": 27, "surnam": 27, "lastnam": 27, "sn": 27, "on_creat": 27, "newli": 27, "when_chang": 27, "user_cannot_change_password": 27, "prevent": 27, "win_domain_us": 27, "bob": 27, "smith": 27, "bobco": 27, "b0bp4ssw0rd": 27, "123": 27, "4th": 27, "sometown": 27, "IN": 27, "12345": 27, "telephonenumb": 27, "555": 27, "123456": 27, "somepas2w0rd": 27, "liz": 27, "kenyon": 27, "mssqlsvc": 27, "us99db": 27, "svr95": 27, "1433": 27, "2433": 27, "shmemmmi": 27, "the3rubberducki33": 27, "enterpris": 27, "mk": 27, "ai": 27, "jessiedotj": 27, "existing_us": 27, "new_sam_nam": 27, "new_nam": 27, "securityidentifi": 27, "user_obj": 27, "docsit": 29}, "objects": {"": [[0, 0, 1, "-", "ANSIBLE_INVENTORY_USE_EXTRA_VARS"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_AUTH_PROTOCOL"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_CA_CERT"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_CERTIFICATE"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_CERTIFICATE_KEY"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_CERTIFICATE_PASSWORD"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_CERT_VALIDATION"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_CONNECTION_TIMEOUT"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_ENCRYPT"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_PASSWORD"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_PORT"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_SERVER"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_TLS_MODE"], [0, 0, 1, "-", "MICROSOFT_AD_LDAP_USERNAME"]]}, "objtypes": {"0": "std:envvar"}, "objnames": {"0": ["std", "envvar", "environment variable"]}, "titleterms": {"index": [0, 1, 2, 3, 4, 19, 29], "all": [0, 2, 3, 4], "collect": [0, 1, 5, 6, 7, 8, 9, 10, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "environ": 0, "variabl": 0, "filter": [2, 5, 6, 7, 10, 19, 26], "plugin": [2, 3, 19, 20, 29], "microsoft": [2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "ad": [2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "inventori": [3, 13, 19, 20], "modul": [4, 8, 9, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 27], "as_datetim": 5, "convert": [5, 6, 7], "an": [5, 6, 7, 10, 22, 26], "ldap": [5, 6, 7, 9, 10, 11, 12, 13, 20, 26], "valu": [5, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27], "datetim": 5, "string": [5, 6, 7, 10, 13, 26], "synopsi": [5, 6, 7, 8, 9, 10, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "input": [5, 6, 7, 10, 26], "keyword": 5, "paramet": [5, 8, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "see": [5, 6, 7, 8, 10, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27], "also": [5, 6, 7, 8, 10, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27], "exampl": [5, 6, 7, 8, 9, 10, 14, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "return": [5, 6, 7, 8, 9, 10, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27], "author": [5, 6, 7, 8, 9, 10, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "link": [5, 6, 7, 8, 9, 10, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "as_guid": 6, "guid": [6, 11, 12, 13, 14, 15, 19], "as_sid": 7, "secur": [7, 11], "identifi": 7, "comput": 8, "manag": [8, 16, 18, 21, 23, 25, 27], "activ": [8, 18, 20, 22, 23, 25, 27], "directori": [8, 18, 20, 22, 23, 25, 27], "object": [8, 18, 22, 23, 26], "requir": [8, 12, 18, 20, 22, 23, 24, 25, 27], "attribut": [8, 9, 11, 13, 16, 17, 18, 21, 22, 23, 24, 25, 27], "note": [8, 9, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27], "debug_ldap_cli": 9, "get": [9, 24], "host": [9, 16, 21], "inform": [9, 22], "debug": 9, "connect": [9, 12, 13], "dn_escap": 10, "escap": 10, "distinguishednam": [10, 26], "set": [11, 14], "type": [11, 13], "byte": 11, "arrai": 11, "date": 11, "descriptor": 11, "option": [12, 14], "server": [12, 16], "lookup": 12, "authent": 12, "simpl": 12, "certif": 12, "negoti": 12, "kerbero": 12, "ntlm": 12, "valid": 12, "info": 13, "empti": 13, "null": 13, "templat": 13, "dictionari": 13, "hostnam": 13, "lap": 13, "list": 14, "add": 14, "remov": 14, "migrat": 15, "win_domain": 15, "win_domain_control": 15, "win_domain_membership": 15, "win_domain_comput": 15, "win_domain_group": 15, "win_domain_group_membership": 15, "win_domain_object_info": 15, "win_domain_": 15, "win_domain_us": 15, "domain_control": 16, "domain": [16, 17, 21, 24], "control": 16, "member": 16, "state": 16, "window": [16, 17, 21], "ensur": 17, "exist": 17, "group": 18, "descript": 19, "commun": 19, "scenario": 19, "membership": 21, "workgroup": 21, "object_info": 22, "gather": 22, "offline_join": 24, "offlin": 24, "join": 24, "blob": 24, "ou": 25, "organiz": 25, "unit": 25, "parse_dn": 26, "pars": 26, "user": 27, "namespac": 28, "welcom": 29, "my": 29, "ansibl": 29, "document": 29, "refer": 29}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 60}, "alltitles": {"Index of all Collection Environment Variables": [[0, "index-of-all-collection-environment-variables"]], "Collection Index": [[1, "collection-index"]], "Index of all Filter Plugins": [[2, "index-of-all-filter-plugins"]], "microsoft.ad": [[2, "microsoft-ad"], [3, "microsoft-ad"], [4, "microsoft-ad"]], "Index of all Inventory Plugins": [[3, "index-of-all-inventory-plugins"]], "Index of all Modules": [[4, "index-of-all-modules"]], "microsoft.ad.as_datetime filter \u2013 Converts an LDAP value to a datetime string": [[5, "microsoft-ad-as-datetime-filter-converts-an-ldap-value-to-a-datetime-string"]], "Synopsis": [[5, "synopsis"], [6, "synopsis"], [7, "synopsis"], [8, "synopsis"], [9, "synopsis"], [10, "synopsis"], [16, "synopsis"], [17, "synopsis"], [18, "synopsis"], [20, "synopsis"], [21, "synopsis"], [22, "synopsis"], [23, "synopsis"], [24, "synopsis"], [25, "synopsis"], [26, "synopsis"], [27, "synopsis"]], "Input": [[5, "input"], [6, "input"], [7, "input"], [10, "input"], [26, "input"]], "Keyword parameters": [[5, "keyword-parameters"]], "See Also": [[5, "see-also"], [6, "see-also"], [7, "see-also"], [8, "see-also"], [10, "see-also"], [16, "see-also"], [17, "see-also"], [18, "see-also"], [21, "see-also"], [22, "see-also"], [23, "see-also"], [24, "see-also"], [25, "see-also"], [26, "see-also"], [27, "see-also"]], "Examples": [[5, "examples"], [6, "examples"], [7, "examples"], [8, "examples"], [9, "examples"], [10, "examples"], [14, "examples"], [16, "examples"], [17, "examples"], [18, "examples"], [20, "examples"], [21, "examples"], [22, "examples"], [23, "examples"], [24, "examples"], [25, "examples"], [26, "examples"], [27, "examples"]], "Return Value": [[5, "return-value"], [6, "return-value"], [7, "return-value"], [10, "return-value"], [26, "return-value"]], "Authors": [[5, "authors"], [6, "authors"], [7, "authors"], [8, "authors"], [9, "authors"], [10, "authors"], [16, "authors"], [17, "authors"], [18, "authors"], [20, "authors"], [21, "authors"], [22, "authors"], [23, "authors"], [24, "authors"], [25, "authors"], [26, "authors"], [27, "authors"]], "Collection links": [[5, "collection-links"], [6, "collection-links"], [7, "collection-links"], [8, "collection-links"], [9, "collection-links"], [10, "collection-links"], [16, "collection-links"], [17, "collection-links"], [18, "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"]], "microsoft.ad.as_guid filter \u2013 Converts an LDAP value to a GUID string": [[6, "microsoft-ad-as-guid-filter-converts-an-ldap-value-to-a-guid-string"]], "microsoft.ad.as_sid filter \u2013 Converts an LDAP value to a Security Identifier string": [[7, "microsoft-ad-as-sid-filter-converts-an-ldap-value-to-a-security-identifier-string"]], "microsoft.ad.computer module \u2013 Manage Active Directory computer objects": [[8, "microsoft-ad-computer-module-manage-active-directory-computer-objects"]], "Requirements": [[8, "requirements"], [12, "requirements"], [18, "requirements"], [20, "requirements"], [22, "requirements"], [23, "requirements"], [24, "requirements"], [25, "requirements"], [27, "requirements"]], "Parameters": [[8, "parameters"], [16, "parameters"], [17, "parameters"], [18, "parameters"], [20, "parameters"], [21, "parameters"], [22, "parameters"], [23, "parameters"], [24, "parameters"], [25, "parameters"], [27, "parameters"]], "Attributes": [[8, "attributes"], [9, "attributes"], [13, "attributes"], [16, "attributes"], [17, "attributes"], [18, "attributes"], [21, "attributes"], [22, "attributes"], [23, "attributes"], [24, "attributes"], [25, "attributes"], [27, "attributes"]], "Notes": [[8, "notes"], [9, "notes"], [16, "notes"], [17, "notes"], [18, "notes"], [20, "notes"], [21, "notes"], [22, "notes"], [23, "notes"], [24, "notes"], [25, "notes"], [27, "notes"]], "Return Values": [[8, "return-values"], [9, "return-values"], [16, "return-values"], [17, "return-values"], [18, "return-values"], [21, "return-values"], [22, "return-values"], [23, "return-values"], [24, "return-values"], [25, "return-values"], [27, "return-values"]], "microsoft.ad.debug_ldap_client module \u2013 Get host information for debugging LDAP connections": [[9, "microsoft-ad-debug-ldap-client-module-get-host-information-for-debugging-ldap-connections"]], "microsoft.ad.dn_escape filter \u2013 Escape an LDAP DistinguishedName value string.": [[10, "microsoft-ad-dn-escape-filter-escape-an-ldap-distinguishedname-value-string"]], "Attributes guide": [[11, "attributes-guide"]], "LDAP Attributes": [[11, "ldap-attributes"]], "Setting Attributes": [[11, "setting-attributes"]], "Attribute Types": [[11, "attribute-types"]], "Byte Arrays": [[11, "byte-arrays"]], "Dates": [[11, "dates"]], "Security Descriptors": [[11, "security-descriptors"]], "LDAP Connection guide": [[12, "ldap-connection-guide"]], "Connection options": [[12, "connection-options"]], "Server lookup": [[12, "server-lookup"]], "Authentication": [[12, "authentication"]], "Simple": [[12, "simple"]], "Certificate": [[12, "certificate"]], "Negotiate": [[12, "negotiate"]], "Kerberos": [[12, "kerberos"]], "NTLM": [[12, "ntlm"]], "Certificate validation": [[12, "certificate-validation"]], "LDAP Inventory guide": [[13, "ldap-inventory-guide"]], "Connection info": [[13, "connection-info"]], "Empty string or null": [[13, "empty-string-or-null"]], "Template string": [[13, "template-string"]], "Dictionary": [[13, "dictionary"]], "Inventory hostname": [[13, "inventory-hostname"]], "Value types and templating": [[13, "value-types-and-templating"]], "LAPS": [[13, "laps"]], "Setting list option values guide": [[14, "setting-list-option-values-guide"]], "Add, remove, and set": [[14, "add-remove-and-set"]], "Migration guide": [[15, "migration-guide"]], "Migrated Modules": [[15, "migrated-modules"]], "Module win_domain": [[15, "module-win-domain"]], "Module win_domain_controller": [[15, "module-win-domain-controller"]], "Module win_domain_membership": [[15, "module-win-domain-membership"]], "Module win_domain_computer": [[15, "module-win-domain-computer"]], "Module win_domain_group": [[15, "module-win-domain-group"]], "Module win_domain_group_membership": [[15, "module-win-domain-group-membership"]], "Module win_domain_object_info": [[15, "module-win-domain-object-info"]], "Module win_domain_ou": [[15, "module-win-domain-ou"]], "Module win_domain_user": [[15, "module-win-domain-user"]], "microsoft.ad.domain_controller module \u2013 Manage domain controller/member server state for a Windows host": [[16, "microsoft-ad-domain-controller-module-manage-domain-controller-member-server-state-for-a-windows-host"]], "microsoft.ad.domain module \u2013 Ensures the existence of a Windows domain": [[17, "microsoft-ad-domain-module-ensures-the-existence-of-a-windows-domain"]], "microsoft.ad.group module \u2013 Manage Active Directory group objects": [[18, "microsoft-ad-group-module-manage-active-directory-group-objects"]], "Microsoft.Ad": [[19, "microsoft-ad"]], "Description": [[19, "description"]], "Communication": [[19, "communication"]], "Scenario Guides": [[19, "scenario-guides"]], "Plugin Index": [[19, "plugin-index"]], "Modules": [[19, "modules"]], "Filter Plugins": [[19, "filter-plugins"]], "Inventory Plugins": [[19, "inventory-plugins"]], "microsoft.ad.ldap inventory \u2013 Inventory plugin for Active Directory": [[20, "microsoft-ad-ldap-inventory-inventory-plugin-for-active-directory"]], "microsoft.ad.membership module \u2013 Manage domain/workgroup membership for a Windows host": [[21, "microsoft-ad-membership-module-manage-domain-workgroup-membership-for-a-windows-host"]], "microsoft.ad.object_info module \u2013 Gather information an Active Directory object": [[22, "microsoft-ad-object-info-module-gather-information-an-active-directory-object"]], "microsoft.ad.object module \u2013 Manage Active Directory objects": [[23, "microsoft-ad-object-module-manage-active-directory-objects"]], "microsoft.ad.offline_join module \u2013 Get the Offline Domain Join BLOB": [[24, "microsoft-ad-offline-join-module-get-the-offline-domain-join-blob"]], "microsoft.ad.ou module \u2013 Manage Active Directory organizational units": [[25, "microsoft-ad-ou-module-manage-active-directory-organizational-units"]], "microsoft.ad.parse_dn filter \u2013 Parses an LDAP DistinguishedName string into an object.": [[26, "microsoft-ad-parse-dn-filter-parses-an-ldap-distinguishedname-string-into-an-object"]], "microsoft.ad.user module \u2013 Manage Active Directory users": [[27, "microsoft-ad-user-module-manage-active-directory-users"]], "Collections in the Microsoft Namespace": [[28, "collections-in-the-microsoft-namespace"]], "Welcome to my Ansible collection documentation": [[29, "welcome-to-my-ansible-collection-documentation"]], "Collections:": [[29, null]], "Plugin indexes:": [[29, null]], "Reference indexes:": [[29, null]]}, "indexentries": {"ansible_inventory_use_extra_vars": [[0, "envvar-ANSIBLE_INVENTORY_USE_EXTRA_VARS"], [20, "index-12"]], "microsoft_ad_ldap_auth_protocol": [[0, "envvar-MICROSOFT_AD_LDAP_AUTH_PROTOCOL"], [20, "index-0"]], "microsoft_ad_ldap_ca_cert": [[0, "envvar-MICROSOFT_AD_LDAP_CA_CERT"], [20, "index-1"]], "microsoft_ad_ldap_certificate": [[0, "envvar-MICROSOFT_AD_LDAP_CERTIFICATE"], [20, "index-3"]], "microsoft_ad_ldap_certificate_key": [[0, "envvar-MICROSOFT_AD_LDAP_CERTIFICATE_KEY"], [20, "index-4"]], "microsoft_ad_ldap_certificate_password": [[0, "envvar-MICROSOFT_AD_LDAP_CERTIFICATE_PASSWORD"], [20, "index-5"]], "microsoft_ad_ldap_cert_validation": [[0, "envvar-MICROSOFT_AD_LDAP_CERT_VALIDATION"], [20, "index-2"]], "microsoft_ad_ldap_connection_timeout": [[0, "envvar-MICROSOFT_AD_LDAP_CONNECTION_TIMEOUT"], [20, "index-6"]], "microsoft_ad_ldap_encrypt": [[0, "envvar-MICROSOFT_AD_LDAP_ENCRYPT"], [20, "index-7"]], "microsoft_ad_ldap_password": [[0, "envvar-MICROSOFT_AD_LDAP_PASSWORD"], [20, "index-8"]], "microsoft_ad_ldap_port": [[0, "envvar-MICROSOFT_AD_LDAP_PORT"], [20, "index-9"]], "microsoft_ad_ldap_server": [[0, "envvar-MICROSOFT_AD_LDAP_SERVER"], [20, "index-10"]], "microsoft_ad_ldap_tls_mode": [[0, "envvar-MICROSOFT_AD_LDAP_TLS_MODE"], [20, "index-11"]], "microsoft_ad_ldap_username": [[0, "envvar-MICROSOFT_AD_LDAP_USERNAME"], [20, "index-13"]], "environment variable": [[0, "envvar-ANSIBLE_INVENTORY_USE_EXTRA_VARS"], [0, "envvar-MICROSOFT_AD_LDAP_AUTH_PROTOCOL"], [0, "envvar-MICROSOFT_AD_LDAP_CA_CERT"], [0, "envvar-MICROSOFT_AD_LDAP_CERTIFICATE"], [0, "envvar-MICROSOFT_AD_LDAP_CERTIFICATE_KEY"], [0, "envvar-MICROSOFT_AD_LDAP_CERTIFICATE_PASSWORD"], [0, "envvar-MICROSOFT_AD_LDAP_CERT_VALIDATION"], [0, "envvar-MICROSOFT_AD_LDAP_CONNECTION_TIMEOUT"], [0, "envvar-MICROSOFT_AD_LDAP_ENCRYPT"], [0, "envvar-MICROSOFT_AD_LDAP_PASSWORD"], [0, "envvar-MICROSOFT_AD_LDAP_PORT"], [0, "envvar-MICROSOFT_AD_LDAP_SERVER"], [0, "envvar-MICROSOFT_AD_LDAP_TLS_MODE"], [0, "envvar-MICROSOFT_AD_LDAP_USERNAME"], [20, "index-0"], [20, "index-1"], [20, "index-10"], [20, "index-11"], [20, "index-12"], [20, "index-13"], [20, "index-2"], [20, "index-3"], [20, "index-4"], [20, "index-5"], [20, "index-6"], [20, "index-7"], [20, "index-8"], [20, "index-9"]]}}) \ No newline at end of file