# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# 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.
#
heat_template_version: 2013-05-23
description: Deploy Nagios
parameters:
  adm_web_passwd:
    type: string
    description: Password for initial admin user
    hidden: true
  external_network:
    type: string
    description: Network to attach floating ips to.
    default: ext-net
  flavor:
    type: string
    description: What flavor to use for the nagios server.
    default: m1.small
  image:
    type: string
    description: Image for Nagios.
    default: nagios
  key_name:
    type: string
    description: What Nova SSH key to use for the nagios server.
    default: default
  monitor_networks:
    type: json
    description: Neutron networks to monitor.
    default: []
  nova_os_auth_url:
    type: string
    default: ''
    description: URL for Keystone to access Nova.
  nova_os_password:
    type: string
    hidden: true
    description: password to present to nova_host_ip.
    default: ''
  nova_os_username:
    type: string
    description: username to present to nova_host_ip.
    default: ''
  nova_os_tenant_name:
    type: string
    description: tenant name to present to nova_host_ip.
    default: ''
  server_network:
    type: string
    description: Network id for server.
    default: default-net
resources:
  nagios_config:
    type: OS::Heat::StructuredConfig
    properties:
      config:
        nagios3:
          adm_web_passwd: { get_input: adm_web_passwd }
          os_auth_url: { get_input: nova_os_auth_url }
          os_password: { get_input: nova_os_password }
          os_username: { get_input: nova_os_username }
          os_tenant_name: { get_input: nova_os_tenant_name }
          monitor_networks: { get_input: monitor_networks }
        completion-signal: { get_input: deploy_signal_id }
  nagios_security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      name: monitoring
      rules:
        - direction: ingress
          port_range_max: 22
          port_range_min: 22
          protocol: tcp
        - direction: ingress
          port_range_max: 80
          port_range_min: 80
          protocol: tcp
        - direction: ingress
          protocol: icmp
        - direction: egress
          protocol: tcp
        - direction: egress
          protocol: udp
        - direction: egress
          protocol: icmp
  nagios_net_port:
    type: OS::Neutron::Port
    properties:
      network_id: { get_param: server_network }
      security_groups: [ { get_resource: nagios_security_group } ]
  nagios_server:
    type: OS::Nova::Server
    properties:
      flavor: { get_param: flavor }
      image: { get_param: image }
      key_name: { get_param: key_name }
      networks:
        - network: { get_param: server_network }
          port: { get_resource: nagios_net_port }
      user_data_format: SOFTWARE_CONFIG
      user_data: {get_resource: NodeUserData}

  NodeUserData:
    type: OS::TripleO::NodeUserData

  nagios_floating_ip:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: external_network }
      port_id: { get_resource: nagios_net_port }
  nagios_deploy:
    type: OS::Heat::StructuredDeployment
    properties:
      server: { get_resource: nagios_server }
      config: { get_resource: nagios_config }
      input_values:
        adm_web_passwd: { get_param: adm_web_passwd }
        nova_os_auth_url: { get_param: nova_os_auth_url }
        nova_os_password: { get_param: nova_os_password }
        nova_os_username: { get_param: nova_os_username }
        nova_os_tenant_name: { get_param: nova_os_tenant_name }
        monitor_networks: { get_param: monitor_networks }
outputs:
  nagios_address:
    description: Address of Nagios admin interface.
    value: { get_attr: [ nagios_floating_ip, floating_ip_address ] }