From d2ed2c935bd9d12d5e2c59ff35cf0028856755cf Mon Sep 17 00:00:00 2001 From: Jon Hawkesworth Date: Fri, 15 May 2015 00:29:53 +0100 Subject: [PATCH] Add win_environment module --- .../extras/windows/win_environment.ps1 | 69 ++++++++++++++++ .../modules/extras/windows/win_environment.py | 80 +++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 lib/ansible/modules/extras/windows/win_environment.ps1 create mode 100644 lib/ansible/modules/extras/windows/win_environment.py diff --git a/lib/ansible/modules/extras/windows/win_environment.ps1 b/lib/ansible/modules/extras/windows/win_environment.ps1 new file mode 100644 index 0000000000..3dc936f13f --- /dev/null +++ b/lib/ansible/modules/extras/windows/win_environment.ps1 @@ -0,0 +1,69 @@ +#!powershell +# This file is part of Ansible +# +# Copyright 2015, J Hawkesworth @jhawkesworth +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +# WANT_JSON +# POWERSHELL_COMMON + +$params = Parse-Args $args; +$result = New-Object PSObject; +Set-Attr $result "changed" $false; + +If ($params.state) { + $state = $params.state.ToString().ToLower() + If (($state -ne 'present') -and ($state -ne 'absent') ) { + Fail-Json $result "state is '$state'; must be 'present', or 'absent'" + } +} else { + $state = 'present' +} + +If ($params.name) +{ + $name = $params.name +} else { + Fail-Json $result "missing required argument: name" +} + +$value = $params.value + +If ($params.level) { + $level = $params.level.ToString().ToLower() + If (( $level -ne 'machine') -and ( $level -ne 'user' ) -and ( $level -ne 'process')) { + Fail-Json $result "level is '$level'; must be 'machine', 'user', or 'process'" + } +} + +$before_value = [Environment]::GetEnvironmentVariable($name, $level) + +if ($state -eq "present" ) { + [Environment]::SetEnvironmentVariable($name, $value, $level) +} Elseif ($state -eq "absent") { + [Environment]::SetEnvironmentVariable($name, $null, $level) +} + +$after_value = [Environment]::GetEnvironmentVariable($name, $level) + +Set-Attr $result "name" $name; +Set-Attr $result "before_value" $before_value; +Set-Attr $result "value" $after_value; +Set-Attr $result "level" $level; +if ($before_value -ne $after_value) { + Set-Attr $result "changed" $true; +} + +Exit-Json $result; diff --git a/lib/ansible/modules/extras/windows/win_environment.py b/lib/ansible/modules/extras/windows/win_environment.py new file mode 100644 index 0000000000..885649c413 --- /dev/null +++ b/lib/ansible/modules/extras/windows/win_environment.py @@ -0,0 +1,80 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# (c) 2015, Jon Hawkesworth +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +# this is a windows documentation stub. actual code lives in the .ps1 +# file of the same name + +DOCUMENTATION = ''' +--- +module: win_environment +version_added: "2.0" +short_description: Modifies environment variables on windows guests +description: + - Uses .net Environment to set or remove environment variables. + - Can set at User, Machine or Process level. + - Note that usual rules apply, so existing environments will not change until new processes are started. +options: + state: + description: + - present to ensure environment variable is set, or absent to ensure it is removed + required: false + default: present + choices: + - present + - absent + name: + description: + - The name of the environment variable + required: true + default: no default + value: + description: + - The value to store in the environment variable. Can be omitted for state=absent + required: false + default: no default + level: + description: + - The level at which to set the environment variable. + - Use 'machine' to set for all users. + - Use 'user' to set for the current user that ansible is connected as. + - Use 'process' to set for the current process. Probably not that useful. + required: true + default: no default + choices: + - machine + - process + - user +author: "Jon Hawkesworth (@jhawkesworth)" +''' + +EXAMPLES = ''' + # Set an environment variable for all users + win_environment: + state: present + name: TestVariable + value: "Test value" + level: machine + # Remove an environment variable for the current users + win_environment: + state: absent + name: TestVariable + level: user +''' +