Forum: CFEngine Help
Subject: Re: Managing Splunk with CFEngine?
Author: msvob...@linkedin.com
Link to topic: https://cfengine.com/forum/read.php?3,24377,24391#msg-24391

This is the policy that I use to deploy and manage the Splunk forwarders.  
"all_splunk" here is a global class that contains the search heads and 
indexers, so, this is affecting all machines that Cfengine is deployed to, 
other than those..

I fetch the binaries over HTTP, compute a checksum, extract a tarball, then 
deploy into the root file system.   I use Cfengine to put deploymentclient.conf 
in place.  

Once deploymentclient.conf is in place, I'm still using Splunk's deployment 
server to push Splunk config changes out.  You dont have to.  I was going to 
use Cfengine to do this, but, we're heading in a different direction within our 
organization.

Anyways, I hope this helps you out.  I suppose it at least demonstrates how to 
put the code down, and to manage the Splunk processes via Linux or Solaris SMF. 
 Some of this looks overly complex, but, I'm having to deal with Solaris not 
having a network package manager.  I'm also upgrading clients here from the 
Splunk "fat forwarder" which used to be a full / complete install of the Splunk 
binaries, to the Splunk "universal forwarder" which is a stripped down C/C++ 
based agent.



Thanks
Mike





bundle agent splunk_universal_forwarder
{
vars:
        !all_splunk::
                "splunk_version"                string          =>      
execresult("/export/apps/splunk/i002/splunkforwarder/bin/splunk --version", 
"noshell");

        !all_splunk.sunos_5_10.i86pc::
                "tarball_hash"                  string          =>      
"564c23a454bdd23c4265ea3b7c92c9de";
                
        !all_splunk.sunos_5_10.sparc::
                "tarball_hash"                  string          =>      
"45ac90c4dc10cb1b09d1f7c882dca6db";     

        !all_splunk::
                "http_server"                   string          =>      
"hostname1";

classes:
        !all_splunk.sunos_5_10::
                "leave_splunk_disabled"         or              =>      
{"esv4_build01_corp", "esv4_build02_corp", };

        !all_splunk::
                "forwarder_already_installed"   expression      =>      
fileexists("/export/apps/splunk/i002/splunkforwarder/etc/splunk-launch.conf");

        !all_splunk::
                "is_splunk_current"             expression      =>      
regcmp("Splunk Universal Forwarder 4.2.4 (build 110225)","$(splunk_version)");

        !all_splunk.sunos_5_10::
                "fat_forwarder"                 expression      =>      
isdir("/export/apps/splunk/i002/splunk");

        !all_splunk.linux::
                "fat_forwarder"                 expression      =>      
isdir("/opt/splunk");

        !all_splunk.sunos_5_10.i86pc::
                "media_accessible"              expression      =>      
fileexists("/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-x86_64.tar");

        !all_splunk.sunos_5_10.sparc::
                "media_accessible"              expression      =>      
fileexists("/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-sparc.tar");

        !all_splunk.media_accessible.i86pc::
                "tarball_hash_match"            expression      =>      
hashmatch("/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-x86_64.tar", 
"md5", "$(tarball_hash)");

        !all_splunk.media_accessible.sparc::
                "tarball_hash_match"            expression      =>      
hashmatch("/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-sparc.tar", 
"md5", "$(tarball_hash)");

        !all_splunk.sunos_5_10::
                "fat_forwarder_smf_service"     expression      =>      
returnszero("/bin/svcs 'splunk:default' > /dev/null 2>&1","useshell");

        !all_splunk.sunos_5_10::
                "forwarder_maintenance_status"  expression      =>      
returnszero("/bin/svcs splunkforwarder 2>&1 | /bin/grep maintenance > /dev/null 
2>&1","useshell");

        !all_splunk.sunos_5_10::
                "forwarder_disabled_status"     expression      =>      
returnszero("/bin/svcs splunkforwarder 2>&1 | /bin/grep disabled > /dev/null 
2>&1","useshell");

        !all_splunk.sunos_5_10::
                "forwarder_smf_service"         expression      =>      
returnszero("/bin/svcs splunkforwarder > /dev/null 2>&1","useshell");

files:
        !all_splunk::
                "/etc/passwd"
                        edit_line               =>      
set_user_field("splunk",6,"/export/apps/splunk/i002/splunkforwarder"),
                        classes                 =>      
if_repaired("splunk_home_directory_modified");
        
        !all_splunk::
                "/etc/passwd"
                        edit_line               =>      
set_user_field("splunk",7,"/bin/bash"),
                        classes                 =>      
if_repaired("splunk_shell_modified");


        # The correct /etc/shadow string for the splunk user is set in 
manage_system_accounts.cf
        !all_splunk.!forwarder_already_installed::
                "/etc/shadow"
                        edit_line               =>      
delete_lines_matching("splunk:.LK.*"),
                        classes                 =>      
if_repaired("splunk_etc_shadow_modified");


        !all_splunk::
                "/export/apps/splunk/i002/."
                        create                  =>      "true",
                        perms                   =>      
mog("0755","splunk","splunk");

        !all_splunk.linux::
                "/export/apps/splunk/i002/splunkforwarder"
                        link_from               =>      
ln_s("/opt/splunkforwarder");

        !all_splunk.linux::
                "/opt/splunkforwarder/."
                        perms                   =>      og("splunk","splunk"),
                        depth_search            =>      recurse("inf");

        !all_splunk::
                "/export/apps/splunk/i002/splunkforwarder/.ssh/."
                        create                  =>      "true",
                        perms                   =>      
mog("0700","splunk","splunk"),
                        classes                 =>      
if_repaired("splunk_modified");

        !all_splunk::
                "/export/apps/splunk/i002/splunkforwarder/.ssh/authorized_keys"
                        create                  =>      "true",
                        perms                   =>      
mog("0600","splunk","splunk"),
                        copy_from               =>      
backup_cp_md5_compare("/var/cfengine/inputs/config-general/splunk_universal_forwarder/splunk-authorized-keys"),
                        classes                 =>      
if_repaired("splunk_modified");

        !all_splunk::
                "/export/apps/splunk/i002/splunkforwarder/.bash_profile"
                        create                  =>      "true",
                        perms                   =>      
mog("0755","splunk","splunk"),
                        copy_from               =>      
backup_cp_md5_compare("/var/cfengine/inputs/config-general/splunk_universal_forwarder/splunkforwarder_bash_profile"),
                        classes                 =>      
if_repaired("splunk_modified");


        !all_splunk::
                
"/export/apps/splunk/i002/splunkforwarder/etc/apps/SplunkForwarder/default/."
                        perms                   =>      
mog("0755","splunk","splunk"),
                        classes                 =>      
if_repaired("splunk_permissions_incorrect");

        !all_splunk.splunk_permissions_incorrect::
                "/export/apps/splunk/i002/splunkforwarder/etc/apps/."
                        perms                   =>      
mog("0755","splunk","splunk"),
                        depth_search            =>      recurse("inf"),
                        action                  =>      immediate;



        !all_splunk::
                
"/export/apps/splunk/i002/splunkforwarder/etc/system/local/deploymentclient.conf"
                        perms                   =>      
mog("0644","splunk","splunk"),
                        copy_from               =>      
backup_cp_md5_compare("/var/cfengine/inputs/config-general/splunk_universal_forwarder/deploymentclient.conf-PROD-ELA4"),
                        classes                 =>      
if_repaired("splunk_restart_needed");

        !all_splunk.linux::
                "/etc/init.d/splunk"
                        perms                   =>      
mog("0700","root","root"),
                        copy_from               =>      
backup_cp_md5_compare("/var/cfengine/inputs/config-linux/splunk_universal_forwarder/splunkforwarder-init-script"),
                        classes                 =>      
if_repaired("splunk_init_script_modified");

        !all_splunk.sunos_5_10.fat_forwarder::
                "/export/apps/splunk/i002/splunk"
                        handle          =>      
"remove_solaris_fat_forwarder_data",
                        delete          =>      tidy,
                        depth_search    =>      recurse("inf"),
                        file_select     =>      prune_all,
                        classes         =>      
if_repaired("splunk_fat_forwarder_data_purged");

        !all_splunk.sunos_5_10.fat_forwarder::
                "/export/apps/splunk/i002/splunk/."
                        handle          =>      
"remove_solaris_fat_forwarder_base_dir",
                        delete          =>      tidy,
                        classes         =>      
if_repaired("splunk_fat_forwarder_data_purged");

        !all_splunk.linux.fat_forwarder::
                "/opt/splunk"
                        handle          =>      
"remove_linux_fat_forwarder_data",
                        delete          =>      tidy,
                        depth_search    =>      recurse("inf"),
                        file_select     =>      prune_all,
                        classes         =>      
if_repaired("splunk_fat_forwarder_data_purged");

        !all_splunk.linux.fat_forwarder::
                "/opt/splunk/."
                        handle          =>      
"remove_linux_fat_forwarder_base_dir",
                        delete          =>      tidy,
                        classes         =>      
if_repaired("splunk_fat_forwarder_data_purged");
                
        # Remove previous media.
        !all_splunk.sunos_5_10.i86pc::
                
"/var/cfengine/media/splunkforwarder-4.2.3-105575-SunOS-x86_64.tar"
                        delete          =>      tidy;

        !all_splunk.sunos_5_10.sparc::
                
"/var/cfengine/media/splunkforwarder-4.2.3-105575-SunOS-sparc.tar"
                        delete          =>      tidy;
packages:
        # We define this exact version of the RPM for Centos 5.3 and 5.5 only.
        !all_splunk.linux::
                "splunkforwarder"
                        package_policy          =>      "addupdate",
                        package_method          =>      rpm,
                        package_architectures   =>      { "x86_64" },
                        package_version         =>      "4.2.4-110225";


        !all_splunk.fat_forwarder.sunos_5_10::
                "LINKsplunkconf"
                        package_policy          =>      "delete",
                        package_method          =>      
solaris("LINKsplunkconf","/var/cfengine/inputs/config-solaris/pkg.spoolfile","/var/cfengine/inputs/config-solaris/pkg.admin"),
                        classes                 =>      
if_repaired("fat_forwader_removed");


processes:
        !all_splunk.linux::
                "splunkd"       # This is what appears in the output of ps -ef 
in the process table.
                        restart_class   =>      "linux_splunkd_offline";


commands:
        !all_splunk.(!media_accessible|!tarball_hash_match).sunos_5_10.i86pc::
                "/usr/sfw/bin/wget -q -O 
/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-x86_64.tar 
$(http_server)/repo/mrepo/www/LINK/nonrepo/splunkforwarder-4.2.4-110225-SunOS-x86_64.tar";

        !all_splunk.(!media_accessible|!tarball_hash_match).sunos_5_10.sparc::
                "/usr/sfw/bin/wget -q -O 
/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-sparc.tar 
$(http_server)/repo/mrepo/www/LINK/nonrepo/splunkforwarder-4.2.4-110225-SunOS-sparc.tar";

        !all_splunk.forwarder_maintenance_status.sunos_5_10::
                "/export/apps/splunk/i002/splunkforwarder/bin/splunk stop"
                        contain                 =>      execute_as_splunk;

        !all_splunk.splunkd_please_stop_and_svcadm_clear.sunos_5_10::
                "/usr/sbin/svcadm clear splunkforwarder";

        !all_splunk.!is_splunk_current.linux::
                "/export/apps/splunk/i002/splunkforwarder/bin/splunk stop"
                        contain                 =>      execute_as_splunk;      

        !all_splunk.!is_splunk_current.sunos_5_10::
                "/usr/sbin/svcadm disable splunkforwarder";
        
        !all_splunk.sunos_5_10.(fat_forwarder_removed|!is_splunk_current)::
                "/bin/pkill -u splunk";

        !all_splunk.linux.(fat_forwarder_removed|!is_splunk_current)::
                "/usr/bin/pkill -u splunk";

        !all_splunk.sunos_5_10.fat_forwarder_smf_service::
                "/usr/sbin/svccfg delete splunk:default";

        !all_splunk.sunos_5_10.forwarder_maintenance_status::
                "/usr/sbin/svcadm clear splunkforwarder";

        
!all_splunk.(!forwarder_already_installed|!is_splunk_current).!forwarder_maintenance_status::
                "/export/apps/splunk/i002/splunkforwarder/bin/splunk stop"
                        contain                 =>      execute_as_splunk;
        
        
!all_splunk.sunos_5_10.i86pc.tarball_hash_match.(!forwarder_already_installed|!is_splunk_current).!forwarder_maintenance_status::
                "/usr/sfw/bin/gtar -C /export/apps/splunk/i002 -xf 
/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-x86_64.tar";

        
!all_splunk.sunos_5_10.sparc.tarball_hash_match.(!forwarder_already_installed|!is_splunk_current).!forwarder_maintenance_status::
                "/usr/sfw/bin/gtar -C /export/apps/splunk/i002 -xf 
/var/cfengine/media/splunkforwarder-4.2.4-110225-SunOS-sparc.tar";

        
!all_splunk.(!forwarder_already_installed|!is_splunk_current).!forwarder_maintenance_status::
                "/export/apps/splunk/i002/splunkforwarder/bin/splunk start 
--accept-license --answer-yes --no-prompt"
                        contain                 =>      execute_as_splunk;

        
!all_splunk.(!forwarder_already_installed|!is_splunk_current).!forwarder_maintenance_status.sunos_5_10::
                "/export/apps/splunk/i002/splunkforwarder/bin/splunk stop"
                        contain                 =>      execute_as_splunk;

        
!all_splunk.(!forwarder_already_installed|!is_splunk_current).!forwarder_maintenance_status.sunos_5_10.!leave_splunk_disabled::
                "/usr/sbin/svcadm enable splunkforwarder";

        
!all_splunk.forwarder_disabled_status.sunos_5_10.!leave_splunk_disabled::
                "/usr/sbin/svcadm enable splunkforwarder";

        !all_splunk.sunos_5_10.!forwarder_already_installed::
                "/bin/pkill -u splunk";

        !all_splunk.sunos_5_10.!forwarder_smf_service::
                "/usr/sbin/svccfg import 
/var/cfengine/inputs/config-solaris/check_splunk_installed/splunkforwarder.xml";

        !all_splunk.linux.(splunk_restart_needed|linux_splunkd_offline)::
                "/etc/init.d/splunk restart";

        !all_splunk.sunos_5_10.splunk_restart_needed::
                "/usr/sbin/svcadm restart 
svc:/applications/splunkforwarder:default";

        !all_splunk.linux.splunk_init_script_modified::
                "/sbin/chkconfig --add splunk";

reports:
        !all_splunk.splunk_modified::
                "cf3: Splunk was modified on $(sys.host)";

        !all_splunk.splunk_restart_needed::
                "cf3: Splunk deploymentclient.conf was modified.  Executing a 
restart of Splunk.";

        !all_splunk.splunk_home_directory_modified::
                "cf3: The Splunk user's home directory was modified on 
$(sys.host)";

        !all_splunk.splunk_etc_shadow_modified::
                "cf3: The password entry for the Splunk user was modified in 
/etc/shadow on $(sys.host)";

        !all_splunk.splunk_shell_modified::
                "cf3: The shell entry for the Splunk user was changed to bash 
in /etc/passwd on $(sys.host)";

        !all_splunk.!forwarder_already_installed::
                "cf3: Splunk was installed on $(sys.host).  Executing first 
start, and pointing towards the deployment server.";

        !all_splunk.splunk_permissions_incorrect::
                "cf3: Unix permissions under 
/export/apps/splunk/i002/splunkforwarder/etc/apps were incorrect. Changing to 
755 on $(sys.host)";

        fat_forwarder_removed::
                "cf3: The splunk fat forwarder was removed and was replaced 
with the lightweight universal forwarder on $(sys.host)";

        forwarder_maintenance_status::
                "cf3: The Splunk universal forwarder is in maintenance status 
within SMF.  Issuing a clear on $(sys.host)";

        fat_forwarder_smf_service::
                "cf3: The Splunk fat forwarder SMF service still exists.  
Removing from SMF on $(sys.host)";

        splunk_fat_forwarder_data_purged::
                "cf3: The Splunk fat forwarder data still exists.  Removing 
/export/apps/splunk/i002/splunk";

        !all_splunk.!media_accessible.sunos_5_10::
                "cf3: The Splunk media was missing.  Executing a wget to fetch 
the Splunk media from $(http_server) on $(sys.host)";

        !all_splunk.linux_splunkd_offline::
                "cf3: splunkd was not online on $(sys.host).  Executing an 
/etc/init.d/splunk restart to bring it online";
}





bundle agent manage_system_accounts
{
vars:
        "groups"                string          =>      "splunk::1234:";
        "users"                 string          =>      
"splunk:x:1234:1234:Splunk Server:/export/apps/splunk/i002/splunk:/bin/bash";
        "shadow_entries"                slist           =>      { 
"splunk:NP:::::::", };


files:

       linux::
                "/etc/group"
                        handle          =>      "linux_app_groups_exist",
                        perms           =>      mog("0644","root","root"),
                        edit_line       =>      
append_groups_starting("manage_system_accounts.groups"),
                        classes         =>      
if_repaired("etc_group_modified");

        linux::
                "/etc/passwd"
                        handle          =>      "linux_app_users_exist",
                        perms           =>      mog("0644","root","root"),
                        edit_line       =>      
append_users_starting("manage_system_accounts.users"),
                        classes         =>      
if_repaired("etc_passwd_modified");

          linux::
                "/etc/shadow"
                        handle          =>      "linux_app_shadow_exist",
                        perms           =>      mog("0400","root","root"),
                        edit_line       =>      
append_if_no_line("$(shadow_entries)"),




_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to