{"action":"closed","number":1806,"pull_request":{"url":"https://api.github.com/repos/mesosphere/universe/pulls/1806","id":181928583,"html_url":"https://github.com/mesosphere/universe/pull/1806","diff_url":"https://github.com/mesosphere/universe/pull/1806.diff","patch_url":"https://github.com/mesosphere/universe/pull/1806.patch","issue_url":"https://api.github.com/repos/mesosphere/universe/issues/1806","number":1806,"state":"closed","locked":false,"title":"Release nifi 0.1.0-1.5.0 (automated commit)\n\n","user":{"login":"somnathmesos","id":35599370,"avatar_url":"https://avatars3.githubusercontent.com/u/35599370?v=4","gravatar_id":"","url":"https://api.github.com/users/somnathmesos","html_url":"https://github.com/somnathmesos","followers_url":"https://api.github.com/users/somnathmesos/followers","following_url":"https://api.github.com/users/somnathmesos/following{/other_user}","gists_url":"https://api.github.com/users/somnathmesos/gists{/gist_id}","starred_url":"https://api.github.com/users/somnathmesos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/somnathmesos/subscriptions","organizations_url":"https://api.github.com/users/somnathmesos/orgs","repos_url":"https://api.github.com/users/somnathmesos/repos","events_url":"https://api.github.com/users/somnathmesos/events{/privacy}","received_events_url":"https://api.github.com/users/somnathmesos/received_events","type":"User","site_admin":false},"body":"Release nifi 0.1.0-1.5.0 (automated commit)\n\nDescription:\ndc/os nifi service release 0.1.0\n\nSource URL: https://nifi-bucket.s3.amazonaws.com/autodelete7d/nifi/20180416-165341-Y2baDMflb4vE7kMI/stub-universe-nifi.json\n\nChanges between revisions 2 => 100:\n0 files added: []\n0 files removed: []\n4 files changed:\n\n```\n--- 2/config.json\n+++ 100/config.json\n@@ -1,90 +1,1086 @@\n {\n-    \"type\": \"object\",\n-    \"properties\": {\n-        \"service\": {\n-            \"description\": \"Configuration properties for the NIFI service for DC/OS.\",\n-            \"type\": \"object\",\n-            \"properties\": {\n-                \"name\": {\n-                    \"description\": \"The name of the service to display in the DC/OS dashboard.\",\n-                    \"type\": \"string\",\n-                    \"default\": \"nifi\"\n+  \"type\": \"object\",\n+  \"properties\": {\n+    \"service\": {\n+      \"type\": \"object\",\n+      \"description\": \"DC/OS service configuration properties\",\n+      \"properties\": {\n+        \"name\": {\n+          \"type\": \"string\",\n+          \"description\": \"Apache NiFi\",\n+          \"default\": \"nifi\"\n+        },\n+        \"user\": {\n+          \"type\": \"string\",\n+          \"description\": \"The user that the service will run as.\",\n+          \"default\": \"nobody\"\n+        },\n+        \"service_account\": {\n+          \"type\": \"string\",\n+          \"description\": \"The service account for DC/OS service authentication. This is typically left empty to use the default unless service authentication is needed. The value given here is passed as the principal of Mesos framework.\",\n+          \"default\": \"\"\n+        },\n+        \"service_account_secret\": {\n+          \"type\": \"string\",\n+          \"description\": \"Name of the Secret Store credentials to use for DC/OS service authentication. This should be left empty unless service authentication is needed.\",\n+          \"default\": \"\"\n+        },\n+        \"virtual_network_enabled\": {\n+          \"type\": \"boolean\",\n+          \"description\": \"Enable virtual networking\",\n+          \"default\": false\n+        },\n+        \"virtual_network_name\": {\n+          \"type\": \"string\",\n+          \"description\": \"The name of the virtual network to join\",\n+          \"default\": \"dcos\"\n+        },\n+        \"virtual_network_plugin_labels\": {\n+          \"type\": \"string\",\n+          \"description\": \"Labels to pass to the virtual network plugin. Comma-separated key:value pairs. For example: k_0:v_0,k_1:v_1,...,k_n:v_n\",\n+          \"default\": \"\"\n+        },\n+        \"mesos_api_version\": {\n+          \"type\": \"string\",\n+          \"title\": \"Apache Mesos Scheduler API version [V0, V1]\",\n+          \"description\": \"Configures the Mesos API version to use. Possible values: V0 (non-HTTP), V1 (HTTP)\",\n+          \"enum\": [\n+            \"V0\",\n+            \"V1\"\n+          ],\n+          \"default\": \"V1\"\n+        },\n+        \"log_level\": {\n+          \"type\": \"string\",\n+          \"title\": \"DC/OS Service Log Level\",\n+          \"description\": \"The log level for the DC/OS service.\",\n+          \"enum\": [\n+            \"OFF\",\n+            \"FATAL\",\n+            \"ERROR\",\n+            \"WARN\",\n+            \"INFO\",\n+            \"DEBUG\",\n+            \"TRACE\",\n+            \"ALL\"\n+          ],\n+          \"default\": \"INFO\"\n+        },\n+        \"placement_constraint\": {\n+          \"type\": \"string\",\n+          \"description\": \"Placement constraint for Nifi nodes. Example: [[\\\"hostname\\\", \\\"UNIQUE\\\"]]\",\n+          \"default\": \"[[\\\"hostname\\\", \\\"UNIQUE\\\"]]\",\n+          \"media\": {\n+            \"type\": \"application/x-zone-constraints+json\"\n+          }\n+        },\n+        \"deploy_strategy\": {\n+          \"enum\": [\n+            \"serial\",\n+            \"parallel\"\n+          ],\n+          \"description\": \"Deployment phase strategy. See documentation. [serial, parallel]\",\n+          \"default\": \"serial\"\n+        },\n+        \"security\": {\n+          \"description\": \"Nifi security settings\",\n+          \"type\": \"object\",\n+          \"properties\": {\n+            \"tls_ssl\": {\n+              \"type\": \"object\",\n+              \"description\": \"TLS and SSL Authn/z configuration properties.\",\n+              \"properties\": {\n+                \"enable\": {\n+                  \"description\": \"Enable TLS and SSL authentication.\",\n+                  \"type\": \"boolean\",\n+                  \"default\": false\n+                }\n+              }\n+            },\n+            \"kerberos\": {\n+              \"type\": \"object\",\n+              \"description\": \"Kerberos configuration properties.\",\n+              \"properties\": {\n+                \"enabled\": {\n+                  \"description\": \"Enable kerberos authentication.\",\n+                  \"type\": \"boolean\",\n+                  \"default\": false\n                 },\n-                \"cpus\": {\n-                    \"description\": \"CPU shares to allocate to each Nifi master.\",\n-                    \"type\": \"number\",\n-                    \"default\": 1.0,\n-                    \"minimum\": 0.1\n+                \"kdc\": {\n+                  \"description\": \"KDC settings for Kerberos\",\n+                  \"type\": \"object\",\n+                  \"properties\": {\n+                    \"hostname\": {\n+                      \"type\": \"string\",\n+                      \"description\": \"The name or address of a host running a KDC for the realm.\",\n+                      \"default\": \"kdc.marathon.autoip.dcos.thisdcos.directory\"\n+                    },\n+                    \"port\": {\n+                      \"type\": \"integer\",\n+                      \"description\": \"The port of the host running a KDC for that realm.\",\n+                      \"default\": 2500\n+                    }\n+                  }\n                 },\n-                \"mem\": {\n-                    \"description\": \"Memory (in MB) to allocate to each Nifi instance.\",\n-                    \"type\": \"number\",\n-                    \"default\": 2048.0,\n-                    \"minimum\": 1024.0\n+                \"realm\": {\n+                  \"type\": \"string\",\n+                  \"description\": \"The Kerberos realm used to render the principal of Nifi tasks.\",\n+                  \"default\": \"LOCAL\"\n                 },\n-                \"instances\": {\n-                    \"description\": \"Amount of nifi instances\",\n-                    \"type\": \"number\",\n-                    \"default\": 1,\n-                    \"minimum\": 1\n+                \"primary\": {\n+                  \"type\": \"string\",\n+                  \"description\": \"The Kerberos primary used by Kafka tasks.  The full principal will be <service.kerberos.primary>/<mesos_dns_address>@<service.kerberos.realm>\",\n+                  \"default\": \"nifi\"\n+                },\n+                \"keytab_secret\": {\n+                  \"type\": \"string\",\n+                  \"description\": \"The name of the DC/OS secret storing the keytab\",\n+                  \"default\": \"__dcos_base64___keytab\"\n+                },\n+                \"authentication_expiration\": {\n+                  \"type\": \"string\",\n+                  \"title\": \"Authentication Expiration\",\n+                  \"description\": \"The duration of how long the user authentication is valid for. If the user never logs out, they will be required to log back in following this duration\",\n+                  \"default\": \"12 hours\"\n+                },\n+                \"debug\": {\n+                  \"type\": \"boolean\",\n+                  \"description\": \"Turn debug Kerberos logging on or off to assist in diagnosing issues with Kerberos authentication.\",\n+                  \"default\": false\n+                },\n+                \"service_principal\": {\n+                  \"type\": \"string\",\n+                  \"title\": \"Kerberos Service Principal\",\n+                  \"description\": \"The name of the NiFi Kerberos service principal\",\n+                  \"default\": \"nifiprincipal@LOCAL\"\n+                },\n+                \"user_principal\": {\n+                  \"type\": \"string\",\n+                  \"title\": \"Kerberos User Principal\",\n+                  \"description\": \"The name of the NiFi Kerberos User principal\",\n+                  \"default\": \"nifiadmin@LOCAL\"\n+                },\n+                \"cn_dn_node_identity\": {\n+                  \"type\": \"string\",\n+                  \"description\": \"Initial Node Identity for TLS\",\n+                  \"default\": \"demonifi\"\n                 }\n+              }\n             }\n-        },\n-        \"nifi\": {\n-            \"description\": \"NIFI settings which will be added to nifi.properties file.\",\n-            \"type\": \"object\",\n-            \"properties\": {\n-                \"banner\": {\n-                    \"description\": \"This is banner text that may be configured to display at the top of the User Interface. It is blank by default\",\n-                    \"type\": \"string\",\n-                    \"default\": \"\"\n-                },\n-                \"zookeeper\": {\n-                    \"description\": \"The Connect String that is needed to connect to Apache ZooKeeper. This is a comma-separted list of hostname:port pairs.\",\n-                    \"type\": \"string\",\n-                    \"default\": \"leader.mesos:2181\"\n-                },\n-                \"zookeeper-root\": {\n-                    \"description\": \"The root ZNode that should be used in ZooKeeper. ZooKeeper provides a directory-like structure for storing data. Each directory in this structure is referred to as a ZNode. This denotes the root ZNode, or directory, that should be used for storing data. The default value is /nifi. This is important to set correctly, as which cluster the NiFi instance attempts to join is determined by which ZooKeeper instance it connects to and the ZooKeeper Root Node that is specified.\",\n-                    \"type\": \"string\",\n-                    \"default\": \"/nifi\"\n-                },                \n-                \"cluster\": {\n-                    \"description\": \"Set this to true if the instance is a node in a cluster. The default value is false.\",\n-                    \"type\": \"boolean\",\n-                    \"default\": false\n-                }\n-            }\n-        },\n-        \"networking\": {\n-            \"description\": \"Networking-related configuration properties for NIFI on DC/OS.\",\n-            \"type\": \"object\",\n-            \"properties\": {\n-                \"service-port\": {\n-                    \"description\": \"Port to be used when exposing the service in Marathon-LB.\",\n-                    \"type\": \"string\",\n-                    \"default\": \"10102\"\n-                },\n-                \"virtual-host\": {\n-                    \"description\": \"The virtual host address to configure for integration with Marathon-lb.\",\n-                    \"type\": \"string\"\n-                }\n-            }\n-        },\n-        \"advanced\": {\n-            \"description\": \"Advanced configuration properties for the Nifi service. Under normal circumstances, you shouldn't need to modify these values.\",\n-            \"type\": \"object\",\n-            \"properties\": {\n-                \"docker-image\": {\n-                    \"description\": \"The Docker image to use for the Nifi service.\",\n-                    \"type\": \"string\",\n-                    \"default\": \"mderela/apache-nifi:1.3.0\"\n-                },\n-                \"docker-credentials-uri\": {\n-                    \"description\": \"An optional URI to be fetched and extracted that contains docker credentials (e.g. file:///etc/docker/docker.tar.gz).\",\n-                    \"type\": \"string\"\n-                }\n-            }\n-        }\n+          }\n+        }\n+      },\n+      \"required\": [\n+        \"name\",\n+        \"user\"\n+      ]\n+    },\n+    \"node\": {\n+      \"type\": \"object\",\n+      \"title\": \"NiFi Cluster Node Resources Configuration \",\n+      \"description\": \"NiFi Cluster Node Resources Configuration \",\n+      \"properties\": {\n+        \"count\": {\n+          \"type\": \"integer\",\n+          \"title\": \"NiFi Node Count\",\n+          \"description\": \"Number of NiFi nodes to run\",\n+          \"default\": 2\n+        },\n+        \"cpus\": {\n+          \"type\": \"number\",\n+          \"title\": \"CPU Shares\",\n+          \"description\": \"NiFi Node CPU Requirements\",\n+          \"default\": 1\n+        },\n+        \"mem\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Memory size (MB)\",\n+          \"description\": \"NiFi Node Memory Requirements (in MB)\",\n+          \"default\": 4096\n+        },\n+        \"vip_prefix\": {\n+          \"type\": \"string\",\n+          \"title\": \"NiFi VIP Prefix\",\n+          \"description\": \"Prefix for the NiFi (Minuteman) Named VIP\",\n+          \"default\": \"web\"\n+        },\n+        \"rlimit_nofile_soft\": {\n+          \"type\": \"integer\",\n+          \"title\": \"NiFi RLIMIT NOFILE Soft\",\n+          \"description\": \"Maximum File Handles (Soft) Limit\",\n+          \"default\": 50000\n+        },\n+        \"rlimit_nofile_hard\": {\n+          \"type\": \"integer\",\n+          \"title\": \"NiFi RLIMIT NOFILE Hard\",\n+          \"description\": \"Maximum File Handles (Hard) Limit\",\n+          \"default\": 50000\n+        },\n+        \"rlimit_nproc_soft\": {\n+          \"type\": \"integer\",\n+          \"title\": \"NiFi RLIMIT NPROC Soft\",\n+          \"description\": \"Maximum Forked Processes (Soft) Limit\",\n+          \"default\": 10000\n+        },\n+        \"rlimit_nproc_hard\": {\n+          \"type\": \"integer\",\n+          \"title\": \"NiFi RLIMIT NPROC Hard\",\n+          \"description\": \"Maximum Forked Processes (Hard) Limit\",\n+          \"default\": 10000\n+        },\n+        \"disk_type\": {\n+          \"enum\": [\n+            \"ROOT\",\n+            \"MOUNT\"\n+          ],\n+          \"description\": \"Disk type to be used for storing node data. See documentation. [ROOT, MOUNT]\",\n+          \"default\": \"ROOT\"\n+        },\n+        \"disk_size\": {\n+          \"type\": \"integer\",\n+          \"description\": \"Broker disk requirements (only respected with persistent volumes in MB)\",\n+          \"default\": 1000\n+        },\n+        \"kill_grace_period\": {\n+          \"description\": \"The number of seconds of grace to await a clean shutdown following SIGTERM before sending SIGKILL, default: `0`\",\n+          \"type\": \"integer\",\n+          \"default\": 20\n+        },\n+        \"nifi_bootstrap_jvm_min\": {\n+          \"description\": \"Minimum Java Heap size in MB\",\n+          \"type\": \"integer\",\n+          \"default\": 512\n+        },\n+        \"nifi_bootstrap_jvm_max\": {\n+          \"description\": \"Maximum Java Heap size in MB\",\n+          \"type\": \"integer\",\n+          \"default\": 512\n+        }\n+      },\n+      \"required\": [\n+        \"count\",\n+        \"cpus\",\n+        \"mem\",\n+        \"disk_type\",\n+        \"disk_size\"\n+      ]\n+    },\n+    \"Advanced_Security\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#security-properties\",\n+      \"description\": \"These properties pertain to various security features in NiFi\",\n+      \"properties\": {\n+        \"sensitive_props_key\": {\n+          \"type\": \"string\",\n+          \"title\": \"Sensitive Properties Encryption Key\",\n+          \"description\": \"This is the password used to encrypt any sensitive property values that are configured in processors\",\n+          \"default\": \"\"\n+        },\n+        \"sensitive_props_key_protected\": {\n+          \"type\": \"string\",\n+          \"title\": \"Sensitive Properties Encryption Key Protection\",\n+          \"description\": \"This is the encryption key protection (aes/gcm/256)\",\n+          \"default\": \"\"\n+        },\n+        \"sensitive_props_algorithm\": {\n+          \"type\": \"string\",\n+          \"title\": \"Sensitive Properties Encryption Algorithm\",\n+          \"description\": \"The algorithm used to encrypt sensitive properties\",\n+          \"default\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n+        },\n+        \"sensitive_props_provider\": {\n+          \"type\": \"string\",\n+          \"title\": \"Sensitive Properties Encryption Provider\",\n+          \"description\": \"The sensitive property provider\",\n+          \"default\": \"BC\"\n+        },\n+        \"sensitive_props_additional_keys\": {\n+          \"type\": \"string\",\n+          \"title\": \"Sensitive Properties Additional Keys\",\n+          \"description\": \"The comma separated list of properties to encrypt in addition to the default sensitive properties (see Encrypt-Config Tool)\",\n+          \"default\": \"\"\n+        },\n+        \"need_client_auth\": {\n+          \"type\": \"string\",\n+          \"title\": \"Need Client Auth\",\n+          \"description\": \"This indicates whether client authentication in the cluster protocol\",\n+          \"default\": \"\"\n+        },\n+        \"user_authorizer\": {\n+          \"type\": \"string\",\n+          \"title\": \"User Authorizer\",\n+          \"description\": \"Specifies which of the configured Authorizers in the authorizers.xml file to use\",\n+          \"default\": \"file-provider\"\n+        },\n+        \"user_login_identity_provider\": {\n+          \"type\": \"string\",\n+          \"title\": \"User Login Identity Provider\",\n+          \"description\": \"This indicates what type of login identity provider to use\",\n+          \"default\": \"\"\n+        },\n+        \"ocsp_responder_url\": {\n+          \"type\": \"string\",\n+          \"title\": \"OCSP Responder URL\",\n+          \"description\": \"This is the URL for the Online Certificate Status Protocol (OCSP) responder if one is being used\",\n+          \"default\": \"\"\n+        },\n+        \"ocsp_responder_certificate\": {\n+          \"type\": \"string\",\n+          \"title\": \"OCSP Responder Certificate\",\n+          \"description\": \"This is the location of the OCSP responder certificate if one is being used\",\n+          \"default\": \"\"\n+        }\n+      }\n+    },\n+    \"identity\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#identity-mapping-properties\",\n+      \"title\": \"Identity Normalization Configuration\",\n+      \"description\": \"These properties can be utilized to normalize user identities. When implemented, identities authenticated by different identity providers (certificates, LDAP, Kerberos) are treated the same internally in NiFi. As a result, duplicate users are avoided and user-specific configurations such as authorizations only need to be setup once per user\",\n+      \"properties\": {\n+        \"mapping_pattern_dn\": {\n+          \"type\": \"string\",\n+          \"title\": \"Identity Mapping (Regex) for Certificates\",\n+          \"description\": \"Identity mapping regex for certificates\",\n+          \"default\": \"^CN=(.*?), OU=(.*?), O=(.*?), L=(.*?), ST=(.*?), C=(.*?)$\"\n+        },\n+        \"mapping_value_dn\": {\n+          \"type\": \"string\",\n+          \"title\": \"Identity Normalization (Substituion) for LDAP\",\n+          \"description\": \"Identity normalization for LDAP\",\n+          \"default\": \"$1@$2\"\n+        },\n+        \"mapping_pattern_kerb\": {\n+          \"type\": \"string\",\n+          \"title\": \"Identity Mapping (Regex) for Kerberos\",\n+          \"description\": \"Identity mapping regex for Kerberos\",\n+          \"default\": \"^(.*?)/instance@(.*?)$\"\n+        },\n+        \"mapping_value_kerb\": {\n+          \"type\": \"string\",\n+          \"title\": \"Identity Normalization (Substitution) for Kerberos\",\n+          \"description\": \"Identity normalization for Kerberos\",\n+          \"default\": \"$1@$2\"\n+        }\n+      }\n+    },\n+    \"cluster\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#cluster-common-properties\",\n+      \"title\": \"Cluster Configuration\",\n+      \"description\": \"NiFi Cluster Configuration\",\n+      \"properties\": {\n+        \"protocol_heartbeat_interval\": {\n+          \"type\": \"string\",\n+          \"title\": \"Protocol Heartbeat Interval\",\n+          \"description\": \"The interval at which nodes should emit heartbeats to the Cluster Coordinator\",\n+          \"default\": \"5 secs\"\n+        },\n+        \"is_node\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Cluster Node?\",\n+          \"description\": \"Set this to true if the instance is a node in a cluster\",\n+          \"default\": true\n+        },\n+        \"node_protocol_port\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Node Protocol Port\",\n+          \"description\": \"The node's protocol port\",\n+          \"default\": 12000\n+        },\n+        \"node_protocol_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Node Protocol Threads\",\n+          \"description\": \"The number of threads that should be used to communicate with other nodes in the cluster\",\n+          \"default\": 10\n+        },\n+        \"node_event_history_size\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Node Event History Size\",\n+          \"description\": \"When the state of a node in the cluster is changed, an event is generated and can be viewed in the Cluster page. This value indicates how many events to keep in memory for each node\",\n+          \"default\": 25\n+        },\n+        \"node_connection_timeout\": {\n+          \"type\": \"string\",\n+          \"title\": \"Node Connection Timeout\",\n+          \"description\": \"When connecting to another node in the cluster, specifies how long this node should wait before considering the connection a failure\",\n+          \"default\": \"5 secs\"\n+        },\n+        \"node_read_timeout\": {\n+          \"type\": \"string\",\n+          \"title\": \"Node Read Timeout\",\n+          \"description\": \"When communicating with another node in the cluster, specifies how long this node should wait to receive information from the remote node before considering the communication with the node a failure\",\n+          \"default\": \"5 secs\"\n+        },\n+        \"firewall_file\": {\n+          \"type\": \"string\",\n+          \"title\": \"Firewall File (Relative) Path\",\n+          \"description\": \"The location of the node firewall file. This is a file that may be used to list all the nodes that are allowed to connect to the cluster. It provides an additional layer of security\",\n+          \"default\": \"\"\n+        },\n+        \"flow_election_max_wait_time\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Election Max Wait Time\",\n+          \"description\": \"Specifies the amount of time to wait before electing a Flow as the \\\"correct\\\" Flow. If the number of Nodes that have voted is equal to the number specified by the nifi.cluster.flow.election.max.candidates property, the cluster will not wait this long\",\n+          \"default\": \"1 mins\"\n+        },\n+        \"flow_election_max_candidates\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Flow Election Max Candidates\",\n+          \"description\": \"Specifies the number of Nodes required in the cluster to cause early election of Flows. This allows the Nodes in the cluster to avoid having to wait a long time before starting processing if we reach at least this number of nodes in the cluster\",\n+          \"default\": 3\n+        }\n+      }\n+    },\n+    \"zookeeper\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#zookeeper-properties\",\n+      \"title\": \"Zookeeper Configuration\",\n+      \"description\": \"NiFi depends on Apache ZooKeeper for determining which node in the cluster should play the role of Primary Node and which node should play the role of Cluster Coordinator. These properties must be configured in order for NiFi to join a cluster\",\n+      \"properties\": {\n+        \"connect_string\": {\n+          \"type\": \"string\",\n+          \"title\": \"Connection String\",\n+          \"description\": \"The Connect String that is needed to connect to Apache ZooKeeper. This is a comma-separated list of hostname:port pairs\",\n+          \"default\": \"master.mesos:2181\"\n+        },\n+        \"connect_timeout\": {\n+          \"type\": \"string\",\n+          \"title\": \"Connection Timeout\",\n+          \"description\": \"How long to wait when connecting to ZooKeeper before considering the connection a failure\",\n+          \"default\": \"3 secs\"\n+        },\n+        \"session_timeout\": {\n+          \"type\": \"string\",\n+          \"title\": \"Session Timeout\",\n+          \"description\": \"How long to wait after losing a connection to ZooKeeper before the session is expired\",\n+          \"default\": \"3 secs\"\n+        }\n+      }\n+    },\n+    \"core\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#core-properties-br\",\n+      \"title\": \"Apache NiFi Core Configuration\",\n+      \"description\": \"These properties apply to the core framework as a whole\",\n+      \"properties\": {\n+        \"flow_configuration_file\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Configuration File Location\",\n+          \"description\": \"The location of the flow configuration file\",\n+          \"default\": \"conf/flow.xml.gz\"\n+        },\n+        \"flow_configuration_archive_enabled\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Enable Archival of Flow Configuration?\",\n+          \"description\": \"Specifies whether NiFi creates a backup copy of the flow automatically when the flow is updated\",\n+          \"default\": true\n+        },\n+        \"flow_configuration_archive_dir\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Configuration Archive Directory\",\n+          \"description\": \"The location of the archive directory where backup copies of the flow.xml are saved\",\n+          \"default\": \"./conf/archive\"\n+        },\n+        \"flow_configuration_archive_max_time\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Configuration Archive Max Time\",\n+          \"description\": \"The lifespan of archived flow.xml files\",\n+          \"default\": \"30 days\"\n+        },\n+        \"flow_configuration_archive_max_storage\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Configuration Archive Max Storage\",\n+          \"description\": \"The total data size allowed for the archived flow.xml files\",\n+          \"default\": \"500 MB\"\n+        },\n+        \"flow_configuration_archive_max_count\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Configuration Archive Max Count\",\n+          \"description\": \"The number of archive files allowed\",\n+          \"default\": \"\"\n+        },\n+        \"flowcontroller_auto_resume_state\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Auto Resume Flow Controller State?\",\n+          \"description\": \"Indicates whether -upon restart- the components on the NiFi graph should return to their last state\",\n+          \"default\": true\n+        },\n+        \"flowcontroller_graceful_shutdown_period\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Controller Graceful Shutdown Period\",\n+          \"description\": \"Indicates the shutdown period\",\n+          \"default\": \"10 secs\"\n+        },\n+        \"flowservice_writedelay_interval\": {\n+          \"type\": \"string\",\n+          \"title\": \"Flow Service Write Delay Interval\",\n+          \"description\": \"When many changes are made to the flow.xml, this property specifies how long to wait before writing out the changes, so as to batch the changes into a single write\",\n+          \"default\": \"500 ms\"\n+        },\n+        \"administrative_yield_duration\": {\n+          \"type\": \"string\",\n+          \"title\": \"Administrative Yield Duration\",\n+          \"description\": \"If a component allows an unexpected exception to escape, it is considered a bug. As a result, the framework will pause (or administratively yield) the component for this amount of time\",\n+          \"default\": \"30 secs\"\n+        },\n+        \"bored_yield_duration\": {\n+          \"type\": \"string\",\n+          \"title\": \"Bored Yield Duration\",\n+          \"description\": \"When a component has no work to do (i.e., is \\\"bored\\\"), this is the amount of time it will wait before checking to see if it has new data to work on\",\n+          \"default\": \"10 millis\"\n+        },\n+        \"authorizer_configuration_file\": {\n+          \"type\": \"string\",\n+          \"title\": \"Authorizer Configuration (Relative) File Path\",\n+          \"description\": \"This is the location of the file that specifies how authorizers are defined\",\n+          \"default\": \"./conf/authorizers.xml\"\n+        },\n+        \"login_identity_provider_configuration_file\": {\n+          \"type\": \"string\",\n+          \"title\": \"Login Identity Provider Configuration (Relative) File Path\",\n+          \"description\": \"This is the location of the file that specifies how username/password authentication is performed\",\n+          \"default\": \"./conf/login-identity-providers.xml\"\n+        },\n+        \"templates_directory\": {\n+          \"type\": \"string\",\n+          \"title\": \"Template Directory (Relative) Path\",\n+          \"description\": \"This is the location of the directory where flow templates are saved (for backward compatibility only)\",\n+          \"default\": \"./conf/templates\"\n+        },\n+        \"ui_banner_text\": {\n+          \"type\": \"string\",\n+          \"title\": \"UI Banner Text\",\n+          \"description\": \"This is banner text that may be configured to display at the top of the User Interface\",\n+          \"default\": \"\"\n+        },\n+        \"ui_autorefresh_interval\": {\n+          \"type\": \"string\",\n+          \"title\": \"UI Autorefresh Interval\",\n+          \"description\": \"The interval at which the User Interface auto-refreshes\",\n+          \"default\": \"30 secs\"\n+        },\n+        \"nar_library_directory\": {\n+          \"type\": \"string\",\n+          \"title\": \"nar Library Directory (Relative) Path\",\n+          \"description\": \"The location of the nar library\",\n+          \"default\": \"./lib\"\n+        },\n+        \"nar_working_directory\": {\n+          \"type\": \"string\",\n+          \"title\": \"nar Working Directory (Relative) Path\",\n+          \"description\": \"The location of the nar working directory\",\n+          \"default\": \"./work/nar\"\n+        },\n+        \"documentation_working_directory\": {\n+          \"type\": \"string\",\n+          \"title\": \"Documentation Working Directory (Relative) Path\",\n+          \"description\": \"The location of the documentation working directory\",\n+          \"default\": \"./work/docs/components\"\n+        },\n+        \"processor_scheduling_timeout\": {\n+          \"type\": \"string\",\n+          \"title\": \"Processor Scheduling Timeout\",\n+          \"description\": \"Time to wait for a Processor's life-cycle operation (@OnScheduled and @OnUnscheduled) to finish before other life-cycle operation (e.g., stop) could be invoked\",\n+          \"default\": \"1 mins\"\n+        }\n+      }\n+    },\n+    \"state\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#state-management-br\",\n+      \"title\": \"State Management Configuration\",\n+      \"description\": \"The State Management section of the Properties file provides a mechanism for configuring local and cluster-wide mechanisms for components to persist state\",\n+      \"properties\": {\n+        \"management_configuration_file\": {\n+          \"type\": \"string\",\n+          \"title\": \"Management Configuration File (Relative) Path\",\n+          \"description\": \"The XML file that contains configuration for the local and cluster-wide State Providers\",\n+          \"default\": \"./conf/state-management.xml\"\n+        },\n+        \"management_provider_local\": {\n+          \"type\": \"string\",\n+          \"title\": \"Local State Management Provider\",\n+          \"description\": \"The ID of the Local State Provider to use. This value must match the value of the id element of one of the local-provider elements in the state-management.xml file\",\n+          \"default\": \"local-provider\"\n+        },\n+        \"management_provider_cluster\": {\n+          \"type\": \"string\",\n+          \"title\": \"Cluster State Management Provier\",\n+          \"description\": \"The ID of the Cluster State Provider to use. This value must match the value of the id element of one of the cluster-provider elements in the state-management.xml file\",\n+          \"default\": \"zk-provider\"\n+        },\n+        \"management_embedded_zookeeper_start\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Start Embedded State Management Zookeeper?\",\n+          \"description\": \"Specifies whether or not this instance of NiFi should start an embedded ZooKeeper Server\",\n+          \"default\": false\n+        },\n+        \"management_embedded_zookeeper_properties\": {\n+          \"type\": \"string\",\n+          \"title\": \"State Management Embedded Zookeeper Properties File (Relative) Path\",\n+          \"description\": \"Specifies a properties file that contains the configuration for the embedded ZooKeeper Server that is started (if the nifi.state.management.embedded.zookeeper.start property is set to true)\",\n+          \"default\": \"./conf/zookeeper.properties\"\n+        }\n+      }\n+    },\n+    \"h2\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#h2-settings\",\n+      \"title\": \"H2 Database Configuration\",\n+      \"description\": \"The H2 Settings section defines the settings for the H2 database, which keeps track of user access and flow controller history\",\n+      \"properties\": {\n+        \"url_append\": {\n+          \"type\": \"string\",\n+          \"title\": \"URL Append\",\n+          \"description\": \"This property specifies additional arguments to add to the connection string for the H2 database. The default value should be used and should not be changed\",\n+          \"default\": \";LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE\"\n+        }\n+      }\n+    },\n+    \"flowfile\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#flowfile-repository\",\n+      \"title\": \"FlowFile Configuration\",\n+      \"description\": \"The FlowFile repository keeps track of the attributes and current state of each FlowFile in the system\",\n+      \"properties\": {\n+        \"repository_implementation\": {\n+          \"type\": \"string\",\n+          \"title\": \"FlowFile Repository Implementation\",\n+          \"description\": \"The FlowFile Repository implementation. The default value is org.apache.nifi.controller.repository.WriteAheadFlowFileRepository and should only be changed with caution\",\n+          \"default\": \"org.apache.nifi.controller.repository.WriteAheadFlowFileRepository\"\n+        },\n+        \"repository_partitions\": {\n+          \"type\": \"integer\",\n+          \"title\": \"FlowFile Repository Partitions\",\n+          \"description\": \"The number of FlowFile partitions\",\n+          \"default\": 256\n+        },\n+        \"repository_checkpoint_interval\": {\n+          \"type\": \"string\",\n+          \"title\": \"FlowFile Repository Checkpoint Interval\",\n+          \"description\": \"The FlowFile Repository checkpoint interval\",\n+          \"default\": \"2 mins\"\n+        },\n+        \"repository_always_sync\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Always Sync FlowFile Repository?\",\n+          \"description\": \"If set to true, any change to the repository will be synchronized to the disk, meaning that NiFi will ask the operating system not to cache the information. This is very expensive and can significantly reduce NiFi performance. However, if it is false, there could be the potential for data loss if either there is a sudden power loss or the operating system crashes\",\n+          \"default\": false\n+        }\n+      }\n+    },\n+    \"swap\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#swap-management\",\n+      \"title\": \"Swap Configuration\",\n+      \"description\": \"NiFi keeps FlowFile information in memory (the JVM) but during surges of incoming data, the FlowFile information can start to take up so much of the JVM that system performance suffers. To counteract this effect, NiFi \\\"swaps\\\" the FlowFile information to disk temporarily until more JVM space becomes available again\",\n+      \"properties\": {\n+        \"manager_implementation\": {\n+          \"type\": \"string\",\n+          \"title\": \"Swap Manager Implementation\",\n+          \"description\": \"The Swap Manager implementation. The default value is org.apache.nifi.controller.FileSystemSwapManager and should not be changed\",\n+          \"default\": \"org.apache.nifi.controller.FileSystemSwapManager\"\n+        },\n+        \"queue_swap_threshold\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Swap Queue Threshold\",\n+          \"description\": \"The queue threshold at which NiFi starts to swap FlowFile information to disk\",\n+          \"default\": 20000\n+        },\n+        \"in_period\": {\n+          \"type\": \"string\",\n+          \"title\": \"Swap-In Period\",\n+          \"description\": \"The swap in period\",\n+          \"default\": \"5 secs\"\n+        },\n+        \"in_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Swap-In Threads\",\n+          \"description\": \"The number of threads to use for swapping in\",\n+          \"default\": 1\n+        },\n+        \"out_period\": {\n+          \"type\": \"string\",\n+          \"title\": \"Swap-Out Period\",\n+          \"description\": \"The swap out period\",\n+          \"default\": \"5 secs\"\n+        },\n+        \"out_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Swap-Out Threads\",\n+          \"description\": \"The number of threads to use for swapping out\",\n+          \"default\": 4\n+        }\n+      }\n+    },\n+    \"content\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#file-system-content-repository-properties\",\n+      \"title\": \"Content Repository Configuration\",\n+      \"description\": \"The Content Repository holds the content for all the FlowFiles in the system\",\n+      \"properties\": {\n+        \"repository_implementation\": {\n+          \"type\": \"string\",\n+          \"title\": \"Content Repository Implementation\",\n+          \"description\": \"The default value is org.apache.nifi.controller.repository.FileSystemRepository and should only be changed with caution\",\n+          \"default\": \"org.apache.nifi.controller.repository.FileSystemRepository\"\n+        },\n+        \"claim_max_appendable_size\": {\n+          \"type\": \"string\",\n+          \"title\": \"Claim Max Appendable Size\",\n+          \"description\": \"The maximum size for a content claim\",\n+          \"default\": \"10 MB\"\n+        },\n+        \"claim_max_flow_files\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Claim Max FlowFiles\",\n+          \"description\": \"The maximum number of FlowFiles to assign to one content claim\",\n+          \"default\": 100\n+        },\n+        \"repository_archive_max_retention_period\": {\n+          \"type\": \"string\",\n+          \"title\": \"Content Repository Archive Max Retention Period\",\n+          \"description\": \"If archiving is enabled (see nifi.content.repository.archive.enabled below), then this property specifies the maximum amount of time to keep the archived data\",\n+          \"default\": \"12 hours\"\n+        },\n+        \"repository_archive_max_usage_percentage\": {\n+          \"type\": \"string\",\n+          \"title\": \"Content Repository Archive Max Usage Percentage\",\n+          \"description\": \"If archiving is enabled (see nifi.content.repository.archive.enabled below), then this property specifies the maximum amount of time to keep the archived data\",\n+          \"default\": \"50%\"\n+        },\n+        \"repository_archive_enabled\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Enable Content Repository Archiving?\",\n+          \"description\": \"To enable content archiving, set this to true and specify a value for the nifi.content.repository.archive.max.usage.percentage property above. Content archiving enables the provenance UI to view or replay content that is no longer in a dataflow queue\",\n+          \"default\": true\n+        },\n+        \"repository_always_sync\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Always Sync Content Repository?\",\n+          \"description\": \"If set to true, any change to the repository will be synchronized to the disk, meaning that NiFi will ask the operating system not to cache the information. This is very expensive and can significantly reduce NiFi performance. However, if it is false, there could be the potential for data loss if either there is a sudden power loss or the operating system crashes\",\n+          \"default\": false\n+        },\n+        \"viewer_url\": {\n+          \"type\": \"string\",\n+          \"title\": \"Viewer URL\",\n+          \"description\": \"The URL for a web-based content viewer if one is available\",\n+          \"default\": \"/nifi-content-viewer/\"\n+        }\n+      }\n+    },\n+    \"volatile\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#volatile-content-repository-properties\",\n+      \"title\": \"Volatile (In-Memory) FlowFile Repository Configuration\",\n+      \"description\": \"Store flowfile content in memory instead of on disk (at the risk of data loss in the event of power/machine failure)\",\n+      \"properties\": {\n+        \"content_repository_max_size\": {\n+          \"type\": \"string\",\n+          \"title\": \"Volatile Content Repository Max Size\",\n+          \"description\": \"The Content Repository maximum size in memory\",\n+          \"default\": \"100 MB\"\n+        },\n+        \"content_repository_block_size\": {\n+          \"type\": \"string\",\n+          \"title\": \"Volatile Content Repository Block Size\",\n+          \"description\": \"The Content Repository block size\",\n+          \"default\": \"32 KB\"\n+        }\n+      }\n+    },\n+    \"provenance\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#provenance-repository\",\n+      \"title\": \"Provenance Repository Configuration\",\n+      \"description\": \"The Provenance Repository contains the information related to Data Provenance\",\n+      \"properties\": {\n+        \"repository_implementation\": {\n+          \"type\": \"string\",\n+          \"title\": \"Provenance Repository Implementation\",\n+          \"description\": \"The Provenance Repository implementation\",\n+          \"default\": \"org.apache.nifi.provenance.PersistentProvenanceRepository\"\n+        },\n+        \"repository_max_storage_time\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Max Storage Time\",\n+          \"description\": \"The maximum amount of time to keep data provenance information\",\n+          \"default\": \"24 hours\"\n+        },\n+        \"repository_max_storage_size\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Max Storage Size\",\n+          \"description\": \"The maximum amount of data provenance information to store at a time\",\n+          \"default\": \"1 GB\"\n+        },\n+        \"repository_rollover_time\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Rollover Time\",\n+          \"description\": \"The amount of time to wait before rolling over the latest data provenance information so that it is available in the User Interface\",\n+          \"default\": \"30 secs\"\n+        },\n+        \"repository_rollover_size\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Rollover Size\",\n+          \"description\": \"The amount of information to roll over at a time\",\n+          \"default\": \"100 MB\"\n+        },\n+        \"repository_query_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Repository Query Threads\",\n+          \"description\": \"The number of threads to use for Provenance Repository queries\",\n+          \"default\": 2\n+        },\n+        \"repository_index_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Repository Index Threads\",\n+          \"description\": \"The number of threads to use for indexing Provenance events so that they are searchable\",\n+          \"default\": 2\n+        },\n+        \"repository_compress_on_rollover\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Compress Repository on Rollover?\",\n+          \"description\": \"Indicates whether to compress the provenance information when an \\\"event file\\\" is rolled over\",\n+          \"default\": true\n+        },\n+        \"repository_always_sync\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Always Sync Repository?\",\n+          \"description\": \"If set to true, any change to the repository will be synchronized to the disk, meaning that NiFi will ask the operating system not to cache the information. This is very expensive and can significantly reduce NiFi performance. However, if it is false, there could be the potential for data loss if either there is a sudden power loss or the operating system crashes\",\n+          \"default\": false\n+        },\n+        \"repository_journal_count\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Repository Journal Count\",\n+          \"description\": \"The number of journal files that should be used to serialize Provenance Event data. Increasing this value will allow more tasks to simultaneously update the repository but will result in more expensive merging of the journal files later. This value should ideally be equal to the number of threads that are expected to update the repository simultaneously, but 16 tends to work well in must environments\",\n+          \"default\": 16\n+        },\n+        \"repository_indexed_fields\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Indexed Fields\",\n+          \"description\": \"This is a comma-separated list of the fields that should be indexed and made searchable. Fields that are not indexed will not be searchable. Valid fields are: EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, AlternateIdentifierURI, Relationship, Details. The default value is: EventType, FlowFileUUID, Filename, ProcessorID\",\n+          \"default\": \"EventType, FlowFileUUID, Filename, ProcessorID, Relationship\"\n+        },\n+        \"repository_indexed_attributes\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Indexed Attributes\",\n+          \"description\": \"This is a comma-separated list of FlowFile Attributes that should be indexed and made searchable. It is blank by default. But some good examples to consider are filename, uuid, and mime.type as well as any custom attritubes you might use which are valuable for your use case\",\n+          \"default\": \"\"\n+        },\n+        \"repository_index_shard_size\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Index Shard Size\",\n+          \"description\": \"Large values for the shard size will result in more Java heap usage when searching the Provenance Repository but should provide better performance\",\n+          \"default\": \"500 MB\"\n+        },\n+        \"repository_max_attribute_length\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Repository Max Attribute Length\",\n+          \"description\": \"Indicates the maximum length that a FlowFile attribute can be when retrieving a Provenance Event from the repository. If the length of any attribute exceeds this value, it will be truncated when the event is retrieved\",\n+          \"default\": 65536\n+        },\n+        \"repository_buffer_size\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Repository Buffer Size\",\n+          \"description\": \"The (Volatile) Provenance Repository buffer size\",\n+          \"default\": 100000\n+        },\n+        \"repository_concurrent_merge_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Repository Concurrent Merge Threads\",\n+          \"description\": \"Apache Lucene creates several \\\"segments\\\" in an Index. These segments are periodically merged together in order to provide faster querying. This property specifies the maximum number of threads that are allowed to be used for each of the storage directories\",\n+          \"default\": 2\n+        },\n+        \"repository_warm_cache_frequency\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Warm Cache Frequency\",\n+          \"description\": \"Warming the cache does take some CPU resources, but more importantly it will evict other data from the Operating System disk cache and will result in reading (potentially a great deal of) data from the disk. This can result in lower NiFi performance. However, if NiFi is running in an environment where CPU and disk are not fully utilized, this feature can result in far faster Provenance queries\",\n+          \"default\": \"\"\n+        },\n+        \"repository_debug_frequency\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Debug Frequency\",\n+          \"description\": \"Controls the number of events processed between DEBUG statements documenting the performance metrics of the repository. This value is only used when DEBUG level statements are enabled in the log configuration\",\n+          \"default\": \"1_000_000\"\n+        },\n+        \"repository_encryption_key_provider_implementation\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Encryption Key Provider Implementation\",\n+          \"description\": \"This is the fully-qualified class name of the key provider. A key provider is the datastore interface for accessing the encryption key to protect the provenance events. There are currently two implementations - StaticKeyProvider which reads a key directly from nifi.properties, and FileBasedKeyProvider which reads n many keys from an encrypted file. The interface is extensible, and HSM-backed or other providers are expected in the future\",\n+          \"default\": \"\"\n+        },\n+        \"repository_encryption_key_provider_location\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Encryption Key Provider Location\",\n+          \"description\": \"The path to the key definition resource (empty for StaticKeyProvider, ./keys.nkp or similar path for FileBasedKeyProvider). For future providers like an HSM, this may be a connection string or URL\",\n+          \"default\": \"\"\n+        },\n+        \"repository_encryption_key_id\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Encryption Key ID\",\n+          \"description\": \"The active key ID to use for encryption (e.g. Key1).\",\n+          \"default\": \"\"\n+        },\n+        \"repository_encryption_key\": {\n+          \"type\": \"string\",\n+          \"title\": \"Repository Encryption Key\",\n+          \"description\": \"The key to use for StaticKeyProvider. The key format is hex-encoded (0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210) but can also be encrypted using the ./encrypt-config.sh tool in NiFi Toolkit\",\n+          \"default\": \"\"\n+        }\n+      }\n+    },\n+    \"components\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#component-status-repository\",\n+      \"title\": \"Component Status Repository Configuration\",\n+      \"description\": \"The Component Status Repository contains the information for the Component Status History tool in the User Interface\",\n+      \"properties\": {\n+        \"status_repository_implementation\": {\n+          \"type\": \"string\",\n+          \"title\": \"Component Status Repository Implementation\",\n+          \"description\": \"The Component Status Repository implementation\",\n+          \"default\": \"org.apache.nifi.controller.status.history.VolatileComponentStatusRepository\"\n+        },\n+        \"status_repository_buffer_size\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Status Repository Buffer Size\",\n+          \"description\": \"Specifies the buffer size for the Component Status Repository\",\n+          \"default\": 1440\n+        },\n+        \"status_snapshot_frequency\": {\n+          \"type\": \"string\",\n+          \"title\": \"Status Repository Snapshot Frequency\",\n+          \"description\": \"This value indicates how often to present a snapshot of the components' status history\",\n+          \"default\": \"1 mins\"\n+        }\n+      }\n+    },\n+    \"remote\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#site_to_site_properties\",\n+      \"title\": \"Site to Site Configuration\",\n+      \"description\": \"These properties govern how this instance of NiFi communicates with remote instances of NiFi when Remote Process Groups are configured in the dataflow\",\n+      \"properties\": {\n+        \"input_host\": {\n+          \"type\": \"string\",\n+          \"title\": \"Input Host\",\n+          \"description\": \"The host name that will be given out to clients to connect to this NiFi instance for Site-to-Site communication. By default, it is the value from InetAddress.getLocalHost().getHostName(). On UNIX-like operating systems, this is typically the output from the hostname command\",\n+          \"default\": \"\"\n+        },\n+        \"input_secure\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Input Secure?\",\n+          \"description\": \"This indicates whether communication between this instance of NiFi and remote NiFi instances should be secure. By default, it is set to false. In order for secure site-to-site to work, set the property to true\",\n+          \"default\": false\n+        },\n+        \"input_socket_port\": {\n+          \"type\": \"string\",\n+          \"title\": \"Input Socket Port\",\n+          \"description\": \"The remote input socket port for Site-to-Site communication. By default, it is blank, but it must have a value in order to use RAW socket as transport protocol for Site-to-Site\",\n+          \"default\": \"\"\n+        },\n+        \"input_http_enabled\": {\n+          \"type\": \"boolean\",\n+          \"title\": \"Enable HTTP(S) Input?\",\n+          \"description\": \"Specifies whether HTTP Site-to-Site should be enabled on this host. By default, it is set to true. Whether a Site-to-Site client uses HTTP or HTTPS is determined by nifi.remote.input.secure. If it is set to true, then requests are sent as HTTPS to nifi.web.https.port. If set to false, HTTP requests are sent to nifi.web.http.port\",\n+          \"default\": true\n+        },\n+        \"input_http_transaction_ttl\": {\n+          \"type\": \"string\",\n+          \"title\": \"Input HTTP Transaction TTL\",\n+          \"description\": \"Specifies how long a transaction can stay alive on the server\",\n+          \"default\": \"30 secs\"\n+        }\n+      }\n+    },\n+    \"web\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#web-properties\",\n+      \"title\": \"Web UI Configuration\",\n+      \"description\": \"These properties pertain to the web-based User Interface\",\n+      \"properties\": {\n+        \"war_directory\": {\n+          \"type\": \"string\",\n+          \"title\": \"war Directory (Relative) Path\",\n+          \"description\": \"This is the location of the web war directory\",\n+          \"default\": \"./lib\"\n+        },\n+        \"http_host\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTP Hostname/IP\",\n+          \"description\": \"The HTTP host\",\n+          \"default\": \"\"\n+        },\n+        \"http_port\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTP Port\",\n+          \"description\": \"The HTTP port\",\n+          \"default\": \"8080\"\n+        },\n+        \"http_port_forwarding\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTP Forwarding Port\",\n+          \"description\": \"The port which forwards incoming HTTP requests to nifi.web.http.host. This property is designed to be used with port forwarding, when NiFi has to be started by a non-root user for better security, yet it needs to be accessed via low port to go through a firewall\",\n+          \"default\": \"\"\n+        },\n+        \"http_network_interface_default\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTP Network Interface\",\n+          \"description\": \"The name of the network interface to which NiFi should bind for HTTP requests\",\n+          \"default\": \"\"\n+        },\n+        \"https_host\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTPS Hostname/IP\",\n+          \"description\": \"The HTTPS host\",\n+          \"default\": \"\"\n+        },\n+        \"https_port\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTPS Port\",\n+          \"description\": \"The HTTPS port\",\n+          \"default\": \"8443\"\n+        },\n+        \"https_port_forwarding\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTPS Forwarding Port\",\n+          \"description\": \"Same as nifi.web.http.port.forwarding, but with HTTPS for secure communication\",\n+          \"default\": \"\"\n+        },\n+        \"https_network_interface_default\": {\n+          \"type\": \"string\",\n+          \"title\": \"HTTPS Network Interface\",\n+          \"description\": \"The name of the network interface to which NiFi should bind for HTTPS requests\",\n+          \"default\": \"\"\n+        },\n+        \"jetty_working_directory\": {\n+          \"type\": \"string\",\n+          \"title\": \"Jetty Working Directory (Relative) Path\",\n+          \"description\": \"The location of the Jetty working directory\",\n+          \"default\": \"./work/jetty\"\n+        },\n+        \"jetty_threads\": {\n+          \"type\": \"integer\",\n+          \"title\": \"Jetty Threads\",\n+          \"description\": \"The number of Jetty threads\",\n+          \"default\": 200\n+        }\n+      }\n+    },\n+    \"custom\": {\n+      \"type\": \"object\",\n+      \"id\": \"https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#custom_properties\",\n+      \"title\": \"Custom Configuration Overrides\",\n+      \"description\": \"To configure custom properties for use with NiF's Expression Language\",\n+      \"properties\": {\n+        \"variable_registry_properties\": {\n+          \"type\": \"string\",\n+          \"title\": \"Variable (Custom) Registry Properties File (Relative) Paths\",\n+          \"description\": \"This is a comma-separated list of file location paths for one or more custom property files\",\n+          \"default\": \"\"\n+        }\n+      }\n     }\n+  }\n }\n--- 2/marathon.json.mustache\n+++ 100/marathon.json.mustache\n@@ -1,55 +1,307 @@\n {\n   \"id\": \"{{service.name}}\",\n-  \"cpus\": {{service.cpus}},\n-  \"mem\": {{service.mem}},\n-  \"instances\": {{service.instances}},\n-  \"container\": {\n-    \"type\": \"DOCKER\",\n-    \"docker\": {\n-      \"image\": \"{{advanced.docker-image}}\",\n-      \"network\": \"HOST\"    \n+  \"cpus\": 1.0,\n+  \"mem\": 1024,\n+  \"instances\": 1,\n+  \"user\": \"{{service.user}}\",\n+  \"cmd\": \"export LD_LIBRARY_PATH=$MESOS_SANDBOX/libmesos-bundle/lib:$LD_LIBRARY_PATH && export MESOS_NATIVE_JAVA_LIBRARY=$(ls $MESOS_SANDBOX/libmesos-bundle/lib/libmesos-*.so) && export JAVA_HOME=$(ls -d $MESOS_SANDBOX/jdk*/jre*/) && export JAVA_HOME=${JAVA_HOME%/} && export PATH=$(ls -d $JAVA_HOME/bin):$PATH && export JAVA_OPTS=\\\"-Xms512M -Xmx512M -XX:-HeapDumpOnOutOfMemoryError\\\" && ./bootstrap -resolve=false -template=false && ./nifi-scheduler/bin/nifi ./nifi-scheduler/svc.yml\",\n+  \"labels\": {\n+    \"DCOS_COMMONS_API_VERSION\": \"v1\",\n+    \"DCOS_COMMONS_UNINSTALL\": \"true\",\n+    \"DCOS_PACKAGE_FRAMEWORK_NAME\": \"{{service.name}}\",\n+    \"MARATHON_SINGLE_INSTANCE_APP\": \"true\",\n+    \"DCOS_SERVICE_NAME\": \"{{service.name}}\",\n+    \"DCOS_SERVICE_PORT_INDEX\": \"0\",\n+    \"DCOS_SERVICE_SCHEME\": \"http\"\n+  },\n+  {{#service.service_account_secret}}\n+  \"secrets\": {\n+    \"serviceCredential\": {\n+      \"source\": \"{{service.service_account_secret}}\"\n     }\n   },\n+  {{/service.service_account_secret}}\n+  \"env\": {\n+    \"PACKAGE_NAME\": \"nifi\",                                         \n+    \"PACKAGE_VERSION\": \"stub-universe\", \n+    \"PACKAGE_BUILD_TIME_EPOCH_MS\": \"1523897622243\",           \n+    \"PACKAGE_BUILD_TIME_STR\": \"Mon Apr 16 2018 16:53:42 +0000\",\n+    \"FRAMEWORK_NAME\": \"{{service.name}}\",\n+    \"FRAMEWORK_USER\": \"{{service.user}}\",\n+    \"FRAMEWORK_PRINCIPAL\": \"{{service.service_account}}\",\n+    \"FRAMEWORK_LOG_LEVEL\": \"{{service.log_level}}\",\n+    \"FRAMEWORK_ZOOKEEPER\": \"master.mesos:2181\",\n+\n+    \"MESOS_API_VERSION\": \"{{service.mesos_api_version}}\",\n+    \n+    \"DEPLOY_STRATEGY\": \"{{service.deploy_strategy}}\",\n+    \"BACKUP_DISK_TYPE\": \"{{node.disk_type}}\",\n+    \"BACKUP_DISK_SIZE\": \"{{node.disk_size}}\",\n+\n+    \"JAVA_URI\": \"{{resource.assets.uris.jre-tar-gz}}\",\n+    \"LIBMESOS_URI\": \"{{resource.assets.uris.libmesos-bundle-tar-gz}}\",\n+    \"BOOTSTRAP_URI\": \"{{resource.assets.uris.bootstrap-zip}}\",\n+    \"EXECUTOR_URI\": \"{{resource.assets.uris.executor-zip}}\",\n+    \"NIFI_URI\": \"{{resource.assets.uris.nifi-tar-gz}}\",\n+    \"NIFI_TOOLKIT_URI\": \"{{resource.assets.uris.nifi-toolkit}}\",\n+    \"NIFI_JANITOR_JAR_URI\": \"{{resource.assets.uris.nifi-janitor-jar}}\",\n+    \"NIFI_STATSD_JAR_URI\": \"{{resource.assets.uris.nifi-statsd-jar}}\",\n+    \"NIFI_PYHTON_URI\": \"{{resource.assets.uris.nifi-python-tar-gz}}\",\n+\n+    \"NIFI_VERSION\": \"1.5.0\",\n+\n+    \"CONFIG_TEMPLATE_PATH\": \"nifi-scheduler\",\n+\n+    {{#service.service_account_secret}}\n+    \"DCOS_SERVICE_ACCOUNT_CREDENTIAL\": { \"secret\": \"serviceCredential\" },\n+    \"MESOS_MODULES\": \"{\\\"libraries\\\":[{\\\"file\\\":\\\"libmesos-bundle\\/lib\\/mesos\\/libdcos_security.so\\\",\\\"modules\\\":[{\\\"name\\\": \\\"com_mesosphere_dcos_ClassicRPCAuthenticatee\\\"},{\\\"name\\\":\\\"com_mesosphere_dcos_http_Authenticatee\\\",\\\"parameters\\\":[{\\\"key\\\":\\\"jwt_exp_timeout\\\",\\\"value\\\":\\\"5mins\\\"},{\\\"key\\\":\\\"preemptive_refresh_duration\\\",\\\"value\\\":\\\"30mins\\\"}]}]}]}\",\n+    \"MESOS_AUTHENTICATEE\": \"com_mesosphere_dcos_ClassicRPCAuthenticatee\",\n+    \"MESOS_HTTP_AUTHENTICATEE\": \"com_mesosphere_dcos_http_Authenticatee\",\n+    {{/service.service_account_secret}}\n+\n+    \"NODE_COUNT\": \"{{node.count}}\",\n+    \"NODE_CPUS\": \"{{node.cpus}}\",\n+    \"NODE_MEM\": \"{{node.mem}}\",\n+    \"NODE_PORT\": \"0\",\n+\n+    \"NODE_VIP_PREFIX\": \"{{node.vip_prefix}}\",\n+    {{^service.security.tls_ssl.enable}}\n+    \"NODE_VIP_PORT\": \"{{web.http_port}}\",\n+    {{/service.security.tls_ssl.enable}}\n+    {{#service.security.tls_ssl.enable}}\n+    \"NODE_VIP_PORT\": \"{{web.https_port}}\",\n+    {{/service.security.tls_ssl.enable}}\n+\n+    \"NODE_RLIMIT_NOFILE_SOFT\": \"{{node.rlimit_nofile_soft}}\",\n+    \"NODE_RLIMIT_NOFILE_HARD\": \"{{node.rlimit_nofile_hard}}\",\n+    \"NODE_RLIMIT_NPROC_SOFT\": \"{{node.rlimit_nproc_soft}}\",\n+    \"NODE_RLIMIT_NPROC_HARD\": \"{{node.rlimit_nproc_hard}}\",\n+\n+    \"NODE_PLACEMENT_CONSTRAINTS\": \"{{{service.placement_constraint}}}\",\n+\n+\n+    {{#service.virtual_network_enabled}}\n+    \"ENABLE_VIRTUAL_NETWORK\": \"yes\",\n+    \"VIRTUAL_NETWORK_NAME\": \"{{service.virtual_network_name}}\",\n+    \"VIRTUAL_NETWORK_PLUGIN_LABELS\": \"{{service.virtual_network_plugin_labels}}\",\n+    {{/service.virtual_network_enabled}}\n+\n+    \"NODE_CONTENT_REPOSITORY_DISK_PATH\": \"content-repository\",\n+    \"NODE_CONTENT_REPOSITORY_DISK_TYPE\": \"{{node.disk_type}}\",\n+    \"NODE_CONTENT_REPOSITORY_DISK_SIZE\": \"{{node.disk_size}}\",\n+    \n+    \"NODE_DATABASE_REPOSITORY_DISK_PATH\": \"database-repository\",\n+    \"NODE_DATABASE_REPOSITORY_DISK_TYPE\": \"{{node.disk_type}}\",\n+    \"NODE_DATABASE_REPOSITORY_DISK_SIZE\": \"{{node.disk_size}}\",\n+    \n+    \"NODE_FLOWFILE_REPOSITORY_DISK_PATH\": \"flowfile-repository\",\n+    \"NODE_FLOWFILE_REPOSITORY_DISK_TYPE\": \"{{node.disk_type}}\",\n+    \"NODE_FLOWFILE_REPOSITORY_DISK_SIZE\": \"{{node.disk_size}}\",\n+    \n+    \"NODE_PROVENANCE_REPOSITORY_DISK_PATH\": \"provenance-repository\",\n+    \"NODE_PROVENANCE_REPOSITORY_DISK_TYPE\": \"{{node.disk_type}}\",\n+    \"NODE_PROVENANCE_REPOSITORY_DISK_SIZE\": \"{{node.disk_size}}\",\n+\n+    \"TASKCFG_ALL_NIFI_KILL_GRACE_PERIOD\": \"{{node.kill_grace_period}}\",\n+    \"TASKCFG_ALL_NIFI_BOOTSTRAP_JVM_MIN\": \"{{node.nifi_bootstrap_jvm_min}}\",\n+    \"TASKCFG_ALL_NIFI_BOOTSTRAP_JVM_MAX\": \"{{node.nifi_bootstrap_jvm_max}}\",\n+    \"TASKCFG_ALL_NIFI_CN_DN_NODE_IDENTITY\": \"{{service.security.kerberos.cn_dn_node_identity}}\",\n+\n+    \n+\n+    \"NIFI_CLUSTER_NODE_PROTOCOL_PORT\": \"{{cluster.node_protocol_port}}\",\n+    \n+    \"TASKCFG_ALL_NIFI_VERSION\": \"1.5.0\",\n+\n+    \"TASKCFG_ALL_NIFI_CORE_FLOW_CONFIGURATION_FILE\": \"{{core.flow_configuration_file}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOW_CONFIGURATION_ARCHIVE_ENABLED\": \"{{core.flow_configuration_archive_enabled}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOW_CONFIGURATION_ARCHIVE_DIR\": \"{{core.flow_configuration_archive_dir}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOW_CONFIGURATION_ARCHIVE_MAX_TIME\": \"{{core.flow_configuration_archive_max_time}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOW_CONFIGURATION_ARCHIVE_MAX_STORAGE\": \"{{core.flow_configuration_archive_max_storage}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOW_CONFIGURATION_ARCHIVE_MAX_COUNT\": \"{{core.flow_configuration_archive_max_count}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOWCONTROLLER_AUTORESUMESTATE\": \"{{core.flowcontroller_auto_resume_state}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOWCONTROLLER_GRACEFUL_SHUTDOWN_PERIOD\": \"{{core.flowcontroller_graceful_shutdown_period}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_FLOWSERVICE_WRITEDELAY_INTERVAL\": \"{{core.flowservice_writedelay_interval}}\",\n+\n+    \"TASKCFG_ALL_NIFI_CORE_ADMINISTRATIVE_YIELD_DURATION\": \"{{core.administrative_yield_duration}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_BORED_YIELD_DURATION\": \"{{core.bored_yield_duration}}\",\n+\n+    \"TASKCFG_ALL_NIFI_CORE_AUTHORIZER_CONFIGURATION_FILE\": \"{{core.authorizer_configuration_file}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_LOGIN_IDENTITY_PROVIDER_CONFIGURATION_FILE\": \"{{core.login_identity_provider_configuration_file}}\",\n+\n+    \"TASKCFG_ALL_NIFI_CORE_TEMPLATES_DIRECTORY\": \"{{core.templates_directory}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_UI_BANNER_TEXT\": \"{{core.ui_banner_text}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_UI_AUTOREFRESH_INTERVAL\": \"{{core.ui_autorefresh_interval}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_NAR_LIBRARY_DIRECTORY\": \"{{core.nar_library_directory}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_NAR_WORKING_DIRECTORY\": \"{{core.nar_working_directory}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_DOCUMENTATION_WORKING_DIRECTORY\": \"{{core.documentation_working_directory}}\",\n+    \"TASKCFG_ALL_NIFI_CORE_PROCESSOR_SCHEDULING_TIMEOUT\": \"{{core.processor_scheduling_timeout}}\",\n+\n+    \"TASKCFG_ALL_NIFI_STATE_MANAGEMENT_CONFIGURATION_FILE\": \"{{state.management_configuration_file}}\",\n+    \"TASKCFG_ALL_NIFI_STATE_MANAGEMENT_PROVIDER_LOCAL\": \"{{state.management_provider_local}}\",\n+    \"TASKCFG_ALL_NIFI_STATE_MANAGEMENT_PROVIDER_CLUSTER\": \"{{state.management_provider_cluster}}\",\n+    \"TASKCFG_ALL_NIFI_STATE_MANAGEMENT_EMBEDDED_ZOOKEEPER_START\": \"{{state.management_embedded_zookeeper_start}}\",\n+    \"TASKCFG_ALL_NIFI_STATE_MANAGEMENT_EMBEDDED_ZOOKEEPER_PROPERTIES\": \"{{state.management_embedded_zookeeper_properties}}\",\n+\n+    \"TASKCFG_ALL_NIFI_DATABASE_DIRECTORY\": \"database-repository\",\n+    \"TASKCFG_ALL_NIFI_H2_URL_APPEND\": \"{{h2.url_append}}\",\n+\n+    \"TASKCFG_ALL_NIFI_FLOWFILE_REPOSITORY_IMPLEMENTATION\": \"{{flowfile.repository_implementation}}\",\n+    \"TASKCFG_ALL_NIFI_FLOWFILE_REPOSITORY_DIRECTORY\": \"flowfile-repository\",\n+    \"TASKCFG_ALL_NIFI_FLOWFILE_REPOSITORY_PARTITIONS\": \"{{flowfile.repository_partitions}}\",\n+    \"TASKCFG_ALL_NIFI_FLOWFILE_REPOSITORY_CHECKPOINT_INTERVAL\": \"{{flowfile.repository_checkpoint_interval}}\",\n+    \"TASKCFG_ALL_NIFI_FLOWFILE_REPOSITORY_ALWAYS_SYNC\": \"{{flowfile.repository_always_sync}}\",\n+\n+    \"TASKCFG_ALL_NIFI_SWAP_MANAGER_IMPLEMENTATION\": \"{{swap.manager_implementation}}\",\n+    \"TASKCFG_ALL_NIFI_QUEUE_SWAP_THRESHOLD\": \"{{swap.queue_swap_threshold}}\",\n+    \"TASKCFG_ALL_NIFI_SWAP_IN_PERIOD\": \"{{swap.in_period}}\",\n+    \"TASKCFG_ALL_NIFI_SWAP_IN_THREADS\": \"{{swap.in_threads}}\",\n+    \"TASKCFG_ALL_NIFI_SWAP_OUT_PERIOD\": \"{{swap.out_period}}\",\n+    \"TASKCFG_ALL_NIFI_SWAP_OUT_THREADS\": \"{{swap.out_threads}}\",\n+\n+    \"TASKCFG_ALL_NIFI_CONTENT_REPOSITORY_IMPLEMENTATION\": \"{{content.repository_implementation}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_CLAIM_MAX_APPENDABLE_SIZE\": \"{{content.claim_max_appendable_size}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_CLAIM_MAX_FLOW_FILES\": \"{{content.claim_max_flow_files}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_REPOSITORY_DIRECTORY_DEFAULT\": \"content-repository\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_REPOSITORY_ARCHIVE_MAX_RETENTION_PERIOD\": \"{{content.repository_archive_max_retention_period}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_REPOSITORY_ARCHIVE_MAX_USAGE_PERCENTAGE\": \"{{content.repository_archive_max_usage_percentage}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_REPOSITORY_ARCHIVE_ENABLED\": \"{{content.repository_archive_enabled}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_REPOSITORY_ALWAYS_SYNC\": \"{{content.repository_always_sync}}\",\n+    \"TASKCFG_ALL_NIFI_CONTENT_VIEWER_URL\": \"{{content.viewer_url}}\",\n+\n+    \"TASKCFG_ALL_NIFI_VOLATILE_CONTENT_REPOSITORY_MAX_SIZE\": \"{{volatile.content_repository_max_size}}\",\n+    \"TASKCFG_ALL_NIFI_VOLATILE_CONTENT_REPOSITORY_BLOCK_SIZE\": \"{{volatile.content_repository_block_size}}\",\n+\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_IMPLEMENTATION\": \"{{provenance.repository_implementation}}\",\n+\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_DIRECTORY_DEFAULT\": \"provenance-repository\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_MAX_STORAGE_TIME\": \"{{provenance.repository_max_storage_time}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_MAX_STORAGE_SIZE\": \"{{provenance.repository_max_storage_size}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ROLLOVER_TIME\": \"{{provenance.repository_rollover_time}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ROLLOVER_SIZE\": \"{{provenance.repository_rollover_size}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_QUERY_THREADS\": \"{{provenance.repository_query_threads}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_INDEX_THREADS\": \"{{provenance.repository_index_threads}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_COMPRESS_ON_ROLLOVER\": \"{{provenance.repository_compress_on_rollover}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ALWAYS_SYNC\": \"{{provenance.repository_always_sync}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_JOURNAL_COUNT\": \"{{provenance.repository_journal_count}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_INDEXED_FIELDS\": \"{{provenance.repository_indexed_fields}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_INDEXED_ATTRIBUTES\": \"{{provenance.repository_indexed_attributes}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_INDEX_SHARD_SIZE\": \"{{provenance.repository_index_shard_size}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_MAX_ATTRIBUTE_LENGTH\": \"{{provenance.repository_max_attribute_length}}\",\n+\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_BUFFER_SIZE\": \"{{provenance.repository_buffer_size}}\",\n+\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_CONCURRENT_MERGE_THREADS\": \"{{provenance.repository_concurrent_merge_threads}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_WARM_CACHE_FREQUENCY\": \"{{provenance.repository_warm_cache_frequency}}\",\n+\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_DEBUG_FREQUENCY\": \"{{provenance.repository_debug_frequency}}\",\n+\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION\": \"{{provenance.repository_encryption_key_provider_implementation}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_LOCATION\": \"{{provenance.repository_encryption_key_provider_location}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ENCRYPTION_KEY_ID\": \"{{provenance.repository_encryption_key_id}}\",\n+    \"TASKCFG_ALL_NIFI_PROVENANCE_REPOSITORY_ENCRYPTION_KEY\": \"{{provenance.repository_encryption_key}}\",\n+\n+    \"TASKCFG_ALL_NIFI_COMPONENTS_STATUS_REPOSITORY_IMPLEMENTATION\": \"{{components.status_repository_implementation}}\",\n+    \"TASKCFG_ALL_NIFI_COMPONENTS_STATUS_REPOSITORY_BUFFER_SIZE\": \"{{components.status_repository_buffer_size}}\",\n+    \"TASKCFG_ALL_NIFI_COMPONENTS_STATUS_SNAPSHOT_FREQUENCY\": \"{{components.status_snapshot_frequency}}\",\n+\n+    \"TASKCFG_ALL_NIFI_REMOTE_INPUT_HOST\": \"{{remote.input_host}}\",\n+    \"TASKCFG_ALL_NIFI_REMOTE_INPUT_SECURE\": \"{{remote.input_secure}}\",\n+    \"TASKCFG_ALL_NIFI_REMOTE_INPUT_SOCKET_PORT\": \"{{remote.input_socket_port}}\",\n+    \"TASKCFG_ALL_NIFI_REMOTE_INPUT_HTTP_ENABLED\": \"{{remote.input_http_enabled}}\",\n+    \"TASKCFG_ALL_NIFI_REMOTE_INPUT_HTTP_TRANSACTION_TTL\": \"{{remote.input_http_transaction_ttl}}\",\n+\n+    \"TASKCFG_ALL_NIFI_WEB_WAR_DIRECTORY\": \"{{web.war_directory}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_HTTP_HOST\": \"{{web.http_host}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_HTTP_PORT\": \"{{web.http_port}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_HTTP_NETWORK_INTERFACE_DEFAULT\": \"{{web.http_network_interface_default}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_HTTPS_HOST\": \"{{web.https_host}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_HTTPS_PORT\": \"{{web.https_port}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_HTTPS_NETWORK_INTERFACE_DEFAULT\": \"{{web.https_network_interface_default}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_JETTY_WORKING_DIRECTORY\": \"{{web.jetty_working_directory}}\",\n+    \"TASKCFG_ALL_NIFI_WEB_JETTY_THREADS\": \"{{web.jetty_threads}}\",\n+\n+    \"TASKCFG_ALL_NIFI_SENSITIVE_PROPS_KEY\": \"{{Advanced_Security.sensitive_props_key}}\",\n+    \"TASKCFG_ALL_NIFI_SENSITIVE_PROPS_KEY_PROTECTED\": \"{{Advanced_Security.sensitive_props_key_protected}}\",\n+    \"TASKCFG_ALL_NIFI_SENSITIVE_PROPS_ALGORITHM\": \"{{Advanced_Security.sensitive_props_algorithm}}\",\n+    \"TASKCFG_ALL_NIFI_SENSITIVE_PROPS_PROVIDER\": \"{{Advanced_Security.sensitive_props_provider}}\",\n+    \"TASKCFG_ALL_NIFI_SENSITIVE_PROPS_ADDITIONAL_KEYS\": \"{{Advanced_Security.sensitive_props_additional_keys}}\",\n+\n+\n+    \"TASKCFG_ALL_NIFI_SECURITY_NEEDCLIENTAUTH\": \"{{Advanced_Security.need_client_auth}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_USER_AUTHORIZER\": \"{{Advanced_Security.user_authorizer}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_USER_LOGIN_IDENTITY_PROVIDER\": \"{{Advanced_Security.user_login_identity_provider}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_OCSP_RESPONDER_URL\": \"{{Advanced_Security.ocsp_responder_url}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_OCSP_RESPONDER_CERTIFICATE\": \"{{Advanced_Security.ocsp_responder_certificate}}\",\n+\n+    \"TASKCFG_ALL_NIFI_SECURITY_IDENTITY_MAPPING_PATTERN_DN\": \"{{identity.mapping_pattern_dn}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_IDENTITY_MAPPING_VALUE_DN\": \"{{identity.mapping_value_dn}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_IDENTITY_MAPPING_PATTERN_KERB\": \"{{identity.mapping_pattern_kerb}}\",\n+    \"TASKCFG_ALL_NIFI_SECURITY_IDENTITY_MAPPING_VALUE_KERB\": \"{{identity.mapping_value_kerb}}\",\n+\n+    \"TASKCFG_ALL_NIFI_CLUSTER_PROTOCOL_HEARTBEAT_INTERVAL\": \"{{cluster.protocol_heartbeat_interval}}\",\n+\n+    {{#service.security.tls_ssl.enable}}\n+    \"TASKCFG_ALL_NIFI_CLUSTER_PROTOCOL_IS_SECURE\": \"{{service.security.tls_ssl.enable}}\",\n+    {{/service.security.tls_ssl.enable}}\n+\n+    \"TASKCFG_ALL_NIFI_CLUSTER_IS_NODE\": \"{{cluster.is_node}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_NODE_PROTOCOL_PORT\": \"{{cluster.node_protocol_port}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_NODE_PROTOCOL_THREADS\": \"{{cluster.node_protocol_threads}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_NODE_EVENT_HISTORY_SIZE\": \"{{cluster.node_event_history_size}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_NODE_CONNECTION_TIMEOUT\": \"{{cluster.node_connection_timeout}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_NODE_READ_TIMEOUT\": \"{{cluster.node_read_timeout}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_FIREWALL_FILE\": \"{{cluster.firewall_file}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_FLOW_ELECTION_MAX_WAIT_TIME\": \"{{cluster.flow_election_max_wait_time}}\",\n+    \"TASKCFG_ALL_NIFI_CLUSTER_FLOW_ELECTION_MAX_CANDIDATES\": \"{{cluster.flow_election_max_candidates}}\",\n+\n+    \"TASKCFG_ALL_NIFI_ZOOKEEPER_CONNECT_STRING\": \"{{zookeeper.connect_string}}\",\n+    \"TASKCFG_ALL_NIFI_ZOOKEEPER_CONNECT_TIMEOUT\": \"{{zookeeper.connect_timeout}}\",\n+    \"TASKCFG_ALL_NIFI_ZOOKEEPER_SESSION_TIMEOUT\": \"{{zookeeper.session_timeout}}\",\n+\n+    \"SECURITY_KERBEROS_KEYTAB_SECRET\": \"{{service.security.kerberos.keytab_secret}}\",\n+    \"TASKCFG_ALL_SECURITY_KERBEROS_ENABLED\": \"{{service.security.kerberos.enabled}}\",\n+    \"TASKCFG_ALL_SECURITY_KERBEROS_PRIMARY\": \"{{service.security.kerberos.primary}}\",\n+    \"TASKCFG_ALL_SECURITY_KERBEROS_REALM\": \"{{service.security.kerberos.realm}}\",\n+    \"TASKCFG_ALL_SECURITY_KERBEROS_DEBUG\": \"{{service.security.kerberos.debug}}\",\n+    \"TASKCFG_ALL_SECURITY_KERBEROS_KDC_HOSTNAME\": \"{{service.security.kerberos.kdc.hostname}}\",\n+    \"TASKCFG_ALL_SECURITY_KERBEROS_KDC_PORT\": \"{{service.security.kerberos.kdc.port}}\",\n+\n+    \"TASKCFG_ALL_NIFI_KERBEROS_DEFAULT_REALM\": \"{{service.security.kerberos.realm}}\",\n+    \"TASKCFG_ALL_NIFI_KERBEROS_AUTHENTICATION_EXPIRATION\": \"{{service.security.kerberos.authentication_expiration}}\",\n+    \"TASKCFG_ALL_NIFI_KERBEROS_SERVICE_PRINCIPAL\": \"{{service.security.kerberos.service_principal}}\",\n+    \"TASKCFG_ALL_NIFI_KERBEROS_USER_PRINCIPAL\": \"{{service.security.kerberos.user_principal}}\",\n+\n+    \"TASKCFG_ALL_NIFI_VARIABLE_REGISTRY_PROPERTIES\": \"{{custom.variable_registry_properties}}\"\n+\n+  },\n+  \"uris\": [\n+    \"{{resource.assets.uris.jre-tar-gz}}\",\n+    \"{{resource.assets.uris.scheduler-zip}}\",\n+    \"{{resource.assets.uris.libmesos-bundle-tar-gz}}\",\n+    \"{{resource.assets.uris.bootstrap-zip}}\"\n+  ],\n+  \"upgradeStrategy\":{\n+    \"minimumHealthCapacity\": 0,\n+    \"maximumOverCapacity\": 0\n+  },\n+  \"healthChecks\": [\n+    {\n+      \"protocol\": \"MESOS_HTTP\",\n+      \"path\": \"/v1/health\",\n+      \"gracePeriodSeconds\": 900,\n+      \"intervalSeconds\": 30,\n+      \"portIndex\": 0,\n+      \"timeoutSeconds\": 30,\n+      \"maxConsecutiveFailures\": 0\n+    }\n+  ],\n   \"portDefinitions\": [\n     {\n-      \"servicePort\": {{networking.service-port}},\n       \"port\": 0,\n-      \"protocol\": \"tcp\", \n-      \"name\": \"{{service.name}}\"\n-    },\n-    {\n-      \"port\": 0,\n-      \"protocol\": \"tcp\", \n-      \"name\": \"remote\"\n-    },\n-    {\n-      \"port\": 0,\n-      \"protocol\": \"tcp\", \n-      \"name\": \"cluster\"\n+      \"protocol\": \"tcp\",\n+      \"name\": \"api\",\n+      \"labels\": { \"VIP_0\": \"/api.{{service.name}}:80\" }\n     }\n-  ],\n-  \"healthChecks\": [\n-    {\n-      \"path\": \"/nifi\",\n-      \"portIndex\": 0,\n-      \"gracePeriodSeconds\": 120,\n-      \"intervalSeconds\": 60,\n-      \"timeoutSeconds\": 20,\n-      \"maxConsecutiveFailures\": 3\n-    }\n-  ],\n-  \"env\": {\n-    \"NIFI_WEB_HTTP_PORT\": \"$PORT0\",\n-    \"NIFI_ZOOKEEPER_CONNECT_STRING\": \"{{nifi.zookeeper}}\",\n-    \"NIFI_ZOOKEEPER_ROOT_NODE\": \"{{nifi.zookeeper-root}}\",\n-    \"NIFI_UI_BANNER_TEXT\": \"{{nifi.banner}}\",\n-    \"NIFI_CLUSTER_IS_NODE\": \"{{nifi.cluster}}\"\n-  },\n-  \"labels\": {\n-    \"DCOS_PACKAGE_FRAMEWORK_NAME\": \"{{service.name}}\",\n-    \"DCOS_PACKAGE_VERSION\": \"1.3.0-0.1\",\n-    \"DCOS_SERVICE_NAME\": \"{{service.name}}\",\n-    \"HAPROXY_GROUP\":\"external\",\n-    \"HAPROXY_0_VHOST\":\"{{networking.virtual-host}}\"\n-  }\n+  ]\n }\n--- 2/package.json\n+++ 100/package.json\n@@ -1,22 +1,22 @@\n {\n-  \"packagingVersion\": \"3.0\",\n+  \"packagingVersion\": \"4.0\",\n+  \"upgradesFrom\": [\n+    \"*\"\n+  ],\n+  \"downgradesTo\": [\n+    \"*\"\n+  ],\n+  \"minDcosReleaseVersion\": \"1.9\",\n   \"name\": \"nifi\",\n-  \"version\": \"1.1.1-0.1\",\n-  \"minDcosReleaseVersion\" : \"1.8\",\n-  \"scm\": \"https://git-wip-us.apache.org/repos/asf?p=nifi.git\",\n-  \"maintainer\": \"mariusz.derela@gmail.com\",\n-  \"website\": \"https://nifi.apache.org\",\n-  \"framework\": false,\n-  \"description\": \"Apache NiFi is an integrated data logistics platform for automating the movement of data between disparate systems. It provides real-time control that makes it easy to manage the movement of data between any source and any destination. It is data source agnostic, supporting disparate and distributed sources of differing formats, schemas, protocols, speeds and sizes such as machines, geo location devices, click streams, files, social feeds, log files and videos and more. It is configurable plumbing for moving data around, similar to how Fedex, UPS or other courier delivery services move parcels around. And just like those services, Apache NiFi allows you to trace your data in real time, just like you could trace a delivery. Installation instruction: https://github.com/dcos/examples/tree/master/1.8/nifi\",\n-  \"tags\": [\"nifi\",\"dataflow\",\"apache\",\"flow\",\"data\"],\n-  \"preInstallNotes\":\"This DC/OS Service is currently in preview. There may be bugs, incomplete features, incorrect documentation, or other discrepancies. Experimental packages should never be used in production!\",\n-  \"postInstallNotes\": \"Nifi has been successfully installed and is accessible through Marathon-LB.\\nDocumentation can be found at https://nifi.apache.org/docs.html\\nPlease keep in mind that first start of nifi can take a more than 60 seconds, so please be patient. If you selected single node installation please add /nifi at the end of URL, ex.: http://NIFI_ENDOPOINT:PORT/nifi \",\n-  \"postUninstallNotes\": \"Nifi has been uninstalled.\",\n-  \"licenses\": [\n-    {\n-      \"name\": \"Apache License Version 2.0\",\n-      \"url\": \"https://github.com/apache/nifi/blob/master/LICENSE\"\n-    }\n+  \"version\": \"0.1.0-1.5.0\",\n+  \"maintainer\": \"support@mesosphere.io\",\n+  \"description\": \"Apache NiFi\",\n+  \"selected\": false,\n+  \"framework\": true,\n+  \"tags\": [\n+    \"nifi\"\n   ],\n-  \"selected\": false\n-}\n+  \"preInstallNotes\": \"Default configuration requires 2 agent nodes each with: 1.1 CPU | 2048 MB MEM | 6 1000 MB Disk.\",\n+  \"postInstallNotes\": \"DC/OS Apache NiFi is being installed!\\n\\n\\tDocumentation: http://YOURNAMEHERE.COM/DOCS\\n\\tIssues: http://YOURNAMEHERE.COM/SUPPORT\",\n+  \"postUninstallNotes\": \"DC/OS Apache NiFi is being uninstalled.\"\n+}--- 2/resource.json\n+++ 100/resource.json\n@@ -1,17 +1,60 @@\n {\n+  \"assets\": {\n+    \"uris\": {\n+      \"jre-tar-gz\": \"https://downloads.mesosphere.com/java/server-jre-8u162-linux-x64.tar.gz\",\n+      \"libmesos-bundle-tar-gz\": \"https://downloads.mesosphere.com/libmesos-bundle/libmesos-bundle-master-28f8827.tar.gz\",\n+      \"bootstrap-zip\": \"http://downloads.mesosphere.com/dcos-commons/artifacts/0.40.2/bootstrap.zip\",\n+      \"scheduler-zip\": \"https://nifi-bucket.s3.amazonaws.com/nifi/assets/0.1.0-1.5.0/nifi-scheduler.zip\",\n+      \"executor-zip\": \"http://downloads.mesosphere.com/dcos-commons/artifacts/0.40.2/executor.zip\",\n+      \"nifi-tar-gz\": \"https://s3-us-west-1.amazonaws.com/nifi-binary/nifi-1.5.0-bin.tar.gz\",\n+      \"nifi-toolkit\": \"https://s3-ap-southeast-2.amazonaws.com/nifi-toolkit/nifi-toolkit-1.5.0-bin.tar.gz\",\n+      \"nifi-janitor-jar\": \"https://s3-ap-southeast-2.amazonaws.com/nifi-toolkit/dcos-nifi-janitor.jar\",\n+      \"nifi-statsd-jar\": \"https://s3-ap-southeast-2.amazonaws.com/nifi-toolkit/dcos-nifi-statsd.jar\",\n+      \"nifi-python-tar-gz\": \"https://s3-us-west-1.amazonaws.com/nifi-python/python-2.7.14.tar.gz\"\n+    }\n+  },\n   \"images\": {\n-    \"icon-small\": \"https://downloads.mesosphere.com/assets/universe/000/nifi-icon-small.png\",\n-    \"icon-medium\": \"https://downloads.mesosphere.com/assets/universe/000/nifi-icon-medium.png\",\n-    \"icon-large\": \"https://downloads.mesosphere.com/assets/universe/000/nifi-icon-large.png\",\n-    \"screenshots\": [\n-      \"https://raw.githubusercontent.com/us3r/apache-nifi/master/media/screenshots/screen1.png\",\n-      \"https://raw.githubusercontent.com/us3r/apache-nifi/master/media/screenshots/screen2.png\"\n-    ]\n+    \"icon-small\": \"https://s3-us-west-1.amazonaws.com/nifi-icons/nifi-icon-small.png\",\n+    \"icon-medium\": \"https://s3-us-west-1.amazonaws.com/nifi-icons/nifi-icon-medium.png\",\n+    \"icon-large\": \"https://s3-us-west-1.amazonaws.com/nifi-icons/nifi-icon-large.png\"\n   },\n-  \"assets\": {\n-    \"container\": {\n-      \"docker\": {\n-        \"dcos-nifi\": \"mderela/apache-nifi:1.3.0\"\n+  \"cli\": {\n+    \"binaries\": {\n+      \"darwin\": {\n+        \"x86-64\": {\n+          \"contentHash\": [\n+            {\n+              \"algo\": \"sha256\",\n+              \"value\": \"8ecaf52587da0284d04d6a0cc0ffd5e572e12a97dadec5ed768a38c02c169781\"\n+            }\n+          ],\n+          \"kind\": \"executable\",\n+          \"url\": \"https://downloads.mesosphere.com/dcos-commons/artifacts/0.40.2/dcos-service-cli-darwin\"\n+        }\n+      },\n+      \"linux\": {\n+        \"x86-64\": {\n+          \"contentHash\": [\n+            {\n+              \"algo\": \"sha256\",\n+              \"value\": \"6d7f4981ef765cd5d43d0888588558e15ab0ac3b5018ec4e94ed07a0cb32c837\"\n+            }\n+          ],\n+          \"kind\": \"executable\",\n+          \"url\": \"https://downloads.mesosphere.com/dcos-commons/artifacts/0.40.2/dcos-service-cli-linux\"\n+        }\n+      },\n+      \"windows\": {\n+        \"x86-64\": {\n+          \"contentHash\": [\n+            {\n+              \"algo\": \"sha256\",\n+              \"value\": \"b34ec5be28899d8485693be416fd465453c24cb8996355a2f3f43e29a9178673\"\n+            }\n+          ],\n+          \"kind\": \"executable\",\n+          \"url\": \"https://downloads.mesosphere.com/dcos-commons/artifacts/0.40.2/dcos-service-cli.exe\"\n+        }\n       }\n     }\n   }\n```\n","created_at":"2018-04-16T16:54:43Z","updated_at":"2018-04-16T19:36:12Z","closed_at":"2018-04-16T19:36:12Z","merged_at":"2018-04-16T19:36:12Z","merge_commit_sha":"e52547bac2ffad5e314675a4d39db7780e55414a","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/mesosphere/universe/pulls/1806/commits","review_comments_url":"https://api.github.com/repos/mesosphere/universe/pulls/1806/comments","review_comment_url":"https://api.github.com/repos/mesosphere/universe/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mesosphere/universe/issues/1806/comments","statuses_url":"https://api.github.com/repos/mesosphere/universe/statuses/a5518bb38287c76774ae434615465710ba84d3c0","head":{"label":"mesosphere:automated/release_nifi_0.1.0-1.5.0_wohduA","ref":"automated/release_nifi_0.1.0-1.5.0_wohduA","sha":"a5518bb38287c76774ae434615465710ba84d3c0","user":{"login":"mesosphere","id":3458585,"avatar_url":"https://avatars0.githubusercontent.com/u/3458585?v=4","gravatar_id":"","url":"https://api.github.com/users/mesosphere","html_url":"https://github.com/mesosphere","followers_url":"https://api.github.com/users/mesosphere/followers","following_url":"https://api.github.com/users/mesosphere/following{/other_user}","gists_url":"https://api.github.com/users/mesosphere/gists{/gist_id}","starred_url":"https://api.github.com/users/mesosphere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mesosphere/subscriptions","organizations_url":"https://api.github.com/users/mesosphere/orgs","repos_url":"https://api.github.com/users/mesosphere/repos","events_url":"https://api.github.com/users/mesosphere/events{/privacy}","received_events_url":"https://api.github.com/users/mesosphere/received_events","type":"Organization","site_admin":false},"repo":{"id":26291234,"name":"universe","full_name":"mesosphere/universe","owner":{"login":"mesosphere","id":3458585,"avatar_url":"https://avatars0.githubusercontent.com/u/3458585?v=4","gravatar_id":"","url":"https://api.github.com/users/mesosphere","html_url":"https://github.com/mesosphere","followers_url":"https://api.github.com/users/mesosphere/followers","following_url":"https://api.github.com/users/mesosphere/following{/other_user}","gists_url":"https://api.github.com/users/mesosphere/gists{/gist_id}","starred_url":"https://api.github.com/users/mesosphere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mesosphere/subscriptions","organizations_url":"https://api.github.com/users/mesosphere/orgs","repos_url":"https://api.github.com/users/mesosphere/repos","events_url":"https://api.github.com/users/mesosphere/events{/privacy}","received_events_url":"https://api.github.com/users/mesosphere/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mesosphere/universe","description":"The Mesosphere Universe package repository.","fork":false,"url":"https://api.github.com/repos/mesosphere/universe","forks_url":"https://api.github.com/repos/mesosphere/universe/forks","keys_url":"https://api.github.com/repos/mesosphere/universe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mesosphere/universe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mesosphere/universe/teams","hooks_url":"https://api.github.com/repos/mesosphere/universe/hooks","issue_events_url":"https://api.github.com/repos/mesosphere/universe/issues/events{/number}","events_url":"https://api.github.com/repos/mesosphere/universe/events","assignees_url":"https://api.github.com/repos/mesosphere/universe/assignees{/user}","branches_url":"https://api.github.com/repos/mesosphere/universe/branches{/branch}","tags_url":"https://api.github.com/repos/mesosphere/universe/tags","blobs_url":"https://api.github.com/repos/mesosphere/universe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mesosphere/universe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mesosphere/universe/git/refs{/sha}","trees_url":"https://api.github.com/repos/mesosphere/universe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mesosphere/universe/statuses/{sha}","languages_url":"https://api.github.com/repos/mesosphere/universe/languages","stargazers_url":"https://api.github.com/repos/mesosphere/universe/stargazers","contributors_url":"https://api.github.com/repos/mesosphere/universe/contributors","subscribers_url":"https://api.github.com/repos/mesosphere/universe/subscribers","subscription_url":"https://api.github.com/repos/mesosphere/universe/subscription","commits_url":"https://api.github.com/repos/mesosphere/universe/commits{/sha}","git_commits_url":"https://api.github.com/repos/mesosphere/universe/git/commits{/sha}","comments_url":"https://api.github.com/repos/mesosphere/universe/comments{/number}","issue_comment_url":"https://api.github.com/repos/mesosphere/universe/issues/comments{/number}","contents_url":"https://api.github.com/repos/mesosphere/universe/contents/{+path}","compare_url":"https://api.github.com/repos/mesosphere/universe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mesosphere/universe/merges","archive_url":"https://api.github.com/repos/mesosphere/universe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mesosphere/universe/downloads","issues_url":"https://api.github.com/repos/mesosphere/universe/issues{/number}","pulls_url":"https://api.github.com/repos/mesosphere/universe/pulls{/number}","milestones_url":"https://api.github.com/repos/mesosphere/universe/milestones{/number}","notifications_url":"https://api.github.com/repos/mesosphere/universe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mesosphere/universe/labels{/name}","releases_url":"https://api.github.com/repos/mesosphere/universe/releases{/id}","deployments_url":"https://api.github.com/repos/mesosphere/universe/deployments","created_at":"2014-11-06T21:37:31Z","updated_at":"2018-04-14T09:33:44Z","pushed_at":"2018-04-16T19:36:12Z","git_url":"git://github.com/mesosphere/universe.git","ssh_url":"git@github.com:mesosphere/universe.git","clone_url":"https://github.com/mesosphere/universe.git","svn_url":"https://github.com/mesosphere/universe","homepage":"http://mesosphere.github.io/universe","size":4843,"stargazers_count":268,"watchers_count":268,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":400,"mirror_url":null,"archived":false,"open_issues_count":118,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":400,"open_issues":118,"watchers":268,"default_branch":"version-3.x"}},"base":{"label":"mesosphere:version-3.x","ref":"version-3.x","sha":"6bd35b5c34e55860a8ea9bad306566d8201ef234","user":{"login":"mesosphere","id":3458585,"avatar_url":"https://avatars0.githubusercontent.com/u/3458585?v=4","gravatar_id":"","url":"https://api.github.com/users/mesosphere","html_url":"https://github.com/mesosphere","followers_url":"https://api.github.com/users/mesosphere/followers","following_url":"https://api.github.com/users/mesosphere/following{/other_user}","gists_url":"https://api.github.com/users/mesosphere/gists{/gist_id}","starred_url":"https://api.github.com/users/mesosphere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mesosphere/subscriptions","organizations_url":"https://api.github.com/users/mesosphere/orgs","repos_url":"https://api.github.com/users/mesosphere/repos","events_url":"https://api.github.com/users/mesosphere/events{/privacy}","received_events_url":"https://api.github.com/users/mesosphere/received_events","type":"Organization","site_admin":false},"repo":{"id":26291234,"name":"universe","full_name":"mesosphere/universe","owner":{"login":"mesosphere","id":3458585,"avatar_url":"https://avatars0.githubusercontent.com/u/3458585?v=4","gravatar_id":"","url":"https://api.github.com/users/mesosphere","html_url":"https://github.com/mesosphere","followers_url":"https://api.github.com/users/mesosphere/followers","following_url":"https://api.github.com/users/mesosphere/following{/other_user}","gists_url":"https://api.github.com/users/mesosphere/gists{/gist_id}","starred_url":"https://api.github.com/users/mesosphere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mesosphere/subscriptions","organizations_url":"https://api.github.com/users/mesosphere/orgs","repos_url":"https://api.github.com/users/mesosphere/repos","events_url":"https://api.github.com/users/mesosphere/events{/privacy}","received_events_url":"https://api.github.com/users/mesosphere/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mesosphere/universe","description":"The Mesosphere Universe package repository.","fork":false,"url":"https://api.github.com/repos/mesosphere/universe","forks_url":"https://api.github.com/repos/mesosphere/universe/forks","keys_url":"https://api.github.com/repos/mesosphere/universe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mesosphere/universe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mesosphere/universe/teams","hooks_url":"https://api.github.com/repos/mesosphere/universe/hooks","issue_events_url":"https://api.github.com/repos/mesosphere/universe/issues/events{/number}","events_url":"https://api.github.com/repos/mesosphere/universe/events","assignees_url":"https://api.github.com/repos/mesosphere/universe/assignees{/user}","branches_url":"https://api.github.com/repos/mesosphere/universe/branches{/branch}","tags_url":"https://api.github.com/repos/mesosphere/universe/tags","blobs_url":"https://api.github.com/repos/mesosphere/universe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mesosphere/universe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mesosphere/universe/git/refs{/sha}","trees_url":"https://api.github.com/repos/mesosphere/universe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mesosphere/universe/statuses/{sha}","languages_url":"https://api.github.com/repos/mesosphere/universe/languages","stargazers_url":"https://api.github.com/repos/mesosphere/universe/stargazers","contributors_url":"https://api.github.com/repos/mesosphere/universe/contributors","subscribers_url":"https://api.github.com/repos/mesosphere/universe/subscribers","subscription_url":"https://api.github.com/repos/mesosphere/universe/subscription","commits_url":"https://api.github.com/repos/mesosphere/universe/commits{/sha}","git_commits_url":"https://api.github.com/repos/mesosphere/universe/git/commits{/sha}","comments_url":"https://api.github.com/repos/mesosphere/universe/comments{/number}","issue_comment_url":"https://api.github.com/repos/mesosphere/universe/issues/comments{/number}","contents_url":"https://api.github.com/repos/mesosphere/universe/contents/{+path}","compare_url":"https://api.github.com/repos/mesosphere/universe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mesosphere/universe/merges","archive_url":"https://api.github.com/repos/mesosphere/universe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mesosphere/universe/downloads","issues_url":"https://api.github.com/repos/mesosphere/universe/issues{/number}","pulls_url":"https://api.github.com/repos/mesosphere/universe/pulls{/number}","milestones_url":"https://api.github.com/repos/mesosphere/universe/milestones{/number}","notifications_url":"https://api.github.com/repos/mesosphere/universe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mesosphere/universe/labels{/name}","releases_url":"https://api.github.com/repos/mesosphere/universe/releases{/id}","deployments_url":"https://api.github.com/repos/mesosphere/universe/deployments","created_at":"2014-11-06T21:37:31Z","updated_at":"2018-04-14T09:33:44Z","pushed_at":"2018-04-16T19:36:12Z","git_url":"git://github.com/mesosphere/universe.git","ssh_url":"git@github.com:mesosphere/universe.git","clone_url":"https://github.com/mesosphere/universe.git","svn_url":"https://github.com/mesosphere/universe","homepage":"http://mesosphere.github.io/universe","size":4843,"stargazers_count":268,"watchers_count":268,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":400,"mirror_url":null,"archived":false,"open_issues_count":118,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":400,"open_issues":118,"watchers":268,"default_branch":"version-3.x"}},"_links":{"self":{"href":"https://api.github.com/repos/mesosphere/universe/pulls/1806"},"html":{"href":"https://github.com/mesosphere/universe/pull/1806"},"issue":{"href":"https://api.github.com/repos/mesosphere/universe/issues/1806"},"comments":{"href":"https://api.github.com/repos/mesosphere/universe/issues/1806/comments"},"review_comments":{"href":"https://api.github.com/repos/mesosphere/universe/pulls/1806/comments"},"review_comment":{"href":"https://api.github.com/repos/mesosphere/universe/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mesosphere/universe/pulls/1806/commits"},"statuses":{"href":"https://api.github.com/repos/mesosphere/universe/statuses/a5518bb38287c76774ae434615465710ba84d3c0"}},"author_association":"COLLABORATOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"ryadav88","id":1666717,"avatar_url":"https://avatars2.githubusercontent.com/u/1666717?v=4","gravatar_id":"","url":"https://api.github.com/users/ryadav88","html_url":"https://github.com/ryadav88","followers_url":"https://api.github.com/users/ryadav88/followers","following_url":"https://api.github.com/users/ryadav88/following{/other_user}","gists_url":"https://api.github.com/users/ryadav88/gists{/gist_id}","starred_url":"https://api.github.com/users/ryadav88/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryadav88/subscriptions","organizations_url":"https://api.github.com/users/ryadav88/orgs","repos_url":"https://api.github.com/users/ryadav88/repos","events_url":"https://api.github.com/users/ryadav88/events{/privacy}","received_events_url":"https://api.github.com/users/ryadav88/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":2,"additions":1476,"deletions":0,"changed_files":4}}
{"actor":{"display_login":"ryadav88"}}