Skip to main content

OpenStack : Assign floating IP using heat template

Creating Yaml templates that assign floating IPs to your instances being spawned can be a bit tricky.Let us look at a scenario where we need to spin up a VM, assign a floating IP from a pool and make reference to this floating IP in your userdata as well. We will make use of the network ID of the internal and external network, as well as the Subnet ID of the internal network

The logical workflow is as follows:

  •  Create a port resource using internal network and internal subnet IDs
  • Create a floating IP resource , referring to the external network ID
  •  Associate the floating IP to the port
  •   In the server resource being created, associate the port resource
  Now we will see how this can be implemented using both HOT and AWS template formats




HOT template  sample:

1. Define the network ID parameters:

  private_net:
    type: string
    default: "<default private network id>"
    description: Id of the private network for the compute server
  private_subnet:
    type: string
    default: "<default private subnet id>"
    description: Id of the private sub network for the compute server
  public_net:
    type: string
    default: "<default external network id>"
    description: Id of the public network for the compute server

You can get the ID of the networks and subnet from the Openstack UI or using command line

2. Create the resources:

Define a security group,Neutron port, floating IP and associate the floating IP

  external_access:
    type: AWS::EC2::SecurityGroup
    properties:
      GroupDescription: Enable access to the application and SSH access
      SecurityGroupIngress: [
        {IpProtocol: tcp, FromPort: {get_param: port}, ToPort: {get_param: port},
         CidrIp: "0.0.0.0/0"},
        {IpProtocol: tcp, FromPort: "8080", ToPort: "8080",
         CidrIp: "0.0.0.0/0"},
        {IpProtocol: icmp, FromPort: "-1", ToPort: "-1",
         CidrIp: "0.0.0.0/0"}]

  public_port:
    type: OS::Neutron::Port
    properties:
      network_id: { get_param: private_net }
      fixed_ips:
      - subnet_id: { get_param: private_subnet }
      security_groups:
      - {get_resource: external_access}


  floating_ip:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: public_net }
      port_id: { get_resource: public_port }

3. Associate the port to your VM instance:

 windows_instance:
    type: OS::Nova::Server
    properties:
      networks:
        - port: { get_resource: public_port }

AWS template  sample:

Almost same as hot template logic, just that we are not defining the security groups here

1. Define the network ID parameters:

    "external_network" : {
      "Default": "<default external network id>",
      "Description" : "UUID of an existing external network",
      "Type" : "String"
    },
    "internal_network" : {
      "Default": "<default private network id>"",
      "Description" : "UUID of an existing internal network",
      "Type" : "String"
    },
    "internal_subnet" : {
      "Default": "<default private subnet id>",
      "Description" : "UUID of an existing internal subnet",
      "Type" : "String"
    },
 

2. Create the resources:

    "port_floating": {
      "Type": "OS::Neutron::Port",
      "Properties": {
        "network_id": { "Ref" : "internal_network" },
        "fixed_ips": [
          {"subnet_id": { "Ref" : "internal_subnet" }
        }]
      }
    },

    "floating_ip": {
      "Type": "OS::Neutron::FloatingIP",
      "Properties": {
        "floating_network_id": { "Ref" : "external_network" }
      }
    },
    "floating_ip_assoc": {
      "Type": "OS::Neutron::FloatingIPAssociation",
      "Properties": {
        "floatingip_id": { "Ref" : "floating_ip" },
        "port_id": { "Ref" : "port_floating" }
      }
  },

3. Associate the port to your VM instance:

    "WebServer": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "NetworkInterfaces" : [ { "Ref" : "port_floating" } ],
        

Comments

Popular posts from this blog

Install nested KVM in VMware ESXi 5.1

In this blog, I will explain the steps required to run a nested KVM hypervisor on  Vmware ESXi. The installation of KVM is done on Ubuntu 13.10(64 bit). Note: It is assumed that you have already installed your Ubuntu 13.10 VM in ESXi, and hence we will not look into the Ubuntu installation part. 1) Upgrade VM Hardware version to 9. In my ESXi server, the default VM hardware version was 8. So I had to shutdown my VM and upgrade the Hardware version to 9 to get the KVM hypervisor working. You can right click the VM and select the Upgrade hardware option to do this. 2)In the ESXi host In /etc/vmware edit the 'config' file and add the following setting vhv.enable = "TRUE" 3)Edit the VM settings and go to VM settings > Options  > CPU/MMU Virtualization . Select the Intel EPT option 4) Go to Options->CPUID mask> Advanced-> Level 1, add the following CPU mask level ECX  ---- ---- ---- ---- ---- ---- --H- ---- 5) Open the vmx...

Virtual fibre channel in Hyper V

Virtual fibre channel option in Hyper V allows the connection to pass through from physical  fibre channel HBA to virtual fibre channel HBA, and still have the flexibilities like live migration. Pre-requisites: VM should be running Windows Server 2008, 2008 R2 or Windows Server 2012 Supported physical HBA with N_Port Virtualization(NPIV) enabled in the HBA. This can be enabled using any management utility provided by the SAN manufacturer. If you need to enable live migration, each host should be having two physical HBAs and each HBA should have two World Wide Names(WWN). WWN is used to established connectivity to FC storage.When you perform migration, the second node can use the second WWN to connect to the storage and then the first node can release its connection. Thereby the storage connectivity is maintained during live migration Configuring virtual fibre channel is a two step process Step 1: Create a Virtual SAN in the Hyper-V host First you need to click on Vir...

Windows server 2012: where is my start button??

If you have been using Windows Server OS for a while, the one thing that will strike you most when you login to a Windows server 2012 is that there is no start button!!.. What??..How am I going to manage it?? Microsoft feels that you really dont need a start button, since you can do almost everything from your server  manager or even remotely from your desktop. After all the initial configurations are done, you could also do away with the GUI and go back to server core option.(In server 2012, there is an option to add and remove GUI). So does that mean, you need to learn to live without a start button. Actually no, the start button is very much there .Lets start looking for it. Option 1: There is "charms" bar on the side of your deskop, where you will find a "start" option. You can use the "Windows +C" shortcut to pop out the charms bar Option 2: There is a hidden "start area"in  the bottom left corner of your desktop...