github.com/endocode/docker@v1.4.2-0.20160113120958-46eb4700391e/pkg/aaparser/aaparser.go (about) 1 package aaparser 2 3 import ( 4 "fmt" 5 "log" 6 "os/exec" 7 "strconv" 8 "strings" 9 ) 10 11 // GetVersion returns the major and minor version of apparmor_parser 12 func GetVersion() (int, int, error) { 13 // get the apparmor_version version 14 cmd := exec.Command("apparmor_parser", "--version") 15 16 output, err := cmd.CombinedOutput() 17 if err != nil { 18 log.Fatalf("getting apparmor_parser version failed: %s (%s)", err, output) 19 } 20 21 // parse the version from the output 22 // output is in the form of the following: 23 // AppArmor parser version 2.9.1 24 // Copyright (C) 1999-2008 Novell Inc. 25 // Copyright 2009-2012 Canonical Ltd. 26 lines := strings.SplitN(string(output), "\n", 2) 27 words := strings.Split(lines[0], " ") 28 version := words[len(words)-1] 29 // split by major minor version 30 v := strings.Split(version, ".") 31 if len(v) < 2 { 32 return -1, -1, fmt.Errorf("parsing major minor version failed for %q", version) 33 } 34 35 majorVersion, err := strconv.Atoi(v[0]) 36 if err != nil { 37 return -1, -1, err 38 } 39 minorVersion, err := strconv.Atoi(v[1]) 40 if err != nil { 41 return -1, -1, err 42 } 43 44 return majorVersion, minorVersion, nil 45 }