A collection of CLI tools and utilities used by Trigger.
Returns an md5-crypt hash of a clear-text password.
To get md5-crypt from crypt(3) you must pass an 8-char string starting with ‘$1$’ and ending with ‘$’, resulting in a 12-char salt. This only works on systems where md5-crypt is default and is currently assumed to be Linux.
Parameters: | passwd – Password string to be encrypted |
---|
Command-line interface utilities for Trigger tools. Intended for re-usable pieces of code like user prompts, that don’t fit in other utils modules.
Present a yes-or-no prompt, get input, and return a boolean.
Parameters: |
|
---|
Find and return stdout’s terminal width, if applicable.
Find and return stdouts terminal size as (height, width)
Prints a whirlygig for use in displaying pending operation in a command-line tool. Guaranteed to make the user feel warm and fuzzy and be 1000% bug-free.
Parameters: |
|
---|
Example:
>>> Whirlygig("Doing stuff:", "Done.", 12).run()
Executes the whirlygig!
Used to supress output to sys.stdout (aka print).
Example:
>>> from trigger.utils.cli import NullDevice
>>> import sys
>>> print "1 - this will print to STDOUT"
1 - this will print to STDOUT
>>> original_stdout = sys.stdout # keep a reference to STDOUT
>>> sys.stdout = NullDevice() # redirect the real STDOUT
>>> print "2 - this won't print"
>>>
>>> sys.stdout = original_stdout # turn STDOUT back on
>>> print "3 - this will print to SDTDOUT"
3 - this will print to SDTDOUT
Prints a demon holding a severed head. Best used when things go wrong, like production-impacting network outages caused by fat-fingered ACL changes.
Thanks to Jeff Sullivan for this best error message ever.
Takes an epoch timestamp and returns string of minutes:seconds.
Parameters: | secs – Timestamp (in seconds) |
---|
>>> import time
>>> start = time.time() # Wait a few seconds
>>> finish = time.time()
>>> min_sec(finish - start)
'0:11'
Print a pretty version of timestamp, including timezone info. Expects the incoming datetime object to have proper tzinfo.
Parameters: | t – A datetime.datetime object |
---|
>>> import datetime
>>> from pytz import timezone
>>> localzone = timezone('US/Eastern')
<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>
>>> t = datetime.datetime.now(localzone)
>>> print t
2011-07-19 12:40:30.820920-04:00
>>> print pretty_time(t)
09:40 PDT
>>> t = datetime.datetime(2011,07,20,04,13,tzinfo=localzone)
>>> print t
2011-07-20 04:13:00-05:00
>>> print pretty_time(t)
tomorrow 02:13 PDT
Present a proceed prompt. Return True if Y, else False
Functions that perform network-based things like ping, port tests, etc.
Returns pass/fail for a ping. Supports POSIX only.
Parameters: |
|
---|
>>> from trigger.utils import network
>>> network.ping('aol.com')
True
>>> network.ping('192.168.199.253')
False
Attempts to connect to a TCP port. Returns a Boolean.
If check_result is set, the first line of output is retreived from the connection and the starting characters must match expected_result.
Parameters: |
|
---|
>>> test_tcp_port('aol.com', 80)
True
>>> test_tcp_port('aol.com', 12345)
False
Connect to a TCP port and confirm the SSH version. Defaults to SSHv2.
Parameters: |
|
---|
>>> test_ssh('localhost')
True
>>> test_ssh('localhost', version='SSH-1.5')
False
Determines if an IP address is internal to your network. Relies on networks specified in settings.INTERNAL_NETWORKS.
Parameters: | ip – IP address to test. |
---|
>>> address_is_internal('1.1.1.1')
False
Provides a CVS like wrapper for local RCS (Revision Control System) with common commands.
Simple wrapper for CLI rcs command. An instance is bound to a file.
Parameters: |
|
---|
>>> from trigger.utils.rcs import RCS
>>> rcs = RCS('foo')
>>> rcs.lock()
True
>>> f = open('foo', 'w')
>>> f.write('bar\n')
>>> f.close()
>>> rcs.checkin('This is my commit message')
True
>>> print rcs.log()
RCS file: RCS/foo,v
Working file: foo
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
----------------------------
revision 1.2
date: 2011/07/08 21:01:28; author: jathan; state: Exp; lines: +1 -0
This is my commit message
----------------------------
revision 1.1
date: 2011/07/08 20:56:53; author: jathan; state: Exp;
first commit
Perform an RCS checkin. If successful this also unlocks the file, so there is no need to unlock it afterward.
Parameters: |
|
---|
>>> rcs.checkin('This is my commit message')
True
Perform an RCS checkout with lock. Returns boolean of whether lock was sucessful.
Parameters: | verbose – Print command output |
---|
>>> rcs.lock()
True
Keep trying to lock the file until a lock is obtained.
Parameters: |
|
---|
>>> rcs.lock_loop(timeout=1)
Sleeping to wait for the lock on the file: foo
Sleeping to wait for the lock on the file: foo
>>> rcs.lock_loop(timeout=1, verbose=True)
RCS/foo,v --> foo
co: RCS/foo,v: Revision 1.2 is already locked by joe.
Sleeping to wait for the lock on the file: foo
RCS/foo,v --> foo
co: RCS/foo,v: Revision 1.2 is already locked by joe.
Returns the RCS log as a string (see above).
Perform an RCS checkout with unlock (for cancelling changes).
Parameters: | verbose – Print command output |
---|
>>> rcs.unlock()
True