2016-01-19 6 views
1

Вот мой шаблон, который работает. Я выполняю команду «heat stack-create» с этим шаблоном и создает стек и экземпляр с ip. У меня есть доступ к интерфейсу для управления моими экземплярами. Из этого интерфейса я могу создать плавающий IP-адрес, а затем назначить его только что созданному экземпляру.Назначить плавающий ip экземпляру openstack с использованием шаблона нагрева

heat_template_version: 2013-05-23 

description: > 
    Docker generic server 

parameters: 
    image_id: {default: centos-7, description: image, type: string} 
    instance_type: {default: ug1.medium, description: instance, type: string} 
    key_name: {default: user, description: Name of an existing key pair to use for the instance, type: string} 

resources: 
    nginx_securitygroup: 
     properties: 
     GroupDescription: Generic security group for nginx stack 
     SecurityGroupIngress: 
      - {CidrIp: 10.0.0.0/8, FromPort: '80', IpProtocol: TCP, ToPort: '80'} 
    type: AWS::EC2::SecurityGroup 


server_securitygroup: 
    type: AWS::EC2::SecurityGroup 
    properties: 
     GroupDescription: Generic security group from docker nginx 
     SecurityGroupIngress: 
      # This is needed to allow pinging the server 
      - {"CidrIp": "10.0.0.0/8", "FromPort": "-1", "ToPort": "-1", "IpProtocol": "ICMP"} 

      # Ssh port 
      - {"CidrIp": "10.0.0.0/8", "FromPort": "22", "ToPort": "22", "IpProtocol": "TCP"} 

      # Open docker ports 
      - {"CidrIp": "10.0.0.0/8", "FromPort": "2375", "ToPort": "2375", "IpProtocol": "TCP"} 
      - {"CidrIp": "10.0.0.0/8", "FromPort": "2376", "ToPort": "2376", "IpProtocol": "TCP"} 

docker_server: 
    type: AWS::EC2::Instance 
    properties: 

     ImageId: { get_param: image_id } 
     InstanceType: { get_param: instance_type } 
     KeyName: { get_param: key_name } 
     SecurityGroups: 
      - Ref: server_securitygroup 
      - {Ref: nginx_securitygroup} 


     UserData: | 
      #!/bin/bash -v 

      #Do some operations to start the docker container on the instance     

outputs: 
    ipaddress_private: 
     description: Private ip 
     value: 
      "Fn::GetAtt": 
       - docker_server 
       - PrivateIp 

Моя проблема заключается в том, что я не хочу, чтобы назначить вручную мой созданный плавучий IP к примеру, я хочу, чтобы быть назначены автоматически, когда мой стек и экземпляр создается. Я пробовал следовать некоторому документированию, например: http://blog.oddbit.com/2013/12/06/an-introduction-to-openstack-heat/

Но это не работает. Возможно, это потому, что он пытается назначить плавающий IP другому существующему ресурсу (серверу). Как я могу сделать работу ассоциации?

ответ

1

Ok, методом проб и ошибок, я обнаружил, что делать ...

В разделе 'параметров', добавьте:

ip_address : {default: x.x.x.x, description : Floating IP address to be associated to the instance, type : string} 

В разделе 'ресурсы':

IPAssoc : 
    type : AWS::EC2::EIPAssociation 
    properties : 
     InstanceId : { get_resource: docker_server } 
     EIP : { get_param : ip_address } 
1

Используйте ресурсы FloatingIPAssociation. Пример:

association: 
    type: OS::Nova::FloatingIPAssociation 
    properties: 
     floating_ip: { get_param: floatingIpId } 
     server_id: { get_resource: instance } 

Другой пример с NeutronFloatingAssociation:

association: 
    type: OS::Neutron::FloatingIPAssociation 
    properties: 
     floatingip_id: { get_param: floatingIpId } 
     port_id: { get_param: port_id }