--- /dev/null
+# == Definition: openstacklib::policy::base
+#
+# This resource configures the policy.json file for an OpenStack service
+#
+# == Parameters:
+#
+# [*file_path*]
+# Path to the policy.json file
+# string; required
+#
+# [*key*]
+# The key to replace the value for
+# string; required; the key to replace the value for
+#
+# [*value*]
+# The value to set
+# string; optional; the value to set
+#
+define openstacklib::policy::base (
+ $file_path,
+ $key,
+ $value = '',
+) {
+
+ # Add entry if it doesn't exists
+ augeas { "${file_path}-${key}-${value}-add":
+ lens => 'Json.lns',
+ incl => $file_path,
+ changes => [
+ "set dict/entry[last()+1] \"${key}\"",
+ "set dict/entry[last()]/string \"${value}\""
+ ],
+ onlyif => "match dict/entry[*][.=\"${key}\"] size == 0"
+ }
+
+ # Requires that the entry is added before this call or it will fail.
+ augeas { "${file_path}-${key}-${value}" :
+ lens => 'Json.lns',
+ incl => $file_path,
+ changes => "set dict/entry[*][.=\"${key}\"]/string ${value}",
+ require => Augeas["${file_path}-${key}-${value}-add"]
+ }
+
+}
+