summaryrefslogtreecommitdiffstats
path: root/modules/package/manifests/cargo.pp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/package/manifests/cargo.pp')
-rw-r--r--modules/package/manifests/cargo.pp39
1 files changed, 39 insertions, 0 deletions
diff --git a/modules/package/manifests/cargo.pp b/modules/package/manifests/cargo.pp
new file mode 100644
index 0000000..2f599b9
--- /dev/null
+++ b/modules/package/manifests/cargo.pp
@@ -0,0 +1,39 @@
+define package::cargo($package, $user, $ensure, $home=undef) {
+ $_home = $home ? {
+ undef => $user ? {
+ 'root' => '/root',
+ default => "/home/$user",
+ },
+ default => $home,
+ }
+
+ case $ensure {
+ 'installed': {
+ exec { "cargo install $package for $user":
+ provider => "shell",
+ command => "cargo install $package",
+ unless => "cargo install --list | grep -q '^$package'",
+ user => $user,
+ timeout => 3600,
+ require => [
+ User[$user],
+ Rust::User[$user],
+ File["${_home}/.cargo"],
+ ];
+ }
+ }
+ 'absent': {
+ exec { "cargo uninstall $package for $user":
+ provider => "shell",
+ command => "cargo uninstall $package",
+ onlyif => "cargo install --list | grep -q '^$package'",
+ user => $user,
+ require => [
+ User[$user],
+ Rust::User[$user],
+ File["${_home}/.cargo"],
+ ];
+ }
+ }
+ }
+}