Menu

Shinken Broker Install

module.exports = header: 'Shinken Broker Install', handler: (options) ->

IPTables

ServicePortProtoParameter
shinken-broker7772tcpconfig.port

IPTables rules are only inserted if the parameter "iptables.action" is set to "start" (default value).

  rules = [{ chain: 'INPUT', jump: 'ACCEPT', dport: options.config.port, protocol: 'tcp', state: 'NEW', comment: 'Shinken Broker' }]
  if options.config.use_ssl is '1'
    rules.push { chain: 'INPUT', jump: 'ACCEPT', dport: options.modules['webui2'].nginx.port, protocol: 'tcp', state: 'NEW', comment: 'NGINX Proxy for Shinken WebUI' }
  else
    rules.push { chain: 'INPUT', jump: 'ACCEPT', dport: options.modules['webui2'].config.port, protocol: 'tcp', state: 'NEW', comment: 'Shinken WebUI' }
  for name, mod of options.modules
    continue if name is 'webui2'
    if mod.config?.port?
      rules.push { chain: 'INPUT', jump: 'ACCEPT', dport: mod.config.port, protocol: 'tcp', state: 'NEW', comment: "Shinken Broker #{name}" }
  @tools.iptables
    rules: rules
    if: options.iptables

Packages

  @call header: 'Packages', ->
    @service name: 'shinken-broker'
    @service name: 'python-requests'
    @service name: 'python-arrow'
    @service name: 'python-devel'
    @service name: 'openldap-devel'
    
    @service.init
      header: 'Systemd Script'
      target: '/usr/lib/systemd/system/shinken-broker.service'
      source: "#{__dirname}/resources/shinken-broker-systemd.j2"
      local: true
      mode: 0o0644

Configuration

  @file.ini
    header: 'Configuration'
    target: '/etc/shinken/daemons/brokerd.ini'
    content: daemon: options.ini
    backup: true
    eof: true

Modules

  @call header: 'Modules', ->
    installmod = (name, mod) =>
      @call header: name, unless_exec: "shinken inventory | grep #{name}", ->
        @file.download
          target: "#{options.build_dir}/#{mod.archive}.#{mod.format}"
          source: mod.source
          cache_file: "#{mod.archive}.#{mod.format}"
          unless_exec: "shinken inventory | grep #{name}"
        @tools.extract
          source: "#{options.build_dir}/#{mod.archive}.#{mod.format}"
        @system.execute
          cmd: "shinken install --local #{options.build_dir}/#{mod.archive}"
        @system.remove target: "#{options.build_dir}/#{mod.archive}.#{mod.format}"
        @system.remove target: "#{options.build_dir}/#{mod.archive}"
      for subname, submod of mod.modules then installmod subname, submod
    for name, mod of options.modules then installmod name, mod

Python Modules

  @call header: 'Python Modules', ->
    # We compute the module list only once because pip list can be very slow
    @system.execute
      cmd: "pip list > #{options.build_dir}/.piplist"
      shy: true
    install_dep = (k, v) =>
      @call header: k, unless_exec: "grep #{k} #{options.build_dir}/.piplist", ->
        @file.download
          source: v.url
          target: "#{options.build_dir}/#{v.archive}.#{v.format}"
          cache_file: "#{v.archive}.#{v.format}"
        @tools.extract
          source: "#{options.build_dir}/#{v.archive}.#{v.format}"
        @system.execute
          cmd:"""
          cd #{options.build_dir}/#{v.archive}
          python setup.py build
          python setup.py install
          """
        @system.remove target: "#{options.build_dir}/#{v.archive}.#{v.format}"
        @system.remove target: "#{options.build_dir}/#{v.archive}"
    for _, mod of options.modules then for k,v of mod.python_modules then install_dep k, v
    @system.remove
      target: "#{options.build_dir}/.piplist"
      shy: true

Fix Groups View

Fix the hierarchical view in WebUI. Could also be natively corrected in the next shinken version. (actually 2.4)

  @call header: 'Fix Groups View', ->
    for object in  ['host', 'service']
      @file
        target: "/usr/lib/python2.7/site-packages/shinken/objects/#{object}group.py"
        write: [
          match: new RegExp "'#{object}group_name': StringProp.*,$", 'm'
          replace:  "'#{object}group_name': StringProp(fill_brok=['full_status']), # RYBA\n        '#{object}group_members': StringProp(fill_brok=['full_status']),"
        ]

NGINX

  @call header: 'NGINX', handler: ->
    @file.render
      header: 'Configure'
      target: "#{options.nginx_conf_dir}/conf.d/shinken_webui.conf"
      source: "#{__dirname}/resources/nginx.conf.j2"
      local: true
      context: options
    @service.restart
      header: 'Restart'
      if: -> @status -1
      name: 'nginx'