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  }