Skip to content

Instantly share code, notes, and snippets.

@JBKahn
Created August 5, 2014 05:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JBKahn/2e62ca874888f035191a to your computer and use it in GitHub Desktop.
Save JBKahn/2e62ca874888f035191a to your computer and use it in GitHub Desktop.
sample of module
#!/usr/bin/python
import json
import re
import subprocess
from subprocess import call
from ansible.module_utils.basic import *
def _escape_single_quotes(string):
return re.sub("'", r"'\''", string)
def _set_value(user, key, value, argument_type):
return subprocess.check_output([
'su', '-', user , '-c', " ".join([ '/usr/bin/gconftool-2 --set --type {} {} "{}"'.format(argument_type, _escape_single_quotes(key), value)])
]).strip()
def _get_value(user, key):
# return subprocess.check_output([
# 'su', '-', user , '-c', '/usr/bin/gconftool-2 --get {}'.format(_escape_single_quotes(key))
# ]).strip()
return subprocess.check_output([
'su', '-', user , '-c', 'gconftool-2 --get {}'.format(_escape_single_quotes(key))
]).strip()
def main():
module = AnsibleModule(
argument_spec = {
'state': { 'choices': ['present'], 'default': 'present' },
'type': { 'choices': ['string', 'bool'], 'default': 'string' },
'user': { 'required': True },
'key': { 'required': True },
'value': { 'required': True },
},
supports_check_mode = True,
)
params = module.params
state = module.params['state']
user = module.params['user']
argument_type = module.params['type']
key = module.params['key']
value = module.params['value']
old_value = _get_value(user, key)
changed = old_value != value
if changed and not module.check_mode:
_set_value(user, key, value, argument_type)
print json.dumps({
'changed': changed,
'key': key,
'value': value,
'old_value': old_value,
})
main()
@JBKahn
Copy link
Author

JBKahn commented Aug 5, 2014

* including generated source, if any, saving to: /home/joseph/.ansible_module_generated
* this may offset any line numbers in tracebacks/debuggers!
***********************************
RAW OUTPUT
{"changed": true, "old_value": "Source Code Pro Semi-Bold 12", "value": "Source Code Pro Semi-Bold 15", "key": "/apps/gnome-terminal/profiles/base-16-monokai-dark/font"}


***********************************
PARSED OUTPUT
{
    "changed": true, 
    "key": "/apps/gnome-terminal/profiles/base-16-monokai-dark/font", 
    "old_value": "Source Code Pro Semi-Bold 12", 
    "value": "Source Code Pro Semi-Bold 15"
}

second run

* including generated source, if any, saving to: /home/joseph/.ansible_module_generated
* this may offset any line numbers in tracebacks/debuggers!
***********************************
RAW OUTPUT
{"changed": false, "old_value": "Source Code Pro Semi-Bold 15", "value": "Source Code Pro Semi-Bold 15", "key": "/apps/gnome-terminal/profiles/base-16-monokai-dark/font"}


***********************************
PARSED OUTPUT
{
    "changed": false, 
    "key": "/apps/gnome-terminal/profiles/base-16-monokai-dark/font", 
    "old_value": "Source Code Pro Semi-Bold 15", 
    "value": "Source Code Pro Semi-Bold 15"
}

still no change for this user.

@JBKahn
Copy link
Author

JBKahn commented Aug 5, 2014

su joseph -c 'gconftool-2 --get /apps/gnome-terminal/profiles/base-16-monokai-dark/font'
Source Code Pro Semi-Bold 12

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment