Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
9829033a
Commit
9829033a
authored
Aug 27, 2012
by
Tim Bielawa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Now reading from a config file actually works.
parent
62ffeb93
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
87 additions
and
90 deletions
+87
-90
library/nagios
+87
-90
No files found.
library/nagios
View file @
9829033a
...
...
@@ -14,19 +14,20 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
remaining tasks:
- figure out why services=foo1,foo2,...fooN doesn't show output for each
fooX
- cleanup each methods return statements so they're not doing strange thigs.
Configuration:
-> really, we only need to exit 'couldnt' write to command file' in ONE place
If your nagios cmdfile is not /var/spool/nagios/cmd/nagios.cmd you
can configure ansible (on your nagios server) to use the correct
one by making a file called /etc/ansible/modules/nagios.conf that
looks like this:
[main]
cmdfile = /path/to/your/nagios.cmd
- finish up reading from a config file
When calling this module via ansible, use the 'cmdfile' parameter to
set it explicitly.
"""
...
...
@@ -34,7 +35,82 @@ import ConfigParser
import
types
import
time
MODULE_CONFIG
=
'/etc/ansible/modules/nagios.conf'
DEFAULT_CMDFILE
=
'/var/spool/nagios/cmd/nagios.cmd'
######################################################################
def
which_cmdfile
():
try
:
config
=
ConfigParser
.
SafeConfigParser
({
'cmdfile'
:
DEFAULT_CMDFILE
})
config
.
read
(
MODULE_CONFIG
)
return
config
.
get
(
'main'
,
'cmdfile'
)
except
:
return
DEFAULT_CMDFILE
######################################################################
def
main
():
ACTION_CHOICES
=
[
'downtime'
,
'silence'
,
'unsilence'
,
'enable_alerts'
,
'disable_alerts'
]
module
=
AnsibleModule
(
argument_spec
=
dict
(
action
=
dict
(
required
=
True
,
default
=
None
,
choices
=
ACTION_CHOICES
),
author
=
dict
(
default
=
'Ansible'
),
host
=
dict
(
required
=
True
,
default
=
None
),
minutes
=
dict
(
default
=
30
),
cmdfile
=
dict
(
default
=
which_cmdfile
()),
services
=
dict
(
default
=
None
,
aliases
=
[
'service'
]),
)
)
action
=
module
.
params
[
'action'
]
minutes
=
module
.
params
[
'minutes'
]
services
=
module
.
params
[
'services'
]
##################################################################
# Required args per action:
# downtime = (minutes, service, host)
# (un)silence = (host)
# (enable/disable)_alerts = (service, host)
#
# AnsibleModule will verify most stuff, we need to verify
# 'minutes' and 'service' manually.
##################################################################
if
action
==
'downtime'
:
# Make sure there's an actual service selected
if
not
services
:
module
.
fail_json
(
msg
=
'no service selected to set downtime for'
)
# Make sure minutes is a number
try
:
m
=
int
(
minutes
)
if
not
isinstance
(
m
,
types
.
IntType
):
module
.
fail_json
(
msg
=
'minutes must be a number'
)
except
:
module
.
fail_json
(
msg
=
'invalid entry for minutes'
)
##################################################################
if
action
in
[
'enable_alerts'
,
'disable_alerts'
]:
if
not
services
:
module
.
fail_json
(
msg
=
'a service is required when setting alerts'
)
##################################################################
ansible_nagios
=
Nagios
(
module
,
**
module
.
params
)
ansible_nagios
.
act
()
##################################################################
######################################################################
class
Nagios
(
object
):
"""
Perform common tasks in Nagios related to downtime and
...
...
@@ -48,16 +124,6 @@ class Nagios(object):
Note that in the case of `schedule_svc_downtime`,
`enable_svc_notifications`, and `disable_svc_notifications`, the
service argument should be passed as a list.
Configuration:
If your nagios cmdfile is not /var/spool/nagios/cmd/nagios.cmd you
can configure this by creating a file called
/etc/ansible/modules/nagios.conf that looks like this:
[main]
cmdfile = /path/to/your/nagios.cmd
"""
def
__init__
(
self
,
module
,
**
kwargs
):
...
...
@@ -88,13 +154,14 @@ class Nagios(object):
"""
try
:
fp
=
open
(
self
.
cmdfile
,
'
a
'
)
fp
=
open
(
self
.
cmdfile
,
'
w
'
)
fp
.
write
(
cmd
)
fp
.
flush
()
fp
.
close
()
self
.
command_results
.
append
(
cmd
.
strip
())
except
IOError
:
self
.
module
.
fail_json
(
msg
=
'unable to write to nagios command file'
,
cmdfile
=
self
.
cmdfile
)
self
.
module
.
fail_json
(
msg
=
'unable to write to nagios command file'
,
cmdfile
=
self
.
cmdfile
)
def
_fmt_dt_str
(
self
,
cmd
,
host
,
duration
,
author
=
None
,
comment
=
"Scheduling downtime"
,
start
=
None
,
...
...
@@ -613,76 +680,6 @@ class Nagios(object):
changed
=
True
)
######################################################################
# Ansible module configuration
def
which_cmdfile
():
CFG
=
'/etc/ansible/modules/nagios.conf'
default_cmdfile
=
'/var/spool/nagios/cmd/nagios.cmd'
try
:
c
=
ConfigParser
.
read
(
CFG
)
return
c
.
get
(
'main'
,
'cmdfile'
,
default_cmdfile
)
except
:
return
default_cmdfile
######################################################################
def
main
():
ACTION_CHOICES
=
[
'downtime'
,
'silence'
,
'unsilence'
,
'enable_alerts'
,
'disable_alerts'
]
module
=
AnsibleModule
(
argument_spec
=
dict
(
action
=
dict
(
required
=
True
,
default
=
None
,
choices
=
ACTION_CHOICES
),
author
=
dict
(
default
=
'Ansible'
),
host
=
dict
(
required
=
True
,
default
=
None
),
minutes
=
dict
(
default
=
30
),
cmdfile
=
dict
(
default
=
'/var/spool/nagios/cmd/nagios.cmd'
),
services
=
dict
(
default
=
None
,
aliases
=
[
'service'
]),
)
)
action
=
module
.
params
[
'action'
]
minutes
=
module
.
params
[
'minutes'
]
services
=
module
.
params
[
'services'
]
##################################################################
# Required args per action:
# downtime = (minutes, service, host)
# (un)silence = (host)
# (enable/disable)_alerts = (service, host)
#
# AnsibleModule will verify most stuff, we need to verify
# 'minutes' and 'service' manually.
##################################################################
if
action
==
'downtime'
:
# Make sure there's an actual service selected
if
not
services
:
module
.
fail_json
(
msg
=
'no service selected to set downtime for'
)
# Make sure minutes is a number
try
:
m
=
int
(
minutes
)
if
not
isinstance
(
m
,
types
.
IntType
):
module
.
fail_json
(
msg
=
'minutes must be a number'
)
except
:
module
.
fail_json
(
msg
=
'invalid entry for minutes'
)
##################################################################
if
action
in
[
'enable_alerts'
,
'disable_alerts'
]:
if
not
services
:
module
.
fail_json
(
msg
=
'a service is required when setting alerts'
)
##################################################################
ansible_nagios
=
Nagios
(
module
,
**
module
.
params
)
ansible_nagios
.
act
()
# this is magic, see lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>>
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment