Added: nifi/site/trunk/docs/nifi-docs/html/toolkit-guide.html
URL: 
http://svn.apache.org/viewvc/nifi/site/trunk/docs/nifi-docs/html/toolkit-guide.html?rev=1854109&view=auto
==============================================================================
--- nifi/site/trunk/docs/nifi-docs/html/toolkit-guide.html (added)
+++ nifi/site/trunk/docs/nifi-docs/html/toolkit-guide.html Fri Feb 22 01:03:44 
2019
@@ -0,0 +1,2927 @@
+<!--
+                        Licensed to the Apache Software Foundation (ASF) under 
one or more
+                        contributor license agreements.  See the NOTICE file 
distributed with
+                        this work for additional information regarding 
copyright ownership.
+                        The ASF licenses this file to You under the Apache 
License, Version 2.0
+                        (the "License"); you may not use this file except in 
compliance with
+                        the License.  You may obtain a copy of the License at
+
+                        http://www.apache.org/licenses/LICENSE-2.0
+
+                        Unless required by applicable law or agreed to in 
writing, software
+                        distributed under the License is distributed on an "AS 
IS" BASIS,
+                        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.
+                        See the License for the specific language governing 
permissions and
+                        limitations under the License.
+                        -->
+                        <!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.2">
+<meta name="author" content="Apache NiFi Team">
+<title>Apache NiFi Toolkit Guide</title>
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Copyright (C) 2012-2015 Dan Allen, Ryan Waldron and the Asciidoctor Project
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. */
+/* Remove the comments around the @import statement below when using this as a 
custom stylesheet */
+@import 
"https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400";;
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+body{margin:0}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html 
input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto 
Serif","DejaVu 
Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas 
img,.map_canvas embed,.map_canvas object{max-width:none!important}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+.antialiased,body{-webkit-font-smoothing:antialiased}
+img{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type 
p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock 
td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open 
Sans","DejaVu 
Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title 
small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 
1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans 
Mono",monospace;font-weight:400;color:rgba(0,0,0,.9);padding-right: 1px;}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px
 dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px 
solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media only screen and 
(min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}table{background:#fff;margin-bottom:1.25em;border:solid 
1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr 
td{padding:.5em .625em 
.625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em 
.625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot 
tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title 
strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:"
 ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans 
Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{display:inline-block;color:rgba(0,0,0,.8);font-size:.75em;line-height:1.4;background-color:#f7f7f7;border:1px
 solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 
1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 
0 0 .1em #fff inset;margin:-.15em .15em 0 .15em;padding:.2em .6em .2em 
.5em;vertical-align:middle;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:"
 ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px 
solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid 
#ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row
 wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details 
br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px 
solid 
#ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+@media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px
 solid 
#efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em
 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 
ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid 
#efefed;left:auto;right:0}}@media only screen and 
(min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}#content 
#toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+@media only screen and 
(min-width:768px){.sect1{padding-bottom:1.25em}}.sect1+.sect1{border-top:1px 
solid #efefed}
+#content 
h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content 
h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content 
h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content 
h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content 
h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock 
td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto
 Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type 
p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type 
p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open 
Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table 
td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid 
#ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content 
.olist>ol>li:last-child>:last-child,.exampleblock>.content 
.ulist>ul>li:last-child>:last-child,.exampleblock>.content 
.qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content
 .olist>ol>li:last-child>:last-child,.sidebarblock>.content 
.ulist>ul>li:last-child>:last-child,.sidebarblock>.content 
.qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock 
pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock 
pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock 
pre:not(.highlight),.sidebarblock .listingblock 
pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight 
"],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock 
pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock 
pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock 
pre.nowrap,.listingblock 
pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+@media only screen and (min-width:768px){.literalblock pre,.literalblock 
pre[class],.listingblock pre,.listingblock 
pre[class]{font-size:.90625em}}@media only screen and 
(min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock 
pre,.listingblock pre[class]{font-size:1em}}.literalblock.output 
pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock 
pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock 
code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre 
.command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable 
td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px 
solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote 
p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock 
blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0
 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 
0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu 
Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock 
.attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution 
cite{display:block;letter-spacing:-.05em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote 
p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote 
p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock 
th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.spread{width:100%}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 
1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all 
tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 
0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols 
*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 
1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all 
tbody>tr:last-child>td.tableblock,table.grid-all 
thead:last-child>tr>th.tableblock,table.grid-rows 
tbody>tr:last-child>th.tableblock,table.grid-rows 
tbody>tr:last-child>td.tableblock,table.grid-rows 
thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows 
tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th 
p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist 
.ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist 
li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist 
li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em 
auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1{padding-right:.75em;font-weight:bold}
+td.hdlist1,td.hdlist2{vertical-align:top}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px 
#fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 
0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em 
.625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none}
+span.footnote,span.footnoteref{vertical-align:super;font-size:.875em}
+span.footnote a,span.footnoteref a{text-decoration:none}
+span.footnote a:active,span.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 
0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 
.375em;line-height:1.3;font-size:.875em;margin-left:1.2em;text-indent:-1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 
1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 
2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open
 Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+h1,h2{letter-spacing:-.01em}
+dt,th.tableblock,td.content{text-rendering:optimizeLegibility}
+p,td.content{letter-spacing:-.01em}
+p strong,td.content strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock 
td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0
 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"("
 attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img{page-break-inside:avoid}
+thead{display:table-header-group}
+img{max-width:100%!important}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header 
.details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book 
#toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book 
.sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css";>
+</head>
+<body class="article">
+<div id="header">
+<h1>Apache NiFi Toolkit Guide</h1>
+<div class="details">
+<span id="author" class="author">Apache NiFi Team</span><br>
+<span id="email" class="email"><a 
href="mailto:[email protected]";>[email protected]</a></span><br>
+</div>
+<div id="toc" class="toc">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="toolkit-guide.html#overview">Overview</a>
+<ul class="sectlevel2">
+<li><a 
href="toolkit-guide.html#prerequisites-for-running-in-a-secure-environment">Prerequisites
 for Running in a Secure Environment</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#nifi_CLI">NiFi CLI</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage">Usage</a></li>
+<li><a href="toolkit-guide.html#property-argument-handling">Property/Argument 
Handling</a></li>
+<li><a href="toolkit-guide.html#security-configuration">Security 
Configuration</a>
+<ul class="sectlevel3">
+<li><a 
href="toolkit-guide.html#example-secure-nifi-registry-without-proxied-entity">Example
 - Secure NiFi Registry without Proxied-Entity</a></li>
+<li><a 
href="toolkit-guide.html#example-secure-nifi-registry-with-proxied-entity">Example
 - Secure NiFi Registry with Proxied-Entity</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#interactive-usage">Interactive Usage</a></li>
+<li><a href="toolkit-guide.html#output">Output</a></li>
+<li><a href="toolkit-guide.html#back-referencing">Back-Referencing</a></li>
+<li><a href="toolkit-guide.html#adding-commands">Adding Commands</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#encrypt_config_tool">Encrypt-Config Tool</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-2">Usage</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#file-manager">File Manager</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-3">Usage</a></li>
+<li><a href="toolkit-guide.html#expected-behavior">Expected Behavior</a>
+<ul class="sectlevel3">
+<li><a href="toolkit-guide.html#backup">Backup</a></li>
+<li><a href="toolkit-guide.html#install">Install</a></li>
+<li><a href="toolkit-guide.html#restore">Restore</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#flow-analyzer">Flow Analyzer</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-4">Usage</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#node-manager">Node Manager</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-5">Usage</a></li>
+<li><a href="toolkit-guide.html#expected-behavior-2">Expected Behavior</a>
+<ul class="sectlevel3">
+<li><a href="toolkit-guide.html#status">Status</a></li>
+<li><a href="toolkit-guide.html#disconnect">Disconnect</a></li>
+<li><a href="toolkit-guide.html#connect">Connect</a></li>
+<li><a href="toolkit-guide.html#remove">Remove</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#notify">Notify</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-6">Usage</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#s2s">S2S</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-7">Usage</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#tls_toolkit">TLS Toolkit</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#wildcard_certificates">Wildcard 
Certificates</a>
+<ul class="sectlevel3">
+<li><a 
href="toolkit-guide.html#potential-issues-with-wildcard-certificates">Potential 
issues with wildcard certificates</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#tls_operation_modes">Operation Modes</a>
+<ul class="sectlevel3">
+<li><a href="toolkit-guide.html#standalone">Standalone</a></li>
+<li><a href="toolkit-guide.html#client-server">Client/Server</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#tls_intermediate_ca">Using An Existing 
Intermediate Certificate Authority (CA)</a>
+<ul class="sectlevel3">
+<li><a href="toolkit-guide.html#nifi-cert-pem">nifi-cert.pem</a></li>
+<li><a href="toolkit-guide.html#nifi-key-key">nifi-key.key</a></li>
+<li><a href="toolkit-guide.html#tls_external-signed_ca">Signing with 
Externally-signed CA Certificates</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#additional_certificate_commands">Additional 
Certificate Commands</a></li>
+</ul>
+</li>
+<li><a href="toolkit-guide.html#zookeeper_migrator">ZooKeeper Migrator</a>
+<ul class="sectlevel2">
+<li><a href="toolkit-guide.html#usage-11">Usage</a></li>
+<li><a 
href="toolkit-guide.html#migrating-between-source-and-destination-zookeepers">Migrating
 Between Source and Destination ZooKeepers</a>
+<ul class="sectlevel3">
+<li><a href="toolkit-guide.html#zookeeper-migration-steps">ZooKeeper Migration 
Steps</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="overview"><a class="anchor" 
href="toolkit-guide.html#overview"></a>Overview</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The NiFi Toolkit contains several command line utilities to setup and 
support NiFi in standalone and clustered environments.  The utilities 
include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>CLI&#8201;&#8212;&#8201;The <code>cli</code> tool enables administrators to 
interact with NiFi and NiFi Registry instances to automate tasks such as 
deploying versioned flows and managing process groups and cluster nodes.</p>
+</li>
+<li>
+<p>Encrypt Config&#8201;&#8212;&#8201;The <code>encrypt-config</code> tool 
encrypts the sensitive keys in the <em>nifi.properties</em> file to facilitate 
the setup of a secure NiFi instance.</p>
+</li>
+<li>
+<p>File Manager&#8201;&#8212;&#8201;The <code>file-manager</code> tool enables 
administrators to backup, install or restore a NiFi installation from 
backup.</p>
+</li>
+<li>
+<p>Flow Analyzer&#8201;&#8212;&#8201;The <code>flow-analyzer</code> tool 
produces a report that helps administrators understand the max amount of data 
which can be stored in backpressure for a given flow.</p>
+</li>
+<li>
+<p>Node Manager&#8201;&#8212;&#8201;The <code>node-manager</code> tool enables 
administrators to perform status checks on nodes as well as the ability to 
connect, disconnect, or remove nodes from the cluster.</p>
+</li>
+<li>
+<p>Notify&#8201;&#8212;&#8201;The <code>notify</code> tool enables 
administrators to send bulletins to the NiFi UI.</p>
+</li>
+<li>
+<p>S2S&#8201;&#8212;&#8201;The <code>s2s</code> tool enables administrators to 
send data into or out of NiFi flows over site-to-site.</p>
+</li>
+<li>
+<p>TLS Toolkit&#8201;&#8212;&#8201;The <code>tls-toolkit</code> utility 
generates the required keystores, truststore, and relevant configuration files 
to facilitate the setup of a secure NiFi instance.</p>
+</li>
+<li>
+<p>ZooKeeper Migrator&#8201;&#8212;&#8201;The <code>zk-migrator</code> tool 
enables administrators to:</p>
+<div class="ulist">
+<ul>
+<li>
+<p>move ZooKeeper information from one ZooKeeper cluster to another</p>
+</li>
+<li>
+<p>migrate ZooKeeper node ownership</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The utilities are executed with scripts found in the <code>bin</code> 
folder of your NiFi Toolkit installation.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+The NiFi Toolkit is downloaded separately from NiFi (see the <a 
href="https://nifi.apache.org/download.html"; target="_blank">Apache NiFi 
Downloads</a> page).
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="prerequisites-for-running-in-a-secure-environment"><a class="anchor" 
href="toolkit-guide.html#prerequisites-for-running-in-a-secure-environment"></a>Prerequisites
 for Running in a Secure Environment</h3>
+<div class="paragraph">
+<p>For secured nodes and clusters, two policies should be configured in 
advance:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Access the controller – A user that will have access to these utilities 
should be authorized in NiFi by creating an “access the controller” policy 
(<code>/controller</code>) with both view and modify rights</p>
+</li>
+<li>
+<p>Proxy user request – If not previously set, node’s identity (the DN 
value of the node’s certificate) should be authorized to proxy requests on 
behalf of a user</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>When executing either the Notify or Node Manager tools in a secured 
environment the <code>proxyDN</code> flag option should be used in order to 
properly identify the user that was authorized to execute these commands. In 
non-secure environments, or if running the status operation on the Node Manager 
tool, the flag is ignored.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="nifi_CLI"><a class="anchor" 
href="toolkit-guide.html#nifi_CLI"></a>NiFi CLI</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This tool offers a CLI focused on interacting with NiFi and NiFi Registry 
in order to automate tasks, such as deploying flows from a NIFi Registy to a 
NiFi instance or managing process groups and cluster nodes.</p>
+</div>
+<div class="sect2">
+<h3 id="usage"><a class="anchor" href="toolkit-guide.html#usage"></a>Usage</h3>
+<div class="paragraph">
+<p>The CLI toolkit can be executed in standalone mode to execute a single 
command, or interactive mode to enter an interactive shell.</p>
+</div>
+<div class="paragraph">
+<p>To execute a single command:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh &lt;command&gt; &lt;args&gt;</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To launch the interactive shell:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To show help:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh -h</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following are available commands:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>demo quick-import
+nifi current-user
+nifi cluster-summary
+nifi connect-node
+nifi delete-node
+nifi disconnect-node
+nifi get-root-id
+nifi get-node
+nifi get-nodes
+nifi offload-node
+nifi list-reg-clients
+nifi create-reg-client
+nifi update-reg-client
+nifi get-reg-client-id
+nifi pg-import
+nifi pg-start
+nifi pg-stop
+nifi pg-get-vars
+nifi pg-set-var
+nifi pg-get-version
+nifi pg-change-version
+nifi pg-get-all-versions
+nifi pg-list
+nifi pg-status
+nifi pg-get-services
+nifi pg-enable-services
+nifi pg-disable-services
+registry current-user
+registry list-buckets
+registry create-bucket
+registry delete-bucket
+registry list-flows
+registry create-flow
+registry delete-flow
+registry list-flow-versions
+registry export-flow-version
+registry import-flow-version
+registry sync-flow-versions
+registry transfer-flow-version
+session keys
+session show
+session get
+session set
+session remove
+session clear
+exit
+help</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To display extensive help for a specific command:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh &lt;command&gt; -h</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="property-argument-handling"><a class="anchor" 
href="toolkit-guide.html#property-argument-handling"></a>Property/Argument 
Handling</h3>
+<div class="paragraph">
+<p>Most commands will require specifying a baseUrl for the NiFi or NiFi 
Registry instance.</p>
+</div>
+<div class="paragraph">
+<p>An example command to list the buckets in a NiFi Registry instance would be 
the following:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh registry list-buckets -u http://localhost:18080</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In order to avoid specifying the URL (and possibly other optional arguments 
for TLS) on every command, you can define a properties file containing the 
repetitive arguments.</p>
+</div>
+<div class="paragraph">
+<p>An example properties file for a local NiFi Registry instance would look 
like the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code> baseUrl=http://localhost:18080
+ keystore=
+ keystoreType=
+ keystorePasswd=
+ keyPasswd=
+ truststore=
+ truststoreType=
+ truststorePasswd=
+ proxiedEntity=</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This properties file can then be used on a command by specifying 
<code>-p</code>:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh registry list-buckets -p 
/path/to/local-nifi-registry.properties</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You could then maintain a properties file for each environment you plan to 
interact with, such as Dev, QA, and Prod.</p>
+</div>
+<div class="paragraph">
+<p>In addition to specifying a properties file on each command, you can setup 
a default properties file to be used in the event that no properties file is 
specified.</p>
+</div>
+<div class="paragraph">
+<p>The default properties file is specified using the <code>session</code> 
concept, which persists to the users home directory in a file called 
<em>.nifi-cli.config</em>.</p>
+</div>
+<div class="paragraph">
+<p>An example of setting the default property files for NiFi would be the 
following:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh session set nifi.props /path/to/local-nifi.properties</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>An example for NiFi Registry would be the following:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh session set nifi.reg.props 
/path/to/local-nifi-registry.properties</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This will write the above properties into the <em>.nifi-cli.config</em> in 
the user&#8217;s home directory and will allow commands to be executed without 
specifying a URL or properties file:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/cli.sh registry list-buckets</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The above command will now use the <code>baseUrl</code> from 
<em>local-nifi-registry.properties</em>.</p>
+</div>
+<div class="paragraph">
+<p>The order of resolving an argument is the following:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>A direct argument overrides anything in a properties file or session</p>
+</li>
+<li>
+<p>A properties file argument (<code>-p</code>) overrides the session</p>
+</li>
+<li>
+<p>The session is used when nothing else is specified</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="security-configuration"><a class="anchor" 
href="toolkit-guide.html#security-configuration"></a>Security Configuration</h3>
+<div class="paragraph">
+<p>If NiFi and NiFi Registry are secured, then commands executed from the CLI 
will need to make a TLS connection and authenticate as a user with permissions 
to perform the desired action.</p>
+</div>
+<div class="paragraph">
+<p>Currently the CLI supports authenticating with a client certificate and an 
optional proxied-entity. A common scenario would be running the CLI from one of 
the nodes where NiFi or NiFi Registry is installed, which allows the CLI to use 
the same keystore and truststore as the NiFi/NiFi Registry instance.</p>
+</div>
+<div class="paragraph">
+<p>The security configuration can be specified per-command, or in one of the 
properties files described in the previous section.</p>
+</div>
+<div class="paragraph">
+<p>The examples below are for NiFi Registry, but the same concept applies for 
NiFi commands.</p>
+</div>
+<div class="sect3">
+<h4 id="example-secure-nifi-registry-without-proxied-entity"><a class="anchor" 
href="toolkit-guide.html#example-secure-nifi-registry-without-proxied-entity"></a>Example
 - Secure NiFi Registry without Proxied-Entity</h4>
+<div class="paragraph">
+<p>Assuming we have a keystore containing the certificate for "CN=user1, 
OU=NIFI", an example properties file would be the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code> baseUrl=https://localhost:18443
+ keystore=/path/to/keystore.jks
+ keystoreType=JKS
+ keystorePasswd=changeme
+ keyPasswd=changeme
+ truststore=/path/to/truststore.jks
+ truststoreType=JKS
+ truststorePasswd=changeme</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In this example, commands will be executed as "CN=user1, OU=NIFI". This 
user would need to be a user in NiFi Registry, and commands accessing buckets 
would be restricted to buckets this user has access to.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="example-secure-nifi-registry-with-proxied-entity"><a class="anchor" 
href="toolkit-guide.html#example-secure-nifi-registry-with-proxied-entity"></a>Example
 - Secure NiFi Registry with Proxied-Entity</h4>
+<div class="paragraph">
+<p>Assuming we have access to the keystore of NiFi Registry itself, and that 
NiFi Registry is also configured to allow Kerberos or LDAP authentication, an 
example properties file would be the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code> baseUrl=https://localhost:18443
+ keystore=/path/to/keystore.jks
+ keystoreType=JKS
+ keystorePasswd=changeme
+ keyPasswd=changeme
+ truststore=/path/to/truststore.jks
+ truststoreType=JKS
+ truststorePasswd=changeme
+ [email protected]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In this example, the certificate in <em>keystore.jks</em> would be for the 
NiFi Registry server, for example "CN=localhost, OU=NIFI". This identity would 
need to be defined as a user in NiFi Registry and given permissions to 
'Proxy'.</p>
+</div>
+<div class="paragraph">
+<p>"CN=localhost, OU=NIFI" would be proxying commands to be executed as <a 
href="mailto:[email protected]";>[email protected]</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="interactive-usage"><a class="anchor" 
href="toolkit-guide.html#interactive-usage"></a>Interactive Usage</h3>
+<div class="paragraph">
+<p>In interactive mode the tab key can be used to perform auto-completion.</p>
+</div>
+<div class="paragraph">
+<p>For example, typing tab at an empty prompt should display possible commands 
for the first argument:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt;
+demo       exit       help       nifi       registry   session</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Typing "nifi " and then a tab will show the sub-commands for NiFi:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; nifi
+cluster-summary       get-nodes             pg-enable-services    pg-set-var
+connect-node          get-reg-client-id     pg-get-all-versions   pg-start
+create-reg-client     get-root-id           pg-get-services       pg-status
+current-user          list-reg-clients      pg-get-vars           pg-stop
+delete-node           offload-node          pg-get-version        
update-reg-client
+disconnect-node       pg-change-version     pg-import
+get-node              pg-disable-services   pg-list</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Arguments that represent a path to a file, such as <code>-p</code> or when 
setting a properties file in the session, will auto-complete the path being 
typed:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; session set nifi.props /tmp/
+dir1/   dir2/   dir3/</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="output"><a class="anchor" 
href="toolkit-guide.html#output"></a>Output</h3>
+<div class="paragraph">
+<p>Most commands support the ability to specify an <code>--outputType</code> 
argument, or <code>-ot</code> for short.</p>
+</div>
+<div class="paragraph">
+<p>Currently the output type may be simple or json.</p>
+</div>
+<div class="paragraph">
+<p>The default output type in interactive mode is simple, and the default 
output type in standalone mode is json.</p>
+</div>
+<div class="paragraph">
+<p>Example of simple output for <code>list-buckets</code>:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; registry list-buckets -ot simple
+My Bucket - 3c7b7467-0012-4d8f-a918-6aa42b6b9d39</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example of json output for <code>list-buckets</code>:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; registry list-buckets -ot json
+[ {
+  "identifier" : "3c7b7467-0012-4d8f-a918-6aa42b6b9d39",
+  "name" : "My Bucket",
+  "createdTimestamp" : 1516718733854,
+  "permissions" : {
+    "canRead" : true,
+    "canWrite" : true,
+    "canDelete" : true
+  },
+  "link" : {
+    "params" : {
+      "rel" : "self"
+    },
+    "href" : "buckets/3c7b7467-0012-4d8f-a918-6aa42b6b9d39"
+  }
+} ]</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="back-referencing"><a class="anchor" 
href="toolkit-guide.html#back-referencing"></a>Back-Referencing</h3>
+<div class="paragraph">
+<p>When using the interactive CLI, a common scenario will be using an id from 
a previous result as the input to the next command. Back-referencing provides a 
shortcut for referencing a result from the previous command via a positional 
reference.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Not every command produces back-references. To determine if a command supports 
back-referencing, check the usage.
+</td>
+</tr>
+</table>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; registry list-buckets help
+Lists the buckets that the current user has access to.
+PRODUCES BACK-REFERENCES</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>A common scenario for utilizing back-references would be the following:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>User starts by exploring the available buckets in a registry instance</p>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; registry list-buckets
+#   Name           Id                                     Description
+-   ------------   ------------------------------------   -----------
+1   My Bucket      3c7b7467-0012-4d8f-a918-6aa42b6b9d39   (empty)
+2   Other Bucket   175fb557-43a2-4abb-871f-81a354f47bc2   (empty)</pre>
+</div>
+</div>
+</li>
+<li>
+<p>User then views the flows in one of the buckets using a back-reference to 
the bucket id from the previous result in position 1</p>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; registry list-flows -b &amp;1
+Using a positional back-reference for 'My Bucket'
+#   Name      Id                                     Description
+-   -------   ------------------------------------   ----------------
+1   My Flow   06acb207-d2f1-447f-85ed-9b8672fe6d30   This is my flow.</pre>
+</div>
+</div>
+</li>
+<li>
+<p>User then views the version of the flow using a back-reference to the flow 
id from the previous result in position 1</p>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; registry list-flow-versions -f &amp;1
+Using a positional back-reference for 'My Flow'
+Ver   Date                         Author                     Message
+---   --------------------------   ------------------------   
-------------------------------------
+1     Tue, Jan 23 2018 09:48 EST   anonymous                  This is the 
first version of my flow.</pre>
+</div>
+</div>
+</li>
+<li>
+<p>User deploys version 1 of the flow using back-references to the bucket and 
flow id from step 2</p>
+<div class="literalblock">
+<div class="content">
+<pre>#&gt; nifi pg-import -b &amp;1 -f &amp;1 -fv 1
+Using a positional back-reference for 'My Bucket'
+Using a positional back-reference for 'My Flow'
+9bd157d4-0161-1000-b946-c1f9b1832efd</pre>
+</div>
+</div>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>The reason step 4 was able to reference the results from step 2, is because 
the <code>list-flow-versions</code> command in step 3 does not produce 
back-references, so the results from step 2 are still available.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="adding-commands"><a class="anchor" 
href="toolkit-guide.html#adding-commands"></a>Adding Commands</h3>
+<div class="paragraph">
+<p>To add a NiFi command, create a new class that extends 
<code>AbstractNiFiCommand</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code>public class MyCommand extends 
AbstractNiFiCommand {
+
+  public MyCommand() {
+      super("my-command");
+  }
+
+  @Override
+  protected void doExecute(NiFiClient client, Properties properties)
+          throws NiFiClientException, IOException, MissingOptionException, 
CommandException {
+      // TODO implement
+  }
+
+  @Override
+  public String getDescription() {
+      return "This is my new command";
+  }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Add the new command to <code>NiFiCommandGroup</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code>commands.add(new MyCommand());</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To add a NiFi Registry command, perform the same steps, but extend from 
<code>AbstractNiFiRegistryCommand</code>, and add the command to 
<code>NiFiRegistryCommandGroup</code>.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="encrypt_config_tool"><a class="anchor" 
href="toolkit-guide.html#encrypt_config_tool"></a>Encrypt-Config Tool</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>encrypt-config</code> command line tool (invoked as 
<code>./bin/encrypt-config.sh</code> or <code>bin\encrypt-config.bat</code>) 
reads from a <em>nifi.properties</em> file with plaintext sensitive 
configuration values, prompts for a master password or raw hexadecimal key, and 
encrypts each value. It replaces the plain values with the protected value in 
the same file, or writes to a new <em>nifi.properties</em> file if 
specified.</p>
+</div>
+<div class="paragraph">
+<p>The default encryption algorithm utilized is AES/GCM 128/256-bit. 128-bit 
is used if the JCE Unlimited Strength Cryptographic Jurisdiction Policy files 
are not installed, and 256-bit is used if they are installed.</p>
+</div>
+<div class="sect2">
+<h3 id="usage-2"><a class="anchor" 
href="toolkit-guide.html#usage-2"></a>Usage</h3>
+<div class="paragraph">
+<p>To show help:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/encrypt-config.sh -h</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following are available options:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>-h</code>,<code>--help</code>                                 Prints 
this usage message</p>
+</li>
+<li>
+<p><code>-v</code>,<code>--verbose</code>                              Sets 
verbose mode (default false)</p>
+</li>
+<li>
+<p><code>-n</code>,<code>--niFiProperties &lt;arg&gt;</code>                 
The <em>nifi.properties</em> file containing unprotected config values (will be 
overwritten)</p>
+</li>
+<li>
+<p><code>-l</code>,<code>--loginIdentityProviders &lt;arg&gt;</code>         
The <em>login-identity-providers.xml</em> file containing unprotected config 
values (will be overwritten)</p>
+</li>
+<li>
+<p><code>-a</code>,<code>--authorizers &lt;arg&gt;</code>                    
The <em>authorizers.xml</em> file containing unprotected config values (will be 
overwritten)</p>
+</li>
+<li>
+<p><code>-f</code>,<code>--flowXml &lt;arg&gt;</code>                        
The <em>flow.xml.gz</em> file currently protected with old password (will be 
overwritten)</p>
+</li>
+<li>
+<p><code>-b</code>,<code>--bootstrapConf &lt;arg&gt;</code>                  
The <em>bootstrap.conf</em> file to persist master key</p>
+</li>
+<li>
+<p><code>-o</code>,<code>--outputNiFiProperties &lt;arg&gt;</code>           
The destination <em>nifi.properties</em> file containing protected config 
values (will not modify input <em>nifi.properties</em>)</p>
+</li>
+<li>
+<p><code>-i</code>,<code>--outputLoginIdentityProviders &lt;arg&gt;</code>   
The destination <em>login-identity-providers.xml</em> file containing protected 
config values (will not modify input <em>login-identity-providers.xml</em>)</p>
+</li>
+<li>
+<p><code>-u</code>,<code>--outputAuthorizers &lt;arg&gt;</code>              
The destination <em>authorizers.xml</em> file containing protected config 
values (will not modify input <em>authorizers.xml</em>)</p>
+</li>
+<li>
+<p><code>-g</code>,<code>--outputFlowXml &lt;arg&gt;</code>                  
The destination <em>flow.xml.gz</em> file containing protected config values 
(will not modify input <em>flow.xml.gz</em>)</p>
+</li>
+<li>
+<p><code>-k</code>,<code>--key &lt;arg&gt;</code>                            
The raw hexadecimal key to use to encrypt the sensitive properties</p>
+</li>
+<li>
+<p><code>-e</code>,<code>--oldKey &lt;arg&gt;</code>                         
The old raw hexadecimal key to use during key migration</p>
+</li>
+<li>
+<p><code>-p</code>,<code>--password &lt;arg&gt;</code>                       
The password from which to derive the key to use to encrypt the sensitive 
properties</p>
+</li>
+<li>
+<p><code>-w</code>,<code>--oldPassword &lt;arg&gt;</code>                    
The old password from which to derive the key during migration</p>
+</li>
+<li>
+<p><code>-r</code>,<code>--useRawKey</code>                            If 
provided, the secure console will prompt for the raw key value in hexadecimal 
form</p>
+</li>
+<li>
+<p><code>-m</code>,<code>--migrate</code>                              If 
provided, the <em>nifi.properties</em> and/or 
<em>login-identity-providers.xml</em> sensitive properties will be re-encrypted 
with a new key</p>
+</li>
+<li>
+<p><code>-x</code>,<code>--encryptFlowXmlOnly</code>                   If 
provided, the properties in <em>flow.xml.gz</em> will be re-encrypted with a 
new key but the <em>nifi.properties</em> and/or 
<em>login-identity-providers.xml</em> files will not be modified</p>
+</li>
+<li>
+<p><code>-s</code>,<code>--propsKey &lt;arg&gt;</code>                       
The password or key to use to encrypt the sensitive processor properties in 
<em>flow.xml.gz</em></p>
+</li>
+<li>
+<p><code>-A</code>,<code>--newFlowAlgorithm &lt;arg&gt;</code>               
The algorithm to use to encrypt the sensitive processor properties in 
<em>flow.xml.gz</em></p>
+</li>
+<li>
+<p><code>-P</code>,<code>--newFlowProvider &lt;arg&gt;</code>                
The security provider to use to encrypt the sensitive processor properties in 
<em>flow.xml.gz</em></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>As an example of how the tool works, assume that you have installed the 
tool on a machine supporting 256-bit encryption and with the following existing 
values in the <em>nifi.properties</em> file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code># security properties #
+nifi.sensitive.props.key=thisIsABadSensitiveKeyPassword
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+nifi.sensitive.props.additional.keys=
+
+nifi.security.keystore=/path/to/keystore.jks
+nifi.security.keystoreType=JKS
+nifi.security.keystorePasswd=thisIsABadKeystorePassword
+nifi.security.keyPasswd=thisIsABadKeyPassword
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Enter the following arguments when using the tool:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>encrypt-config.sh
+-b bootstrap.conf
+-k 0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210
+-n nifi.properties</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>As a result, the <em>nifi.properties</em> file is overwritten with 
protected properties and sibling encryption identifiers 
(<code>aes/gcm/256</code>, the currently supported algorithm):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code># security properties #
+nifi.sensitive.props.key=n2z+tTTbHuZ4V4V2||uWhdasyDXD4ZG2lMAes/vqh6u4vaz4xgL4aEbF4Y/dXevqk3ulRcOwf1vc4RDQ==
+nifi.sensitive.props.key.protected=aes/gcm/256
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+nifi.sensitive.props.additional.keys=
+
+nifi.security.keystore=/path/to/keystore.jks
+nifi.security.keystoreType=JKS
+nifi.security.keystorePasswd=oBjT92hIGRElIGOh||MZ6uYuWNBrOA6usq/Jt3DaD2e4otNirZDytac/w/KFe0HOkrJR03vcbo
+nifi.security.keystorePasswd.protected=aes/gcm/256
+nifi.security.keyPasswd=ac/BaE35SL/esLiJ||+ULRvRLYdIDA2VqpE0eQXDEMjaLBMG2kbKOdOwBk/hGebDKlVg==
+nifi.security.keyPasswd.protected=aes/gcm/256
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Additionally, the <em>bootstrap.conf</em> file is updated with the 
encryption key as follows:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code># Master key in hexadecimal format for encrypted 
sensitive configuration values
+nifi.bootstrap.sensitive.key=0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Sensitive configuration values are encrypted by the tool by default, 
however you can encrypt any additional properties, if desired.  To encrypt 
additional properties, specify them as comma-separated values in the 
<code>nifi.sensitive.props.additional.keys</code> property.</p>
+</div>
+<div class="paragraph">
+<p>If the <em>nifi.properties</em> file already has valid protected values, 
those property values are not modified by the tool.</p>
+</div>
+<div class="paragraph">
+<p>When applied to <em>login-identity-providers.xml</em> and 
<em>authorizers.xml</em>, the property elements are updated with an 
<code>encryption</code> attribute:</p>
+</div>
+<div class="paragraph">
+<p>Example of protected <em>login-identity-providers.xml</em>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code>   &lt;!-- LDAP Provider --&gt;
+   &lt;provider&gt;
+       &lt;identifier&gt;ldap-provider&lt;/identifier&gt;
+       &lt;class&gt;org.apache.nifi.ldap.LdapProvider&lt;/class&gt;
+       &lt;property name="Authentication 
Strategy"&gt;START_TLS&lt;/property&gt;
+       &lt;property name="Manager DN"&gt;someuser&lt;/property&gt;
+       &lt;property name="Manager Password" 
encryption="aes/gcm/128"&gt;q4r7WIgN0MaxdAKM||SGgdCTPGSFEcuH4RraMYEdeyVbOx93abdWTVSWvh1w+klA&lt;/property&gt;
+       &lt;property name="TLS - Keystore"&gt;&lt;/property&gt;
+       &lt;property name="TLS - Keystore Password" 
encryption="aes/gcm/128"&gt;Uah59TWX+Ru5GY5p||B44RT/LJtC08QWA5ehQf01JxIpf0qSJUzug25UwkF5a50g&lt;/property&gt;
+       &lt;property name="TLS - Keystore Type"&gt;&lt;/property&gt;
+       ...
+   &lt;/provider&gt;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example of protected <em>authorizers.xml</em>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code>   &lt;!-- LDAP User Group Provider --&gt;
+   &lt;userGroupProvider&gt;
+       &lt;identifier&gt;ldap-user-group-provider&lt;/identifier&gt;
+       
&lt;class&gt;org.apache.nifi.ldap.tenants.LdapUserGroupProvider&lt;/class&gt;
+       &lt;property name="Authentication 
Strategy"&gt;START_TLS&lt;/property&gt;
+       &lt;property name="Manager DN"&gt;someuser&lt;/property&gt;
+       &lt;property name="Manager Password" 
encryption="aes/gcm/128"&gt;q4r7WIgN0MaxdAKM||SGgdCTPGSFEcuH4RraMYEdeyVbOx93abdWTVSWvh1w+klA&lt;/property&gt;
+       &lt;property name="TLS - Keystore"&gt;&lt;/property&gt;
+       &lt;property name="TLS - Keystore Password" 
encryption="aes/gcm/128"&gt;Uah59TWX+Ru5GY5p||B44RT/LJtC08QWA5ehQf01JxIpf0qSJUzug25UwkF5a50g&lt;/property&gt;
+       &lt;property name="TLS - Keystore Type"&gt;&lt;/property&gt;
+       ...
+   &lt;/userGroupProvider&gt;</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="file-manager"><a class="anchor" 
href="toolkit-guide.html#file-manager"></a>File Manager</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The File Manager utility (invoked as <code>./bin/file-manager.sh</code> or 
<code>bin\file-manager.bat</code>) allows system administrators to take a 
backup of an existing NiFi installation, install a new version of NiFi in a 
designated location (while migrating any previous configuration settings) or 
restore an installation from a previous backup. File Manager supports NiFi 
version 1.0.0 and higher.</p>
+</div>
+<div class="sect2">
+<h3 id="usage-3"><a class="anchor" 
href="toolkit-guide.html#usage-3"></a>Usage</h3>
+<div class="paragraph">
+<p>To show help:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/file-manager.sh -h</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following are available options:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>-b</code>,<code>--backupDir &lt;arg&gt;</code>          Backup NiFi 
Directory (used with backup or restore operation)</p>
+</li>
+<li>
+<p><code>-c</code>,<code>--nifiCurrentDir &lt;arg&gt;</code>     Current NiFi 
Installation Directory (used optionally with install or restore operation)</p>
+</li>
+<li>
+<p><code>-d</code>,<code>--nifiInstallDir &lt;arg&gt;</code>     NiFi 
Installation Directory (used with install or restore operation)</p>
+</li>
+<li>
+<p><code>-h</code>,<code>--help</code>                     Print help info 
(optional)</p>
+</li>
+<li>
+<p><code>-i</code>,<code>--installFile &lt;arg&gt;</code>        NiFi Install 
File (used with install operation)</p>
+</li>
+<li>
+<p><code>-m</code>,<code>--moveRepositories</code>         Allow repositories 
to be moved to new/restored nifi directory from existing installation, if 
available (used optionally with install or restore operation)</p>
+</li>
+<li>
+<p><code>-o</code>,<code>--operation &lt;arg&gt;</code>          File 
operation (install | backup | restore)</p>
+</li>
+<li>
+<p><code>-r</code>,<code>--nifiRollbackDir &lt;arg&gt;</code>    NiFi 
Installation Directory (used with install or restore operation)</p>
+</li>
+<li>
+<p><code>-t</code>,<code>--bootstrapConf &lt;arg&gt;</code>      Current NiFi 
Bootstrap Configuration File (used optionally)</p>
+</li>
+<li>
+<p><code>-v</code>,<code>--verbose</code>                  Verbose messaging 
(optional)</p>
+</li>
+<li>
+<p><code>-x</code>,<code>--overwriteConfigs</code>         Overwrite existing 
configuration directory with upgrade changes (used optionally with install or 
restore operation)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Example usage on Linux:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre># backup NiFi installation
+# option -t may be provided to ensure backup of external boostrap.conf file
+./file-manager.sh
+-o backup
+–b /tmp/nifi_bak
+–c /usr/nifi_old
+-v</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre># install NiFi using compressed tar file into /usr/nifi directory (should 
install as /usr/nifi/nifi-1.3.0).
+# migrate existing configurations with location determined by external 
bootstrap.conf and move over repositories from nifi_old
+# options -t and -c should both be provided if migration of configurations, 
state and repositories are required
+./file-manager.sh
+-o install
+–i nifi-1.3.0.tar.gz
+–d /usr/nifi
+–c /usr/nifi/nifi_old
+-t /usr/nifi/old_conf/bootstrap.conf
+-v
+-m</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre># restore NiFi installation from backup directory and move back 
repositories
+# option -t may be provided to ensure bootstrap.conf is restored to the file 
path provided, otherwise it is placed in the
+# default directory under the rollback path (e.g. /usr/nifi_old/conf)
+./file-manager.sh
+-o restore
+–b /tmp/nifi_bak
+–r /usr/nifi_old
+–c /usr/nifi
+-m
+-v</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="expected-behavior"><a class="anchor" 
href="toolkit-guide.html#expected-behavior"></a>Expected Behavior</h3>
+<div class="sect3">
+<h4 id="backup"><a class="anchor" 
href="toolkit-guide.html#backup"></a>Backup</h4>
+<div class="paragraph">
+<p>During the backup operation a backup directory is created in a designated 
location for an existing NiFi installation. Backups will capture all critical 
files (including any internal or external configurations, libraries, scripts 
and documents) however it excludes backing up repositories and logs due to 
potential size. If configuration/library files are external from the existing 
installation folder the backup operation will capture those as well.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="install"><a class="anchor" 
href="toolkit-guide.html#install"></a>Install</h4>
+<div class="paragraph">
+<p>During the install operation File Manager will perform installation using 
the designated NiFi binary file (either tar.gz or zip file) to create a new 
installation or migrate an existing nifi installation to a new one.  
Installation can optionally move repositories (if located within the 
configuration folder of the current installation) to the new installation as 
well as migrate configuration files to the newer installation.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="restore"><a class="anchor" 
href="toolkit-guide.html#restore"></a>Restore</h4>
+<div class="paragraph">
+<p>The restore operation allows an existing installation to revert back to a 
previous installation.  Using an existing backup directory (created from the 
backup operation) the FileManager utility will restore libraries, scripts and 
documents as well as revert to previous configurations.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+If repositories were changed due to the installation of a newer version of 
NiFi these may no longer be compatible during restore.  In that scenario 
exclude the <code>-m</code> option to ensure new repositories will be created 
or, if repositories live outside of the NiFi directory, remove them so they can 
be recreated on startup after restore.
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="flow-analyzer"><a class="anchor" 
href="toolkit-guide.html#flow-analyzer"></a>Flow Analyzer</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>flow-analyzer</code> tool (invoked as 
<code>./bin/flow-analyzer.sh</code> or <code>bin\flow-analyzer.bat</code>) 
analyzes the <em>flow.xml.gz</em> file and reports:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Total Bytes Utilized by the System</p>
+</li>
+<li>
+<p>Min/Max Back Pressure Size</p>
+</li>
+<li>
+<p>Average Back Pressure Size</p>
+</li>
+<li>
+<p>Min/Max Flowfile Queue Size</p>
+</li>
+<li>
+<p>Average Flowfile Queue Size</p>
+</li>
+</ul>
+</div>
+<div class="sect2">
+<h3 id="usage-4"><a class="anchor" 
href="toolkit-guide.html#usage-4"></a>Usage</h3>
+<div class="paragraph">
+<p>To execute the <code>flow-analyzer</code> tool:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>flow-analyzer.sh &lt;path to flow.xml.gz&gt;</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>$ ./flow-analyzer.sh /Users/nifiuser/nifi-1.8.0/conf/flow.xml.gz
+Using flow=/Users/nifiuser/nifi-1.8.0/conf/flow.xml.gz
+Total Bytes Utilized by System=1518 GB
+Max Back Pressure Size=1 GB
+Min Back Pressure Size=1 GB
+Average Back Pressure Size=2.504950495 GB
+Max Flowfile Queue Size=10000
+Min Flowfile Queue Size=10000
+Avg Flowfile Queue Size=10000.000000000</pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="node-manager"><a class="anchor" 
href="toolkit-guide.html#node-manager"></a>Node Manager</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Node manager (invoked as <code>./bin/node-manager.sh</code> or 
<code>bin\node-manager.bat</code>) supports connecting, disconnecting and 
removing a node when in a cluster (an error message displays if the node is not 
part of a cluster) as well as obtaining the status of a node.  When nodes are 
disconnected from a cluster and need to be connected or removed, a list of urls 
of connected nodes should be provided to send the required command to the 
active cluster.  Node Manager supports NiFi version 1.0.0 and higher.</p>
+</div>
+<div class="sect2">
+<h3 id="usage-5"><a class="anchor" 
href="toolkit-guide.html#usage-5"></a>Usage</h3>
+<div class="paragraph">
+<p>To show help:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/node-manager.sh -h</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following are available options:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>-b</code>,<code>--bootstrapConf &lt;arg&gt;</code>     Existing 
Bootstrap Configuration file (required)</p>
+</li>
+<li>
+<p><code>-d</code>,<code>--nifiInstallDir &lt;arg&gt;</code>    NiFi Root 
Folder (required)</p>
+</li>
+<li>
+<p><code>-h</code>,<code>--help</code>                    Help Text 
(optional)</p>
+</li>
+<li>
+<p><code>-o</code>, <code>--operation &lt;arg&gt;</code>        Operations 
supported: status, connect (cluster), disconnect (cluster), remove (cluster)</p>
+</li>
+<li>
+<p><code>-p</code>,<code>--proxyDN &lt;arg&gt;</code>           Proxy or User 
DN (required for secured nodes doing connect, disconnect and remove 
operations)</p>
+</li>
+<li>
+<p><code>-u</code>,<code>--clusterUrls &lt;arg&gt;</code>       Comma 
delimited list of active urls for cluster (optional). Not required for 
disconnecting a node yet will be needed when connecting or removing from a 
cluster</p>
+</li>
+<li>
+<p><code>-v</code>,<code>--verbose</code>                 Verbose messaging 
(optional)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>To connect, disconnect, or remove a node from a cluster:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>node-manager.sh -d {$NIFI_HOME} –b { nifi bootstrap file path}
+-o {remove|disconnect|connect|status} [-u {url list}] [-p {proxy name}] 
[-v]</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example usage on Linux:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre># disconnect without cluster url list
+./node-manager.sh
+-d /usr/nifi/nifi_current
+-b /usr/nifi/nifi_current/conf/bootstrap.conf
+-o disconnect
+–p ydavis@nifi
+-v</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>#with url list
+./node-manager.sh
+-d /usr/nifi/nifi_current
+-b /usr/nifi/nifi_current/conf/bootstrap.conf
+-o connect
+-u 'http://nifi-server-1:8080,http://nifi-server-2:8080'
+-v</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example usage on Windows:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>node-manager.bat
+-d "C:\\Program Files\\nifi\\nifi-1.2.0-SNAPSHOT"
+-b "C:\\Program Files\\nifi\\nifi-1.2.0-SNAPSHOT\\conf\\bootstrap.conf"
+-o disconnect
+–v</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="expected-behavior-2"><a class="anchor" 
href="toolkit-guide.html#expected-behavior-2"></a>Expected Behavior</h3>
+<div class="sect3">
+<h4 id="status"><a class="anchor" 
href="toolkit-guide.html#status"></a>Status</h4>
+<div class="paragraph">
+<p>To obtain information on UI availability of a node, the status operation 
can be used to determine if the node is running. If the <code>–u 
(clusterUrls)</code> option is not provided the current node url is checked 
otherwise the urls provided will be checked.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="disconnect"><a class="anchor" 
href="toolkit-guide.html#disconnect"></a>Disconnect</h4>
+<div class="paragraph">
+<p>When a node is disconnected from the cluster, the node itself should appear 
as disconnected and the cluster should have a bulletin indicating the 
disconnect request was received. The cluster should also show <em>n-1/n</em> 
nodes available in the cluster. For example, if 1 node is disconnected from a 
3-node cluster, then "2 of 3" nodes should show on the remaining nodes in the 
cluster.  Changes to the flow should not be allowed on the cluster with a 
disconnected node.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="connect"><a class="anchor" 
href="toolkit-guide.html#connect"></a>Connect</h4>
+<div class="paragraph">
+<p>When the connect command is executed to reconnect a node to a cluster, upon 
completion the node itself should show that it has rejoined the cluster by 
showing <em>n/n</em> nodes. Previously it would have shown Disconnected. Other 
nodes in the cluster should receive a bulletin of the connect request and also 
show <em>n/n</em> nodes allowing for changes to be allowed to the flow.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="remove"><a class="anchor" 
href="toolkit-guide.html#remove"></a>Remove</h4>
+<div class="paragraph">
+<p>When the remove command is executed the node should show as disconnected 
from a cluster.  The nodes remaining in the cluster should show 
<em>n-1/n-1</em> nodes. For example, if 1 node is removed from a 3-node 
cluster, then the remaining 2 nodes should show "2 of 2" nodes.  The cluster 
should allow a flow to be adjusted.  The removed node can rejoin the cluster if 
restarted and the flow for the cluster has not changed. If the flow was 
changed, the flow template of the removed node should be deleted before 
restarting the node to allow it to obtain the cluster flow (otherwise an 
uninheritable flow file exception may occur).</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="notify"><a class="anchor" 
href="toolkit-guide.html#notify"></a>Notify</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Notify (invoked as <code>./bin/notify.sh</code> or 
<code>bin\notify.bat</code>) allows administrators to send messages as 
bulletins to NiFi.  Notify is supported on NiFi version 1.2.0 and higher.</p>
+</div>
+<div class="sect2">
+<h3 id="usage-6"><a class="anchor" 
href="toolkit-guide.html#usage-6"></a>Usage</h3>
+<div class="paragraph">
+<p>To show help:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/notify.sh -h</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following are available options:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>-b</code>,<code>--bootstrapConf &lt;arg&gt;</code>      Existing 
Bootstrap Configuration file (required)</p>
+</li>
+<li>
+<p><code>-d</code>,<code>--nifiInstallDir &lt;arg&gt;</code>     NiFi Root 
Folder (required)</p>
+</li>
+<li>
+<p><code>-h</code>,<code>--help</code>                     Help Text 
(optional)</p>
+</li>
+<li>
+<p><code>-l</code>,<code>--level &lt;arg&gt;</code>              Status level 
of bulletin – <code>INFO</code>, <code>WARN</code>, <code>ERROR</code></p>
+</li>
+<li>
+<p><code>-m</code>,<code>--message &lt;arg&gt;</code>            Bulletin 
message (required)</p>
+</li>
+<li>
+<p><code>-p</code>,<code>--proxyDN &lt;arg&gt;</code>            Proxy or User 
DN (required for secured nodes)</p>
+</li>
+<li>
+<p><code>-v</code>,<code>--verbose</code>                  Verbose messaging 
(optional)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>To send notifications:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>notify.sh -d {$NIFI_HOME} –b {nifi bootstrap file path} -m {message} 
[-l {level}] [-v]</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example usage on Linux:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./notify.sh -d /usr/nifi/nifi_current -b 
/usr/nifi/nifi_current/conf/bootstrap.conf -m "Test Message Server 1" -l "WARN" 
–p “ydavis@nifi” -v</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Example usage on Windows:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>notify.bat -v -d "C:\\Program Files\\nifi\\nifi-1.2.0-SNAPSHOT" -b 
"C:\\Program Files\\nifi\\nifi-1.2.0-SNAPSHOT\\conf\\bootstrap.conf" -m "Test 
Message Server 1" -v</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Executing the above command line should result in a bulletin appearing in 
NiFi:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/nifi-notifications.png" alt="NiFi Notifications">
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="s2s"><a class="anchor" href="toolkit-guide.html#s2s"></a>S2S</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>S2S is a command line tool (invoked as <code>./bin/s2s.sh</code> or 
<code>bin\s2s.bat</code>) that can either read a list of DataPackets from stdin 
to send over site-to-site or write the received DataPackets to stdout.</p>
+</div>
+<div class="sect2">
+<h3 id="usage-7"><a class="anchor" 
href="toolkit-guide.html#usage-7"></a>Usage</h3>
+<div class="paragraph">
+<p>To show help:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>./bin/s2s.sh -h</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following are available options:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>--batchCount &lt;arg&gt;</code>             Number of flow files in a 
batch</p>
+</li>
+<li>
+<p><code>--batchDuration &lt;arg&gt;</code>          Duration of a batch</p>
+</li>
+<li>
+<p><code>--batchSize &lt;arg&gt;</code>              Size of flow files in a 
batch</p>
+</li>
+<li>
+<p><code>-c</code>,<code>--compression</code>             Use compression</p>
+</li>
+<li>
+<p><code>-d</code>,<code>--direction</code>               Direction (valid 
directions: <code>SEND</code>, <code>RECEIVE</code>) (default: 
<code>SEND</code>)</p>
+</li>
+<li>
+<p><code>-h</code>,<code>--help</code>                    Help Text 
(optional)</p>
+</li>
+<li>
+<p><code>-i</code>,<code>--portIdentifier &lt;arg&gt;</code>    Port id</p>
+</li>
+<li>
+<p><code>--keystore &lt;arg&gt;</code>               Keystore</p>
+</li>
+<li>
+<p><code>--keyStorePassword &lt;arg&gt;</code>       Keystore password</p>
+</li>
+<li>
+<p><code>--keyStoreType &lt;arg&gt;</code>           Keystore type (default: 
<code>JKS</code>)</p>
+</li>
+<li>
+<p><code>-n</code>,<code>--portName</code>                Port name</p>
+</li>
+<li>
+<p><code>-p</code>,<code>--transportProtocol</code>       Site to site 
transport protocol (default: <code>RAW</code>)</p>
+</li>
+<li>
+<p><code>--peerPersistenceFile &lt;arg&gt;</code>    File to write peer 
information to so it can be recovered on restart</p>
+</li>
+<li>
+<p><code>--penalization &lt;arg&gt;</code>           Penalization period</p>
+</li>
+<li>
+<p><code>--proxyHost &lt;arg&gt;</code>              Proxy hostname</p>
+</li>
+<li>
+<p><code>--proxyPassword &lt;arg&gt;</code>          Proxy password</p>
+</li>
+<li>
+<p><code>--proxyPort &lt;arg&gt;</code>              Proxy port</p>
+</li>
+<li>
+<p><code>--proxyUsername &lt;arg&gt;</code>          Proxy username</p>
+</li>
+<li>
+<p><code>--timeout &lt;arg&gt;</code>                Timeout</p>
+</li>
+<li>
+<p><code>--trustStore &lt;arg&gt;</code>             Truststore</p>
+</li>
+<li>
+<p><code>--trustStorePassword &lt;arg&gt;</code>     Truststore password</p>
+</li>
+<li>
+<p><code>--trustStoreType &lt;arg&gt;</code>         Truststore type (default: 
<code>JKS</code>)</p>
+</li>
+<li>
+<p><code>-u,--url &lt;arg&gt;</code>                 NiFI URL to connect to 
(default: <code><a href="http://localhost:8080/nifi"; 
class="bare">http://localhost:8080/nifi</a></code>)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The s2s cli input/output format is a JSON list of DataPackets.  They can 
have the following formats:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>[{"attributes":{"key":"value"},"data":"aGVsbG8gbmlmaQ=="}]</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where data is the base64 encoded value of the FlowFile content (always used 
for received data) or:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>[{"attributes":{"key":"value"},"dataFile":"/Users/pvillard/Documents/GitHub/nifi/nifi-toolkit/nifi-toolkit-assembly/target/nifi-toolkit-1.9.0-SNAPSHOT-bin/nifi-toolkit-1.9.0-SNAPSHOT/bin/EXAMPLE"}]</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where dataFile is a file to read the FlowFile content from.</p>
+</div>

[... 1127 lines stripped ...]

Reply via email to