Puppet Class: signalfx_agent

Defined in:
manifests/init.pp

Overview

Main class that installs and configures the agent

Parameters:

  • config (Any) (defaults to: lookup('signalfx_agent::config', Hash, 'deep'))
  • package_stage (Any) (defaults to: 'release')
  • repo_base (Any) (defaults to: 'splunk.jfrog.io/splunk')
  • config_file_path (Any) (defaults to: $::osfamily ? { 'debian' => '/etc/signalfx/agent.yaml', 'redhat' => '/etc/signalfx/agent.yaml', 'windows' => 'C:\\ProgramData\\SignalFxAgent\\agent.yaml', default => '/etc/signalfx/agent.yaml')
  • agent_version (Any) (defaults to: '')
  • package_version (Any) (defaults to: '')
  • installation_directory (Any) (defaults to: 'C:\\Program Files\\SignalFx')
  • service_user (Any) (defaults to: 'signalfx-agent')
  • service_group (Any) (defaults to: 'signalfx-agent')


2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'manifests/init.pp', line 2

class signalfx_agent (
  $config                 = lookup('signalfx_agent::config', Hash, 'deep'),
  $package_stage          = 'release',
  $repo_base              = 'splunk.jfrog.io/splunk',
  $config_file_path       = $::osfamily ? {
    'debian'  => '/etc/signalfx/agent.yaml',
    'redhat'  => '/etc/signalfx/agent.yaml',
    'windows' => 'C:\\ProgramData\\SignalFxAgent\\agent.yaml',
    default   => '/etc/signalfx/agent.yaml'
  },
  $agent_version          = '',
  $package_version        = '',
  $installation_directory = 'C:\\Program Files\\SignalFx',
  $service_user           = 'signalfx-agent',  # linux only
  $service_group          = 'signalfx-agent',  # linux only
) {

  $service_name = 'signalfx-agent'

  if !$config['signalFxAccessToken'] {
    fail("The \$config parameter must contain a 'signalFxAccessToken'")
  }

  if $::osfamily == 'windows' {
    if $agent_version == '' {
      fail("The \$agent_version parameter must be set to a valid SignalFx Agent version")
    }

    $split_config_file_path = $config_file_path.split('\\\\')
    $config_parent_directory_path = $split_config_file_path[0, - 2].join('\\')

    package { $service_name:
      ensure          => 'installed',
      name            => 'signalfx-agent',
      provider        => 'windows',
      source          => "${installation_directory}\\SignalFxAgent\\bin\\signalfx-agent.exe",
      install_options => [{ '-service' => '"install"' }, '-logEvents', { '-config' => $config_file_path }],
    }
  }
  else {
    $split_config_file_path = $config_file_path.split('/')
    $config_parent_directory_path = $split_config_file_path[0, - 2].join('/')

    if $package_version == '' {
      if $agent_version == '' {
        $version = 'latest'
      } else {
        $version = "${agent_version}-1"
      }
    } else {
      $version = $package_version
    }

    package { $service_name:
      ensure => $version
    }
  }

  case $::osfamily {
    'debian': {
      class { 'signalfx_agent::debian_repo':
        repo_base     => $repo_base,
        package_stage => $package_stage,
      }
    }
    'redhat': {
      class { 'signalfx_agent::yum_repo':
        repo_base     => $repo_base,
        package_stage => $package_stage,
      }
    }
    'windows': {
      File[$config_file_path]

      -> class { 'signalfx_agent::win_repo':
        repo_base              => 'dl.signalfx.com',
        package_stage          => $package_stage,
        version                => $agent_version,
        config_file_path       => $config_file_path,
        installation_directory => $installation_directory,
        service_name           => $service_name,
      }
    }
    default: {
      fail("Your OS (${::osfamily}) is not supported by the SignalFx Agent")
    }
  }

  -> Package[$service_name]

  -> service { $service_name:
    ensure => true,
    enable => true,
  }

  if $::osfamily != 'windows' {
    class { 'signalfx_agent::service_owner':
      service_name  => $service_name,
      service_user  => $service_user,
      service_group => $service_group,
    }
  }

  file { $config_parent_directory_path:
    ensure => 'directory',
  }

  file { $config_file_path:
    ensure  => 'file',
    content => template('signalfx_agent/agent.yaml.erb'),
    mode    => '0600',
  }

  File[$config_parent_directory_path] ~> File[$config_file_path] ~> Service[$service_name]
}