
# ActiveMQ Server Install

    module.exports = header: 'ActiveMQ Server Install', handler: ->
      {iptables} = @config
      {activemq} = @config.ryba
      tmp = "/tmp_#{Date.now()}"
      md5 = true

## IPTables

| Service      | Port  | Proto | Parameter |
|--------------|-------|-------|-----------|
| ActiveMQ JMS | 61616 | tcp   | -         |
| ActiveMQ UI  |  8161 | tcp   | -         |


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

      @tools.iptables
        header: 'IPTables'
        rules: [
          { chain: 'INPUT', jump: 'ACCEPT', dport: activemq.server.port.jms, protocol: 'tcp', state: 'NEW', comment: "ActiveMQ JMS" }
          { chain: 'INPUT', jump: 'ACCEPT', dport: activemq.server.port.ui, protocol: 'tcp', state: 'NEW', comment: "ActiveMQ UI" }
        ]
        if: iptables.action is 'start'

## Identities

Create user and groups for solr user.

      @system.mkdir
        target: activemq.user.home
        uid: activemq.user.name
        gid: activemq.group.name
      @system.group header: 'Group', activemq.group
      @system.user header: 'User', activemq.user

## Startup Script

Write startup script to /etc/init.d/activemq

      @service.init
        header: 'Startup Script'
        source: "#{__dirname}/resources/activemq.j2"
        local: true
        target: "/etc/init.d/activemq"
        context: container: activemq.server.container_name
      @file
        header: 'Configuration'
        content: builder.create(activemq.conf, headless: true).end(pretty: true)
        target: "#{activemq.conf_dir}/activemq.xml"
        eof: true
      @file
        header: 'Log4J properties'
        target: "#{activemq.conf_dir}/log4j.properties"
        source: "#{__dirname}/resources/log4j.properties"
        local: true

## Layout directories

      @call header: 'Layout', ->
        @system.mkdir
          target: activemq.log_dir
          uid: activemq.user.name
          gid: activemq.group.name
          mode: 0o777
        @system.mkdir
          target: activemq.data_dir
          uid: activemq.user.name
          gid: activemq.group.name
          mode: 0o777

## Package
Install the ActiveMQ server.

      @call header: 'Download Container', ->
        exists = false
        @docker.checksum
          image: 'activemq'
          tag: activemq.version
        , (err, status, checksum) ->
          throw err if err
          exists = checksum
        @file.download
          unless: -> exists
          binary: true
          md5: true
          source: "#{@config.nikita.cache_dir}/activemq.tar"
          target: "#{tmp}/activemq.tar"
        @docker.load
          header: 'Load Container'
          unless: -> exists
          source: "#{tmp}/activemq.tar"
          docker: @config.docker

## Run Container
Run the ActiveMQ server container

      @docker.service
        machine: @config.nikita.machine
        header: 'Run ActiveMQ Container'
        docker: @config.docker
        force: -> @status(-1)
        image: "rmohr/activemq:#{activemq.version}"
        env: [
        ]
        volume: [
          "#{activemq.conf_dir}/activemq.xml:/opt/apache-activemq-#{activemq.version}/conf/activemq.xml:ro"
          "#{activemq.conf_dir}/log4j.properties:/opt/apache-activemq-#{activemq.version}/conf/log4j.properties:ro"
          "#{activemq.log_dir}:/opt/apache-activemq-#{activemq.version}/log"
          "#{activemq.data_dir}:/opt/apache-activemq-#{activemq.version}/data"
        ]
        port: [
          "#{activemq.server.port.jms}:61616"
          "#{activemq.server.port.ui}:8161"
        ]
        net: 'host'
        # rm: true
        service: true
        name: activemq.server.container_name

## Dependencies

    builder = require 'xmlbuilder'
