Class: Wakame::Service::ServiceInstance
Overview
The data model represents a service instance. Status transition: STATUS_INIT -> [STATUS_OFFLINE|STATUS_ONLINE|STATUS_FAIL] -> STATUS_END Progress status: STATUS_NONE, STATUS_MIGRATING, STATUS_PROPAGATING,
Constant Summary
AttributeHelper::CLASS_TYPE_KEY, AttributeHelper::CONVERT_CLASSES, AttributeHelper::PRIMITIVE_CLASSES
Instance Method Summary
collapse
#bind_thread, included, #target_thread, #target_thread?, #thread_check
#delete, #dirty?, #id, inherited, #new_record?, #on_after_delete, #on_after_load, #on_before_delete, #on_before_load, #reload, #save
#dump_attrs, #retrieve_attr_attribute
Instance Method Details
#bind_cloud_host(new_cloud_host) ⇒ Object
816
817
818
819
820
821
822
823
824
825
826
|
# File 'lib/wakame/service.rb', line 816
def bind_cloud_host(new_cloud_host)
return if !self.resource.require_agent || self.cloud_host_id == new_cloud_host.id
raise "The host (#{new_cloud_host.id}) was assigned same service already: #{resource.class}" if new_cloud_host.has_resource_type?(resource)
unbind_cloud_host
self.cloud_host_id = new_cloud_host.id
self.save
ED.fire_event(Event::ServiceBoundHost.new(self, new_cloud_host))
end
|
#bind_cluster(cluster) ⇒ Object
876
877
878
879
880
881
882
883
884
|
# File 'lib/wakame/service.rb', line 876
def bind_cluster(cluster)
return if self.cluster_id == cluster.id
unbind_cluster
self.cluster_id = cluster.id
self.save
ED.fire_event(Event::ServiceBoundCluster.new(self, cluster))
end
|
#bind_resource(resource) ⇒ Object
847
848
849
850
851
852
853
854
855
|
# File 'lib/wakame/service.rb', line 847
def bind_resource(resource)
return if self.resource_id == resource.id
unbind_resource
self.resource_id = resource.id
self.save
end
|
#child_instances ⇒ Object
913
914
915
916
917
918
919
920
921
|
# File 'lib/wakame/service.rb', line 913
def child_instances
ary = []
self.cluster.dg.children(resource.class).each { |r|
self.cluster.each_instance(r.class){ |i|
ary << i
}
}
ary.flatten
end
|
#cloud_host ⇒ Object
810
811
812
813
814
|
# File 'lib/wakame/service.rb', line 810
def cloud_host
raise "The associated resource is not needed to have agent." unless self.resource.require_agent
self.cloud_host_id.nil? ? nil : CloudHost.find(self.cloud_host_id)
end
|
#cluster ⇒ Object
871
872
873
874
|
# File 'lib/wakame/service.rb', line 871
def cluster
return nil if self.cluster_id.nil?
ServiceCluster.find(self.cluster_id)
end
|
#export_binding ⇒ Object
899
900
901
|
# File 'lib/wakame/service.rb', line 899
def export_binding
binding
end
|
#parent_instances ⇒ Object
903
904
905
906
907
908
909
910
911
|
# File 'lib/wakame/service.rb', line 903
def parent_instances
ary = []
self.cluster.dg.parents(resource.class).each { |r|
self.cluster.each_instance(r.class){ |i|
ary << i
}
}
ary.flatten
end
|
#resource ⇒ Object
842
843
844
845
|
# File 'lib/wakame/service.rb', line 842
def resource
return nil if self.resource_id.nil?
Resource.find(self.resource_id)
end
|
#unbind_cloud_host ⇒ Object
829
830
831
832
833
834
835
836
837
838
839
|
# File 'lib/wakame/service.rb', line 829
def unbind_cloud_host
return if self.cloud_host_id.nil?
old_item = self.cloud_host
self.cloud_host_id = nil
self.save
ED.fire_event(Event::ServiceUnboundHost.new(self, old_item))
old_item
end
|
#unbind_cluster ⇒ Object
887
888
889
890
891
892
893
894
895
896
|
# File 'lib/wakame/service.rb', line 887
def unbind_cluster
return if self.cluster_id.nil?
old_item = self.cluster_id
self.cluster_id = nil
self.save
ED.fire_event(Event::ServiceUnboundCluster.new(self, old_item))
old_item
end
|
#unbind_resource ⇒ Object
858
859
860
861
862
863
864
865
866
867
|
# File 'lib/wakame/service.rb', line 858
def unbind_resource
return if self.resource_id.nil?
old_item = self.resource_id
self.resource_id = nil
self.save
old_item
end
|
#update_status(new_status, changed_at = Time.now, fail_message = nil) ⇒ Object
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
|
# File 'lib/wakame/service.rb', line 782
def update_status(new_status, changed_at=Time.now, fail_message=nil)
if @status != new_status
prev_status = @status
@status = new_status
@status_changed_at = changed_at
self.save
event = Event::ServiceStatusChanged.new(self.id, resource, new_status, prev_status)
event.time = @status_changed_at.dup
ED.fire_event(event)
tmp_event = nil
if prev_status != Service::STATUS_ONLINE && new_status == Service::STATUS_ONLINE
tmp_event = Event::ServiceOnline.new(self.id, self.resource)
tmp_event.time = @status_changed_at.dup
elsif prev_status != Service::STATUS_OFFLINE && new_status == Service::STATUS_OFFLINE
tmp_event = Event::ServiceOffline.new(self.id, self.resource)
tmp_event.time = @status_changed_at.dup
elsif prev_status != Service::STATUS_FAIL && new_status == Service::STATUS_FAIL
tmp_event = Event::ServiceFailed.new(self.id, self.resource, fail_message)
tmp_event.time = @status_changed_at.dup
end
ED.fire_event(tmp_event) if tmp_event
end
end
|