Skip to content

Instantly share code, notes, and snippets.

@electrofelix
Last active February 22, 2017 15:59
Show Gist options
  • Select an option

  • Save electrofelix/e8922e013a5cd5e9f3fbfb11de52bb58 to your computer and use it in GitHub Desktop.

Select an option

Save electrofelix/e8922e013a5cd5e9f3fbfb11de52bb58 to your computer and use it in GitHub Desktop.
puppet hash manipulate
# desired output
# gerrit_groups => {
# "Administrators" => {
# "members" => ["admin", "creator"]
# },
# "Project Creators" => {
# "members" => ["creator"]
# }
# }
# input data format
$gerrit_users = {
"admin" => {
"full_name" => "Administrator",
"groups" => ["Administrators"],
},
"creator" => {
"full_name" => "Project Creator",
"groups" => [ "Administrators", "Project Creators" ],
},
}
# will result in "Illegal attempt to assign via [index/key]" error
$gerrit_groups = {}
$gerrit_users.filter |$user| { has_key($user[1], "groups") }.map |$username, $userdata| {
$userdata["groups"].map |$group| {
if $gerrit_groups.fetch($group,{}).fetch("members", nil) {
$gerrit_groups[$group]["members"] << $username
} else {
$gerrit_groups[$group] = { "members" => [ $username ] }
}
}
}
gerrit_users = {
"admin" => {
"full_name" => "Administrator",
"groups" => ["Administrators"],
},
"creator" => {
"full_name" => "Project Creator",
"groups" => [ "Administrators", "Project Creators" ],
},
}
gerrit_groups = Hash.new
gerrit_users.select { |username, userdata|
userdata.has_key?("groups")
}.map { |username, userdata|
userdata["groups"].map { |group|
if gerrit_groups.fetch(group, {}).fetch("members", nil)
gerrit_groups[group]["members"] << username
else
gerrit_groups[group] = { "members" => [ username ] }
end
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment