Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
serverdensity
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Ansible
Plugins
serverdensity
Commits
49219be9
Commit
49219be9
authored
9 years ago
by
jurgenhaas
Browse files
Options
Downloads
Patches
Plain Diff
Adjust plugin for Ansible version 2
parent
d10c6313
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
action_plugins/serverdensity.py
+67
-79
67 additions, 79 deletions
action_plugins/serverdensity.py
with
67 additions
and
79 deletions
action_plugins/serverdensity.py
+
67
−
79
View file @
49219be9
...
@@ -4,21 +4,30 @@ import requests
...
@@ -4,21 +4,30 @@ import requests
import
tempfile
import
tempfile
import
yaml
import
yaml
from
ansible.callbacks
import
vv
from
ansible.errors
import
AnsibleError
as
ae
from
ansible.errors
import
AnsibleError
as
ae
from
ansible.runner.return_data
import
ReturnData
from
ansible.plugins.action
import
ActionBase
from
ansible.utils
import
parse_kv
from
ansible.utils.boolean
import
boolean
from
ansible.vars
import
VariableManager
class
ActionModule
(
object
):
try
:
from
__main__
import
display
except
ImportError
:
from
ansible.utils.display
import
Display
display
=
Display
()
class
ActionModule
(
ActionBase
):
'''
Create new host or sync all of your inventory over at ServerDensity
'''
'''
Create new host or sync all of your inventory over at ServerDensity
'''
### We need to be able to modify the inventory
### We need to be able to modify the inventory
BYPASS_HOST_LOOP
=
True
BYPASS_HOST_LOOP
=
True
TRANSFERS_FILES
=
False
TRANSFERS_FILES
=
False
def
__init__
(
self
,
runner
):
def
__init__
(
self
,
task
,
connection
,
play_context
,
loader
,
templar
,
self
.
runner
=
runner
shared_loader_obj
):
super
(
ActionModule
,
self
).
__init__
(
task
,
connection
,
play_context
,
loader
,
templar
,
shared_loader_obj
)
self
.
api_token
=
None
self
.
api_token
=
None
self
.
args
=
{}
self
.
vars
=
{}
self
.
devices
=
[]
self
.
devices
=
[]
self
.
services
=
[]
self
.
services
=
[]
...
@@ -29,30 +38,28 @@ class ActionModule(object):
...
@@ -29,30 +38,28 @@ class ActionModule(object):
self
.
force_update
=
False
self
.
force_update
=
False
self
.
cache_file_name
=
None
self
.
cache_file_name
=
None
def
run
(
self
,
conn
,
tmp
,
module_name
,
module_args
,
inject
,
complex_args
=
None
,
**
kwargs
):
def
run
(
self
,
tmp
=
None
,
task_vars
=
None
):
'''
handler for file transfer operations
'''
if
task_vars
is
None
:
task_vars
=
dict
()
self
.
vars
=
task_vars
if
self
.
runner
.
noop_on_check
(
inject
):
result
=
super
(
ActionModule
,
self
).
run
(
tmp
,
task_vars
)
return
ReturnData
(
conn
=
conn
,
comm_ok
=
True
,
result
=
dict
(
skipped
=
True
,
msg
=
'
check mode not supported for this module
'
))
args
=
{}
if
self
.
_play_context
.
check_mode
:
if
complex_args
:
result
[
'
skipped
'
]
=
True
args
.
update
(
complex_args
)
result
[
'
msg
'
]
=
'
check mode not supported for this module
'
args
.
update
(
parse_kv
(
module_args
))
return
result
if
'
api_token
'
in
args
:
self
.
api_token
=
args
.
get
(
'
api_token
'
)
self
.
api_token
=
self
.
_task
.
args
.
get
(
'
api_token
'
,
task_vars
.
get
(
'
sd_api_token
'
,
False
))
else
:
if
not
self
.
api_token
:
allgroup
=
self
.
runner
.
inventory
.
get_group
(
'
all
'
)
raise
ae
(
"'
api_token
'
is a required argument or you define the variable
'
sd_api_token
'
in your inventory.
"
)
allvariables
=
allgroup
.
get_variables
()
if
'
sd_api_token
'
in
allvariables
:
self
.
api_token
=
allvariables
.
get
(
'
sd_api_token
'
)
else
:
raise
ae
(
"'
api_token
'
is a required argument.
"
)
self
.
force_update
=
args
.
get
(
'
force
'
,
False
)
self
.
force_update
=
boolean
(
self
.
_task
.
args
.
get
(
'
force
'
)
)
self
.
cache_file_name
=
args
.
get
(
'
cache
'
,
False
)
self
.
cache_file_name
=
self
.
_task
.
args
.
get
(
'
cache
'
,
False
)
cleanup
=
args
.
get
(
'
cleanup
'
,
False
)
cleanup
=
boolean
(
self
.
_task
.
args
.
get
(
'
cleanup
'
)
)
just_download
=
args
.
get
(
'
readonly
'
,
False
)
just_download
=
boolean
(
self
.
_task
.
args
.
get
(
'
readonly
'
)
)
output
=
args
.
get
(
'
output
'
,
False
)
output
=
self
.
_task
.
args
.
get
(
'
output
'
,
False
)
if
just_download
:
if
just_download
:
self
.
force_update
=
False
self
.
force_update
=
False
...
@@ -62,30 +69,29 @@ class ActionModule(object):
...
@@ -62,30 +69,29 @@ class ActionModule(object):
if
output
and
self
.
cache_file_name
!=
'
False
'
:
if
output
and
self
.
cache_file_name
!=
'
False
'
:
self
.
cache_file_name
=
tempfile
.
mktemp
(
prefix
=
'
sd_
'
,
suffix
=
'
.json
'
)
self
.
cache_file_name
=
tempfile
.
mktemp
(
prefix
=
'
sd_
'
,
suffix
=
'
.json
'
)
result
=
{}
self
.
list_all
()
self
.
list_all
()
if
output
:
if
output
:
if
os
.
path
.
exists
(
self
.
cache_file_name
):
if
os
.
path
.
exists
(
self
.
cache_file_name
):
vv
(
'
Writing upstream settings to %s
'
%
os
.
path
.
abspath
(
output
))
display
.
vv
(
'
Writing upstream settings to %s
'
%
os
.
path
.
abspath
(
output
))
with
open
(
self
.
cache_file_name
,
'
r
'
)
as
content_file
:
with
open
(
self
.
cache_file_name
,
'
r
'
)
as
content_file
:
content
=
json
.
load
(
content_file
)
content
=
json
.
load
(
content_file
)
with
open
(
output
,
'
w
'
)
as
output_file
:
with
open
(
output
,
'
w
'
)
as
output_file
:
yaml
.
safe_dump
(
content
,
output_file
,
encoding
=
'
utf-8
'
,
allow_unicode
=
True
)
yaml
.
safe_dump
(
content
,
output_file
,
encoding
=
'
utf-8
'
,
allow_unicode
=
True
)
if
just_download
:
if
just_download
:
vv
(
'
Downloaded settings to %s
'
%
self
.
cache_file_name
)
result
[
'
msg
'
]
=
'
Downloaded settings to %s
'
%
self
.
cache_file_name
return
ReturnData
(
conn
=
conn
,
comm_ok
=
True
,
result
=
result
)
result
[
'
changed
'
]
=
False
return
result
services
=
{}
services
=
{}
devicegroup_alerts
=
{}
devicegroup_alerts
=
{}
servicegroup_alerts
=
{}
servicegroup_alerts
=
{}
vv
(
'
Ensure hosts...
'
)
display
.
vv
(
'
Ensure hosts...
'
)
for
host
in
self
.
runner
.
host_set
:
for
host
in
self
.
vars
.
get
(
'
ansible_play_hosts
'
)
:
vv
(
'
-
'
+
host
)
display
.
vv
(
'
-
'
+
host
)
host_vars
=
inject
[
'
hostvars
'
][
host
]
host_vars
=
self
.
vars
[
'
hostvars
'
][
host
]
facts
=
host_vars
.
get
(
'
ansible_facts
'
,
{})
facts
=
host_vars
.
get
(
'
ansible_facts
'
,
{})
location
=
host_vars
.
get
(
'
location
'
)
location
=
host_vars
.
get
(
'
location
'
)
if
not
location
:
if
not
location
:
...
@@ -145,50 +151,49 @@ class ActionModule(object):
...
@@ -145,50 +151,49 @@ class ActionModule(object):
alerts
=
host_vars
.
get
(
'
sd_alerts
'
)
alerts
=
host_vars
.
get
(
'
sd_alerts
'
)
if
alerts
:
if
alerts
:
vv
(
'
- - Ensure device alerts...
'
)
display
.
vv
(
'
- - Ensure device alerts...
'
)
for
alertname
in
alerts
:
for
alertname
in
alerts
:
vv
(
'
- - -
'
+
alertname
)
display
.
vv
(
'
- - -
'
+
alertname
)
alert
=
alerts
.
get
(
alertname
)
alert
=
alerts
.
get
(
alertname
)
alert
.
__setitem__
(
'
host
'
,
host
)
alert
.
__setitem__
(
'
host
'
,
host
)
self
.
ensure_alert
(
alert
,
'
device
'
)
self
.
ensure_alert
(
alert
,
'
device
'
)
vv
(
'
Ensure device group alerts...
'
)
display
.
vv
(
'
Ensure device group alerts...
'
)
for
groupname
in
devicegroup_alerts
:
for
groupname
in
devicegroup_alerts
:
vv
(
'
-
'
+
groupname
)
display
.
vv
(
'
-
'
+
groupname
)
group_alerts
=
devicegroup_alerts
.
get
(
groupname
)
group_alerts
=
devicegroup_alerts
.
get
(
groupname
)
for
alertname
in
group_alerts
:
for
alertname
in
group_alerts
:
vv
(
'
- -
'
+
alertname
)
display
.
vv
(
'
- -
'
+
alertname
)
alert
=
group_alerts
.
get
(
alertname
)
alert
=
group_alerts
.
get
(
alertname
)
self
.
ensure_alert
(
alert
,
'
deviceGroup
'
,
groupname
)
self
.
ensure_alert
(
alert
,
'
deviceGroup
'
,
groupname
)
vv
(
'
Ensure services...
'
)
display
.
vv
(
'
Ensure services...
'
)
for
servicename
in
services
:
for
servicename
in
services
:
vv
(
'
-
'
+
servicename
)
display
.
vv
(
'
-
'
+
servicename
)
service
=
services
.
get
(
servicename
)
service
=
services
.
get
(
servicename
)
self
.
ensure_service
(
servicename
,
service
)
self
.
ensure_service
(
servicename
,
service
)
alerts
=
service
.
get
(
'
alerts
'
)
alerts
=
service
.
get
(
'
alerts
'
)
if
alerts
:
if
alerts
:
vv
(
'
- - Ensure service alerts...
'
)
display
.
vv
(
'
- - Ensure service alerts...
'
)
for
alertname
in
alerts
:
for
alertname
in
alerts
:
vv
(
'
- - -
'
+
alertname
)
display
.
vv
(
'
- - -
'
+
alertname
)
alert
=
alerts
.
get
(
alertname
)
alert
=
alerts
.
get
(
alertname
)
alert
.
__setitem__
(
'
service
'
,
service
.
get
(
'
name
'
))
alert
.
__setitem__
(
'
service
'
,
service
.
get
(
'
name
'
))
self
.
ensure_alert
(
alert
,
'
service
'
)
self
.
ensure_alert
(
alert
,
'
service
'
)
vv
(
'
Ensure service group alerts...
'
)
display
.
vv
(
'
Ensure service group alerts...
'
)
for
servicegroupname
in
servicegroup_alerts
:
for
servicegroupname
in
servicegroup_alerts
:
vv
(
'
-
'
+
servicegroupname
)
display
.
vv
(
'
-
'
+
servicegroupname
)
alert
=
servicegroup_alerts
.
get
(
servicegroupname
)
alert
=
servicegroup_alerts
.
get
(
servicegroupname
)
groupname
=
alert
.
get
(
'
group
'
)
groupname
=
alert
.
get
(
'
group
'
)
self
.
ensure_alert
(
alert
,
'
serviceGroup
'
,
groupname
)
self
.
ensure_alert
(
alert
,
'
serviceGroup
'
,
groupname
)
if
cleanup
:
if
cleanup
:
vv
(
'
Cleanup unused alerts...
'
)
display
.
vv
(
'
Cleanup unused alerts...
'
)
self
.
cleanup_alerts
()
self
.
cleanup_alerts
()
vv
(
'
Completed successfully!
'
)
result
[
'
msg
'
]
=
'
Completed successfully!
'
return
result
return
ReturnData
(
conn
=
conn
,
comm_ok
=
True
,
result
=
result
)
def
_request
(
self
,
path
,
data
=
None
,
method
=
'
GET
'
):
def
_request
(
self
,
path
,
data
=
None
,
method
=
'
GET
'
):
encoder
=
json
.
JSONEncoder
()
encoder
=
json
.
JSONEncoder
()
...
@@ -300,27 +305,18 @@ class ActionModule(object):
...
@@ -300,27 +305,18 @@ class ActionModule(object):
return
False
return
False
def
_list_objects
(
self
,
type
,
path
):
def
_list_objects
(
self
,
type
,
path
):
vv
(
"
Reading %s from SD
"
%
type
)
display
.
vv
(
"
Reading %s from SD
"
%
type
)
changed
=
False
changed
=
False
allgroup
=
self
.
runner
.
inventory
.
get_group
(
'
all
'
)
if
not
self
.
vars
.
has_key
(
'
_serverdensity_
'
+
type
):
allvariables
=
allgroup
.
get_variables
()
if
'
_serverdensity_
'
+
type
not
in
allvariables
:
changed
=
True
changed
=
True
objects
=
self
.
_request
(
path
)
self
.
vars
.
__setitem__
(
'
_serverdensity_
'
+
type
,
self
.
_request
(
path
))
allgroup
.
set_variable
(
'
_serverdensity_
'
+
type
,
objects
)
return
changed
,
self
.
vars
.
get
(
'
_serverdensity_
'
+
type
)
else
:
objects
=
allvariables
.
get
(
'
_serverdensity_
'
+
type
)
return
changed
,
objects
def
_list_devices_agent_key
(
self
):
def
_list_devices_agent_key
(
self
):
for
device
in
self
.
devices
:
for
device
in
self
.
devices
:
hostname
=
device
.
get
(
'
name
'
)
hostname
=
device
.
get
(
'
name
'
)
if
hostname
in
self
.
runner
.
inventory
.
_hosts_cache
:
if
hostname
in
self
.
vars
[
'
ansible_play_hosts
'
]:
host
=
self
.
runner
.
inventory
.
_hosts_cache
[
hostname
]
self
.
vars
[
'
hostvars
'
][
hostname
][
'
sd_agent_key
'
]
=
device
.
get
(
'
agentKey
'
)
host
.
set_variable
(
'
sd_agent_key
'
,
device
.
get
(
'
agentKey
'
))
if
hostname
in
self
.
runner
.
inventory
.
_vars_per_host
:
hostvars
=
self
.
runner
.
inventory
.
_vars_per_host
.
get
(
hostname
)
hostvars
.
__setitem__
(
'
sd_agent_key
'
,
device
.
get
(
'
agentKey
'
))
def
list_devices
(
self
):
def
list_devices
(
self
):
if
len
(
self
.
devices
)
==
0
:
if
len
(
self
.
devices
)
==
0
:
...
@@ -342,12 +338,10 @@ class ActionModule(object):
...
@@ -342,12 +338,10 @@ class ActionModule(object):
def
list_notifications
(
self
):
def
list_notifications
(
self
):
if
len
(
self
.
notifications
)
==
0
:
if
len
(
self
.
notifications
)
==
0
:
allgroup
=
self
.
runner
.
inventory
.
get_group
(
'
all
'
)
if
self
.
vars
.
has_key
(
'
sd_notifications
'
):
allvariables
=
allgroup
.
get_variables
()
self
.
notifications
=
self
.
vars
.
get
(
'
sd_notifications
'
)
if
'
sd_notifications
'
in
allvariables
:
self
.
notifications
=
allvariables
.
get
(
'
sd_notifications
'
)
else
:
else
:
filename
=
self
.
runner
.
inventory
.
base
dir
(
)
+
'
/sd_notifications.json
'
filename
=
self
.
vars
.
get
(
'
inventory
_
dir
'
)
+
'
/sd_notifications.json
'
if
os
.
path
.
exists
(
filename
):
if
os
.
path
.
exists
(
filename
):
with
open
(
filename
,
'
r
'
)
as
content_file
:
with
open
(
filename
,
'
r
'
)
as
content_file
:
self
.
notifications
=
json
.
load
(
content_file
)
self
.
notifications
=
json
.
load
(
content_file
)
...
@@ -428,13 +422,7 @@ class ActionModule(object):
...
@@ -428,13 +422,7 @@ class ActionModule(object):
self
.
devices
.
remove
(
old_device
)
self
.
devices
.
remove
(
old_device
)
self
.
devices
.
append
(
device
)
self
.
devices
.
append
(
device
)
self
.
cache_update
(
False
)
self
.
cache_update
(
False
)
self
.
vars
[
'
hostvars
'
][
hostname
][
'
sd_agent_key
'
]
=
device
.
get
(
'
agentKey
'
)
if
hostname
in
self
.
runner
.
inventory
.
_hosts_cache
:
host
=
self
.
runner
.
inventory
.
_hosts_cache
[
hostname
]
host
.
set_variable
(
'
sd_agent_key
'
,
device
.
get
(
'
agentKey
'
))
if
hostname
in
self
.
runner
.
inventory
.
_vars_per_host
:
hostvars
=
self
.
runner
.
inventory
.
_vars_per_host
.
get
(
hostname
)
hostvars
.
__setitem__
(
'
sd_agent_key
'
,
device
.
get
(
'
agentKey
'
))
def
ensure_service
(
self
,
servicename
,
service
):
def
ensure_service
(
self
,
servicename
,
service
):
serviceId
=
self
.
_get_service_id
(
servicename
)
serviceId
=
self
.
_get_service_id
(
servicename
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment