in software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java [359:402]
protected String buildCreateRolesQuery() {
Map<String, Map<String, ?>> roles = entity.getConfig(PostgreSqlNode.ROLES);
StringBuilder builder = new StringBuilder("\"");
for (Map.Entry<String, ? extends Map<String, ?>> entry : roles.entrySet()) {
String roleName = entry.getKey();
Map<String, ?> roleConfig = entry.getValue();
if (roleConfig == null) roleConfig = ImmutableMap.of();
if (Strings.isBlank(roleName)) {
throw new NullPointerException("Role name must not be blank, but got "+roles);
}
validateInput(roleName, "role name '"+roleName+"'");
builder.append(String.format("CREATE ROLE %s", roleName));
if (roleConfig != null && roleConfig.containsKey(PostgreSqlNode.ROLE_PROPERTIES_KEY)) {
Object rawProps = roleConfig.get("properties");
String props = validateInput((String) rawProps, "role '"+roleName+"' property "+rawProps);;
builder.append(String.format(" WITH %s; ", props));
} else {
builder.append("; ");
}
if (roleConfig.containsKey(PostgreSqlNode.ROLE_PRIVILEGES_KEY)) {
List<String> privileges = toListOfStrings(roleConfig.get(PostgreSqlNode.ROLE_PRIVILEGES_KEY));
for (Object rawPrivilege : privileges) {
String privilege = validateInput((String) rawPrivilege, "role '"+roleName+"' privilege "+rawPrivilege);
builder.append(String.format("GRANT %s TO %s; ", privilege, roleName));
}
}
Set<String> otherConfig = Sets.difference(roleConfig.keySet(),
ImmutableSet.of(PostgreSqlNode.ROLE_PROPERTIES_KEY, PostgreSqlNode.ROLE_PRIVILEGES_KEY));
if (!otherConfig.isEmpty()) {
throw new IllegalArgumentException("Invalid configuration for role "+roleName+", got "+roles);
}
}
builder.append("\"");
return builder.toString();
}