Skip to content

Instantly share code, notes, and snippets.

@garlandkr
Last active December 11, 2015 02:49
Show Gist options
  • Save garlandkr/4533728 to your computer and use it in GitHub Desktop.
Save garlandkr/4533728 to your computer and use it in GitHub Desktop.
Update to the latest Logstash version, requires sh module and lxml (pip install sh lxml) and python headers. If you are on Ubuntu use: apt-get -y install python-dev python-pip libxml2-dev libxslt-dev; pip install lxml sh
#!/usr/bin/python
import re
import sh
import urllib
from lxml import objectify, etree
from distutils.version import StrictVersion
url = "https://logstash.objects.dreamhost.com/" # xml listing of releases
logstash_dir = "/opt/logstash"
# Checking the Logstash version might take a while, be patient.
version_parse = re.compile("release\/logstash-(.*)-monolithic\.jar")
version_current = sh.java("-jar", "%s/logstash.jar" % logstash_dir, "agent", "-V").split(" ")[1].strip('\n')
response = urllib.urlopen(url).read().replace('<?xml version="1.0" encoding="UTF-8"?>','')
response = response.replace(" xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\"", "")
xml = objectify.fromstring(response)
tree = xml.getchildren()
# Version as key, with a dict as value. Example:
# {'1.1.1': {'releasename': 'release/logstash-1.1.1-monolithic.jar'}}
available_versions = {}
for subtree in tree:
for release in subtree.iterchildren():
if release.tag == "Key":
release = str(release)
matching = re.search(version_parse, release)
if matching:
available_versions[matching.group(1)] = {'releasename': release}
for version in available_versions:
if StrictVersion(version_current) < StrictVersion(version):
new_version_url = url+available_versions[version]['releasename']
urllib.urlretrieve(new_version_url, "%s/%s" % (logstash_dir, "logstash.jar"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment