# Copyright 2013 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# Class to configure asterisk on a CentOS node.
#
# Note that every node must provide its own asterisk.conf and modules.conf files.
# All other configuration customizations should be done as overrides to the default
# configuration by dropping files into the appropriate conf.d directory.
#
# == Class: asterisk
class asterisk (
  $asterisk_conf_source = '',
  $modules_conf_source  = '',
) {
  include asterisk::server::command

  yumrepo { 'asteriskcurrent':
    baseurl  => 'http://packages.asterisk.org/centos/$releasever/current/$basearch/',
    descr    => 'Asterisk supporting packages produced by Digium',
    enabled  => 1,
    gpgcheck => 0,
  }

  yumrepo { 'asterisk11':
    baseurl  => 'http://packages.asterisk.org/centos/$releasever/asterisk-11/$basearch/',
    descr    => 'Asterisk packages produced by Digium',
    enabled  => 1,
    gpgcheck => 0,
    require  => Yumrepo['asteriskcurrent'],
  }

  package { 'asterisknow-version' :
    ensure  => present,
    require => [
      Yumrepo['asteriskcurrent'],
    ],
  }

  package { 'asterisk' :
    ensure  => present,
    require => [
      Yumrepo['asterisk11'],
      Package['asterisknow-version'],
    ],
  }

  $sounds = [
    'asterisk-sounds-core-en-g722',
    'asterisk-sounds-core-en-ulaw',
    'asterisk-sounds-core-en-gsm',
    'asterisk-sounds-extra-en-g722',
    'asterisk-sounds-extra-en-ulaw',
    'asterisk-sounds-extra-en-gsm',
    'asterisk-sounds-moh-opsound-wav',
    'asterisk-sounds-moh-opsound-ulaw',
  ]

  package { $sounds :
    ensure  => present,
    require => Yumrepo['asteriskcurrent'],
  }

  file { '/etc/asterisk/asterisk.conf':
    ensure  => present,
    owner   => 'asterisk',
    group   => 'asterisk',
    mode    => '0660',
    source  => $asterisk_conf_source,
  }

  file { '/etc/asterisk/modules.conf.d/modules.conf':
    ensure  => present,
    owner   => 'asterisk',
    group   => 'asterisk',
    mode    => '0660',
    source  => $modules_conf_source,
  }

  file { '/etc/asterisk':
    ensure  => present,
    recurse => true,
    purge   => true,
    owner   => 'asterisk',
    group   => 'asterisk',
    mode    => '0660',
    source  => 'puppet:///modules/asterisk/',
    require => Package['asterisk'],
  }

  $files = [
    'ais.conf', 'amd.conf', 'asterisk.conf', 'calendar.conf', 'ccss.conf',
    'cdr_adaptive_odbc.conf', 'cdr.conf', 'cdr_custom.conf',
    'cdr_manager.conf', 'cdr_syslog.conf', 'cel.conf', 'cel_custom.conf',
    'cel_odbc.conf', 'chan_dahdi.conf', 'cli.conf', 'cli_permissions.conf',
    'codecs.conf', 'dnsmgr.conf', 'dsp.conf', 'dundi.conf', 'enum.conf',
    'extconfig.conf', 'extensions.conf', 'features.conf', 'func_odbc.conf',
    'gtalk.conf', 'http.conf', 'iax.conf', 'iaxprov.conf',
    'indications.conf', 'jabber.conf', 'logger.conf', 'manager.conf',
    'meetme.conf', 'modules.conf', 'musiconhold.conf', 'queuerules.conf',
    'queues.conf', 'res_curl.conf', 'res_fax.conf', 'res_ldap.conf',
    'res_odbc.conf', 'res_stun_monitor.conf', 'rtp.conf', 'say.conf',
    'sip.conf', 'sip_notify.conf', 'smdi.conf', 'udptl.conf',
    'voicemail.conf',
  ]

  asterisk::function::customdir { $files: }

  service { 'asterisk':
    ensure  => running,
    enable  => true,
    require => [
      Package['asterisk'],
      File['/etc/asterisk/'],
    ]
  }
}