public FileTemplate createUserDataTemplate( String scriptDirectory, Map<String, String> properties) { Preconditions.checkNotNull(scriptDirectory, "scriptDirectory cannot be null"); Preconditions.checkNotNull(properties, "properties cannot be null"); String dns = properties.get(DNS_PROPERTY); String gateway = properties.get(GATEWAY_PROPERTY); String netmask = properties.get(NETMASK_PROPERTY); String nodeIndexStr = properties.get(NodeTemplateUtils.NODE_INDEX_PROPERTY); List<String> zookeeperIps = NodeTemplateUtils.deserializeAddressList(properties.get(ZOOKEEPER_IPS_PROPERTY)); int nodeIndex = Integer.parseInt(nodeIndexStr); String ipAddress = zookeeperIps.get(nodeIndex); String cidrSignature = new SubnetUtils(ipAddress, netmask).getInfo().getCidrSignature(); String zkParameters = createZookeeperParameters(zookeeperIps); Map<String, String> parameters = new HashMap(); parameters.put("$DNS", "DNS=" + dns); parameters.put("$GATEWAY", gateway); parameters.put("$ZK_ID", Integer.toString(nodeIndex + 1)); parameters.put("$ADDRESS", cidrSignature); parameters.put("$ZK_PARAMETERS", zkParameters); FileTemplate template = new FileTemplate(); template.filePath = Paths.get(scriptDirectory, ZOOKEEPER_USER_DATA_TEMPLATE).toString(); template.parameters = parameters; return template; }