Sha256: 0521f7fcc9a4f897c510da305a4fdcc54eab48973097d671397a57850ebbd6e2

Contents?: true

Size: 1.86 KB

Versions: 3

Compression:

Stored size: 1.86 KB

Contents

# -*- coding: utf-8 -*-
require 'mongoid'

class Tengine::Resource::Server
  include Mongoid::Document
  include Mongoid::Timestamps
  include Tengine::Core::CollectionAccessible
  include Tengine::Core::Validation
  include Tengine::Core::FindByName

  field :name         , :type => String
  field :description  , :type => String
  field :provided_id  , :type => String
  field :status       , :type => String

  field :addresses      , :type => Hash, :default => {}
  map_yaml_accessor :addresses

  field :address_order   , :type => Array, :default => ['private_ip_address', 'private_dns_name', 'ip_address', 'dns_name']

  field :properties     , :type => Hash
  map_yaml_accessor :properties

  validates :name, :presence => true, :format => BASE_NAME.options

  validates :name, :uniqueness => {:scope => :provider_id}, :if => :need_to_validate_name_uniqueness?
  index({ name: 1, provider_id: 1 }, { unique: 1 })

  index status: 1,  _type: 1

  has_many :guest_servers, :class_name => "Tengine::Resource::VirtualServer", :inverse_of => :host_server

  def need_to_validate_name_uniqueness?; true; end

  class << self
    def find_or_create_by_name!(attrs = {}, &block)
      result = Tengine::Resource::Server.where({:name => attrs[:name]}).first
      result ||= self.create!(attrs)
      result
    end
  end

  def hostname_or_ipv4
    addrs = addresses.symbolize_keys
    address_order.map{|key| addrs[key.to_sym]}.detect{|s| !s.blank?} # nilだけでなく空文字列も考慮する必要があります
  end

  def hostname_or_ipv4?
    !!hostname_or_ipv4
  end

  %w[public_hostname public_ipv4 local_hostname local_ipv4].each do |address_key|
    class_eval(<<-END_OF_METHOD, __FILE__, __LINE__ + 1)
      def #{address_key}
        addresses['#{address_key}']
      end
      def #{address_key}=(value)
        addresses['#{address_key}'] = value
      end
    END_OF_METHOD
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tengine_resource-1.2.2 lib/tengine/resource/server.rb
tengine_resource-1.2.1 lib/tengine/resource/server.rb
tengine_resource-1.2.0 lib/tengine/resource/server.rb