Skip to content
Snippets Groups Projects
gc_HOT.yaml 8.38 KiB
Newer Older
---
heat_template_version: 2013-05-23
description: "A simple template to boot a cluster of desktops (LoginNode, ManagementNodes and Desktop Nodes)"
# avz parameters disabled. they are working but I want just more options than monash-02. I would like to have a parameter that says "I don't care"

parameters:
  ubuntu_1804_image_id:
    type: string
    label: Image ID
    description: Ubuntu Image
    default: 99d9449a-084f-4901-8bd8-c04aebd589ca
  centos_7_image_id:
    type: string
    label: Image ID
    description: Centos Image
    default: 12da1997-5122-4be3-a2a9-2f44961c1b16
  ssh_key:
    type: string
    default: gc_key
  avz:
    type: string
    default: monash-02
  project_name:
    type: string
  NetID:
    type: string
    default: Classic Provider
  Flavour:
    type: string
    default: t3.xsmall


resources:

  SlurmSecGroup:
   type: "OS::Neutron::SecurityGroup"
   properties:
     name: "heatslurmsecgroup"
     rules: [ { protocol: tcp,
               port_range_min: 12000,
               port_range_max: 12999},
              { protocol: tcp,
               port_range_min: 6817,
               port_range_max: 6819},
              { protocol: tcp,
               port_range_min: 1019,
               port_range_max: 1019}]
  NFSSecGroup:
   type: "OS::Neutron::SecurityGroup"
   properties:
     name: "heatnfssecgroup"
     rules: [ { protocol: tcp,
               port_range_min: 2049,
               port_range_max: 2049},
              { protocol: tcp,
               port_range_min: 111,
               port_range_max: 111},
              { protocol: udp,
               port_range_min: 2049,
               port_range_max: 2049},
              { protocol: udp,
               port_range_min: 111,
               port_range_max: 111}]
  MySQLSecGroup:
   type: "OS::Neutron::SecurityGroup"
   properties:
     name: "heatmysqlsecgroup"
     rules: [ { protocol: tcp,
               port_range_min: 3306,
               port_range_max: 3306} ]
  SSHMonashSecGroup:
   type: "OS::Neutron::SecurityGroup"
   properties:
     name: "SSHMonashSecGroup"
     rules: [ { protocol: tcp,
               port_range_min: 22,
               port_range_max: 22,
               direction: ingress,
               remote_ip_prefix: 118.138.240.0/21
     } ]
#  SSHInternalSecGroup:
#   type: "OS::Neutron::SecurityGroup"
#   properties:
#     name: "SSHInternalSecGroup"
#     rules: [ { protocol: tcp,
#               port_range_min: 22,
#               port_range_max: 22,
#               direction: ingress} ]
               #remote_ip_prefix: { get_param: REMOTE_IP }, direction: ingress
  webaccess:
   type: "OS::Neutron::SecurityGroup"
   properties:
     name: "webaccess"
     rules: [ { protocol: tcp,
               port_range_min: 80,
               port_range_max: 80},
              { protocol: tcp,
               port_range_min: 443,
               port_range_max: 443} ]

  SQLNode0:
   type: "OS::Nova::Server"
   properties:
    name:
     list_join: [ '-', [ { get_param: "OS::stack_name" }, 'sql0' ]]
    availability_zone: { get_param: avz }
    flavor: t3.small
    image: { get_param: centos_7_image_id }
    key_name: { get_param: ssh_key }
    security_groups: [ { get_resource: SSHMonashSecGroup }, { get_resource: SlurmSecGroup }, { get_resource: MySQLSecGroup }, { get_resource: NFSSecGroup } ]
    metadata:
     ansible_host_groups: [ SQLNodes, NFSNodes ]
     ansible_ssh_user: ec2-user
     project_name: { get_param: project_name }
    networks:
      - network: { get_param: NetID }

  NFSVolume:
   type: OS::Cinder::Volume
   properties:
    availability_zone: { get_param: avz }
    size: 1
    name: nfsvol
  NFSVolumeAttachment:
   type: "OS::Cinder::VolumeAttachment"
   properties:
    volume_id: { get_resource: NFSVolume }
    instance_uuid: { get_resource: SQLNode0 }

  SLURMSTATEVolume:
   type: OS::Cinder::Volume
   properties:
    availability_zone: { get_param: avz }
    size: 1
    name: slurmstate
  SLURMSTATEVolumeAttachment:
   type: "OS::Cinder::VolumeAttachment"
   properties:
    volume_id: { get_resource: SLURMSTATEVolume }
    instance_uuid: { get_resource: SQLNode0 }

  DBVolume:
   type: OS::Cinder::Volume
   properties:
    availability_zone: { get_param: avz }
    size: 10
    name: dbvol
  DBVolumeAttachment:
   type: "OS::Cinder::VolumeAttachment"
   properties:
    volume_id: { get_resource: DBVolume }
    instance_uuid: { get_resource: SQLNode0 }

  MgmtNodes:
   type: "OS::Heat::ResourceGroup"
   properties:
    count: 2
    resource_def:
      type: My::Server::MgmtNode
      properties:
        #avz: { get_param: avz }
        image: { get_param: centos_7_image_id }
        ansible_ssh_user: ec2-user
        mynodename:
         list_join: [ '-', [ { get_param: "OS::stack_name" }, 'mgmt%index%' ]]
        ssh_key: { get_param: ssh_key }
        security_groups: [ default, { get_resource: SSHMonashSecGroup }, { get_resource: SlurmSecGroup }, { get_resource: NFSSecGroup }, { get_resource: MySQLSecGroup } ]
        project_name: { get_param: project_name }

  LoginNodes:
   type: "OS::Heat::ResourceGroup"
   properties:
    count: 1
    resource_def:
     type: "OS::Nova::Server"
     properties:
      #availability_zone: { get_param: avz }
      flavor: t3.small
      image: { get_param: centos_7_image_id }
      key_name: { get_param: ssh_key }
      name:
       list_join: [ '-', [ { get_param: "OS::stack_name" }, 'login%index%' ]]
      security_groups: [ default, { get_resource: SSHMonashSecGroup }, { get_resource: SlurmSecGroup }, { get_resource: NFSSecGroup } ]
      metadata:
       ansible_host_groups: [ LoginNodes ]
       ansible_ssh_user: ec2-user
       project_name: { get_param: project_name }
      networks:
       - network: { get_param: NetID }

  DesktopNodes:
   type: "OS::Heat::ResourceGroup"
   properties:
    count: 0
    resource_def:
     type: "OS::Nova::Server"
     properties:
      #availability_zone: { get_param: avz }
      flavor: t3.small
      image: { get_param: centos_7_image_id }
      key_name: { get_param: ssh_key }
      name:
       list_join: [ '-', [ { get_param: "OS::stack_name" }, 'desktopc%index%' ]]
      security_groups: [ default, { get_resource: SSHMonashSecGroup }, { get_resource: SlurmSecGroup }, { get_resource: NFSSecGroup } ]
      metadata:
       ansible_host_groups: [ DesktopNodes, VisNodes, ComputeNodes ]
       ansible_ssh_user: ec2-user
       project_name: { get_param: project_name }
      networks:
       - network: { get_param: NetID }

  ComputeNodes:
   type: "OS::Heat::ResourceGroup"
   properties:
    count: 1
    resource_def:
     type: "OS::Nova::Server"
     properties:
      #availability_zone: { get_param: avz }
      flavor: t3.small
      image: { get_param: centos_7_image_id }
      key_name: { get_param: ssh_key }
      name:
       list_join: [ '-', [ { get_param: "OS::stack_name" }, 'computec%index%' ]]
      security_groups: [ default, { get_resource: SSHMonashSecGroup }, { get_resource: SlurmSecGroup }, { get_resource: NFSSecGroup } ]
      metadata:
       ansible_host_groups: [ ComputeNodes ]
       ansible_ssh_user: ec2-user
       project_name: { get_param: project_name }
      networks:
       - network: { get_param: NetID }

  UbuntuDesktopNodes:
   type: "OS::Heat::ResourceGroup"
   properties:
    count: 0
    resource_def:
     type: "OS::Nova::Server"
     properties:
      #availability_zone: { get_param: avz }
      flavor: t3.small
      image: { get_param: ubuntu_1804_image_id }
      key_name: { get_param: ssh_key }
      name:
       list_join: [ '-', [ { get_param: "OS::stack_name" }, 'desktopu%index%' ]]
      security_groups: [ default, { get_resource: SSHMonashSecGroup }, { get_resource: SlurmSecGroup }, { get_resource: NFSSecGroup } ]
      metadata:
       ansible_host_groups: [ DesktopNodes ]
       ansible_ssh_user: ubuntu
       project_name: { get_param: project_name }
      networks:
       - network: { get_param: NetID }

#  PySSHauthz:
#   type: "OS::Nova::Server"
#   properties:
#    name:
#     list_join: [ '-', [ { get_param: "OS::stack_name" }, 'pysshautz' ]]
#    availability_zone: { get_param: avz }
#    flavor: t3.xsmall
#    image: { get_param: ubuntu_1804_image_id }
#    key_name: { get_param: ssh_key }
#    security_groups: [ { get_resource: SSHMonashSecGroup }, { get_resource: webaccess } ]
#    metadata:
#     ansible_host_groups: [ PySSHauthz ]
#     ansible_ssh_user: ubuntu
#     project_name: { get_param: project_name }
#    networks:
#      - network: { get_param: NetID }