#!/bin/sh

#################################################################################
#
#   Lynis
# ------------------
#
# Copyright 2007-2015, Michael Boelen, CISOfy (michael.boelen@cisofy.com)
# Web site: https://cisofy.com
#
# Lynis comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
# welcome to redistribute it under the terms of the GNU General Public License.
# See LICENSE file for usage of this software.
#
#################################################################################
#
    AUTOMATION_TOOL_FOUND=0
    AUTOMATION_TOOL_RUNNING=""
    BACKUP_AGENT_FOUND=0
    PUPPET_MASTER_RUNNING=0
    SALT_MASTER_RUNNING=0
    SALT_MINION_RUNNING=0
#
#################################################################################
#
    InsertSection "Software: System tooling"
#
#################################################################################
#
# Automation
#
#################################################################################
#
    # Test        : TOOL-5002
    # Description : Check if automation tools are found
    Register --test-no TOOL-5002 --weight L --network NO --description "Checking for automation tools"
    if [ ${SKIPTEST} -eq 0 ]; then

        Display --indent 2 --text "- Checking automation tooling"

        # Cfengine
        if [ ! "${CFAGENTBINARY}" = "" ]; then
            logtext "Result: Cfengine (cfagent) is installed (${CFAGENTBINARY})"
            AUTOMATION_TOOL_FOUND=1
            Display --indent 4 --text "Found: Cfengine (cfagent)" --result FOUND --color GREEN
        fi

        CHEF_LOCATIONS="/opt/chef/bin /opt/chef-server/sv /opt/chefdk/bin"
        for I in ${CHEF_LOCATIONS}; do
            if [ -d ${I} ]; then
                if [ -f ${I}/chef-client ]; then
                    CHEFCLIENTBINARY="${I}/chef-client"
                    AUTOMATION_TOOL_FOUND=1
                    Display --indent 4 --text "Found: Chef client (chef-client)" --result FOUND --color GREEN
                    logtext "Result: found chef-client (chef client daemon) in ${I}"
                fi
                if [ -f ${I}/erchef ]; then
                    CHEFSERVERBINARY="${I}/erchef"
                    logtext "Result: Chef Server (erchef) is installed (${CHEFSERVERBINARY})"
                    AUTOMATION_TOOL_FOUND=1
                    Display --indent 4 --text "Found: Chef Server (erchef)" --result FOUND --color GREEN
                    logtext "Result: found erchef (chef server daemon) in ${I}"
                fi
            fi
        done

        # Puppet
        if [ ! "${PUPPETBINARY}" = "" ]; then
            logtext "Result: Puppet is installed (${PUPPETBINARY})"
            AUTOMATION_TOOL_FOUND=1
            Display --indent 4 --text "Found: Puppet (agent)" --result FOUND --color GREEN
        fi
        IsRunning "puppet master"
        if [ ${RUNNING} -eq 1 ]; then
            logtext "Result: found puppet master"
            PUPPET_MASTER_RUNNING=1
            report "automation_tool_running[]=puppet"
            Display --indent 4 --text "Found: Puppet (master)" --result FOUND --color GREEN
        fi

        # SaltStack
        if [ ! "${SALTMINIONBINARY}" = "" ]; then
            logtext "Result: SaltStack (salt-minion) is installed (${SALTMINIONBINARY})"
            AUTOMATION_TOOL_FOUND=1
            SALT_MINION_RUNNING=1
            Display --indent 4 --text "Found: SaltStack minion (salt-minion)" --result FOUND --color GREEN
        fi
        if [ ! "${SALTMASTERBINARY}" = "" ]; then
            logtext "Result: SaltStack (salt-master) is installed (${SALTMASTERBINARY})"
            AUTOMATION_TOOL_FOUND=1
            Display --indent 4 --text "Found: SaltStack master (salt-master)" --result FOUND --color GREEN
        fi
        IsRunning "salt-master"
        if [ ${RUNNING} -eq 1 ]; then
            logtext "Result: found SaltStack (master)"
            SALT_MASTER_RUNNING=1
            report "automation_tool_running[]=saltstack-master"
            Display --indent 4 --text "Found: SaltStack (master)" --result FOUND --color GREEN
        fi

        if [ ${AUTOMATION_TOOL_FOUND} -eq 1 ]; then
            Display --indent 2 --text "- Automation tooling" --result FOUND --color GREEN
          else
            Display --indent 2 --text "- Automation tooling" --result "NOT FOUND" --color YELLOW
            ReportSuggestion ${TEST_NO} "Determine if automation tools are present for system management"
        fi
    fi
#
#################################################################################
#
# Backup tools
#
#################################################################################
#
    # Netvault
    # Rsync in cron
#
#################################################################################
#
    report "puppet_master=${PUPPET_MASTER_RUNNING}"
    report "salt_master=${SALT_MASTER_RUNNING}"
    report "salt_minion=${SALT_MINION_RUNNING}"


    wait_for_keypress
#
#================================================================================
# Lynis - Copyright 2007-2015, Michael Boelen, CISOfy - https://cisofy.com
