237 lines
7.4 KiB
Ruby
237 lines
7.4 KiB
Ruby
require_relative 'test_helper'
|
|
require 'vcr'
|
|
|
|
# creation of google's example of guest book
|
|
class CreateGuestbookGo < MiniTest::Test
|
|
def test_create_guestbook_entities
|
|
VCR.configure do |c|
|
|
c.cassette_library_dir = 'test/cassettes'
|
|
c.hook_into(:webmock)
|
|
end
|
|
|
|
# WebMock.allow_net_connect!
|
|
VCR.use_cassette('kubernetes_guestbook') do # , record: :new_episodes) do
|
|
client = Kubeclient::Client.new('http://10.35.0.23:8080/api/', 'v1')
|
|
|
|
testing_ns = Kubeclient::Resource.new
|
|
testing_ns.metadata = {}
|
|
testing_ns.metadata.name = 'kubeclient-ns'
|
|
|
|
# delete in case they existed before so creation can be tested
|
|
delete_namespace(client, testing_ns.metadata.name)
|
|
delete_services(
|
|
client, testing_ns.metadata.name,
|
|
['guestbook', 'redis-master', 'redis-slave']
|
|
)
|
|
delete_replication_controllers(
|
|
client, testing_ns.metadata.name,
|
|
['guestbook', 'redis-master', 'redis-slave']
|
|
)
|
|
|
|
client.create_namespace(testing_ns)
|
|
services = create_services(client, testing_ns.metadata.name)
|
|
replicators = create_replication_controllers(client, testing_ns.metadata.name)
|
|
|
|
get_namespaces(client)
|
|
get_services(client, testing_ns.metadata.name)
|
|
get_replication_controllers(client, testing_ns.metadata.name)
|
|
|
|
delete_services(client, testing_ns.metadata.name, services)
|
|
delete_replication_controllers(client, testing_ns.metadata.name, replicators)
|
|
|
|
client.delete_namespace(testing_ns.metadata.name)
|
|
end
|
|
ensure
|
|
VCR.turn_off!
|
|
end
|
|
|
|
def delete_namespace(client, namespace_name)
|
|
client.delete_namespace(namespace_name)
|
|
rescue Kubeclient::ResourceNotFoundError => exception
|
|
assert_equal(404, exception.error_code)
|
|
end
|
|
|
|
def get_namespaces(client)
|
|
namespaces = client.get_namespaces
|
|
assert(true, namespaces.size > 2)
|
|
end
|
|
|
|
def get_services(client, ns)
|
|
retrieved_services = client.get_services(namespace: ns)
|
|
assert_equal(3, retrieved_services.size)
|
|
end
|
|
|
|
def get_replication_controllers(client, ns)
|
|
retrieved_replicators = client.get_replication_controllers(namespace: ns)
|
|
assert_equal(3, retrieved_replicators.size)
|
|
end
|
|
|
|
def create_services(client, ns)
|
|
guestbook_service = client.create_service(guestbook_service(ns))
|
|
redis_service = client.create_service(redis_service(ns))
|
|
redis_slave_service = client.create_service(redis_slave_service(ns))
|
|
[guestbook_service, redis_service, redis_slave_service]
|
|
end
|
|
|
|
def create_replication_controllers(client, namespace)
|
|
rc = client.create_replication_controller(guestbook_rc(namespace))
|
|
rc2 = client.create_replication_controller(redis_master_rc(namespace))
|
|
rc3 = client.create_replication_controller(redis_slave_rc(namespace))
|
|
[rc, rc2, rc3]
|
|
end
|
|
|
|
def delete_services(client, namespace, services)
|
|
# if the entity is not found, no need to fail the test
|
|
services.each do |service|
|
|
begin
|
|
if service.instance_of?(Kubeclient::Resource)
|
|
client.delete_service(service.metadata.name, namespace)
|
|
else
|
|
# it's just a string - service name
|
|
client.delete_service(service, namespace)
|
|
end
|
|
rescue Kubeclient::ResourceNotFoundError => exception
|
|
assert_equal(404, exception.error_code)
|
|
end
|
|
end
|
|
end
|
|
|
|
def delete_replication_controllers(client, namespace, replication_controllers)
|
|
# if the entity is not found, no need to fail the test
|
|
replication_controllers.each do |rc|
|
|
begin
|
|
if rc.instance_of?(Kubeclient::Resource)
|
|
client.delete_replication_controller(rc.metadata.name, namespace)
|
|
else
|
|
# it's just a string - rc name
|
|
client.delete_replication_controller(rc, namespace)
|
|
end
|
|
rescue Kubeclient::ResourceNotFoundError => exception
|
|
assert_equal(404, exception.error_code)
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def construct_base_rc(namespace)
|
|
rc = Kubeclient::Resource.new
|
|
rc.metadata = {}
|
|
rc.metadata.namespace = namespace
|
|
rc.metadata.labels = {}
|
|
rc.spec = {}
|
|
rc.spec.selector = {}
|
|
rc.spec.template = {}
|
|
rc.spec.template.metadata = {}
|
|
rc.spec.template.spec = {}
|
|
rc.spec.template.metadata.labels = {}
|
|
rc
|
|
end
|
|
|
|
def redis_master_rc(namespace)
|
|
rc = construct_base_rc(namespace)
|
|
rc.metadata.name = 'redis-master'
|
|
rc.metadata.labels.app = 'redis'
|
|
rc.metadata.labels.role = 'master'
|
|
rc.spec.replicas = 1
|
|
rc.spec.selector.app = 'redis'
|
|
rc.spec.selector.role = 'master'
|
|
rc.spec.template.metadata.labels.app = 'redis'
|
|
rc.spec.template.metadata.labels.role = 'master'
|
|
rc.spec.template.spec.containers = [{
|
|
'name' => 'redis-master',
|
|
'image' => 'redis',
|
|
'ports' => [{
|
|
'name' => 'redis-server',
|
|
'containerPort' => 6379
|
|
}]
|
|
}]
|
|
rc
|
|
end
|
|
|
|
def redis_slave_rc(namespace)
|
|
rc = construct_base_rc(namespace)
|
|
rc.metadata.name = 'redis-slave'
|
|
rc.metadata.labels.app = 'redis'
|
|
rc.metadata.labels.role = 'slave'
|
|
rc.spec.replicas = 2
|
|
rc.spec.selector.app = 'redis'
|
|
rc.spec.selector.role = 'slave'
|
|
rc.spec.template.metadata.labels.app = 'redis'
|
|
rc.spec.template.metadata.labels.role = 'slave'
|
|
rc.spec.template.spec.containers = [{
|
|
'name' => 'redis-slave',
|
|
'image' => 'kubernetes/redis-slave:v2',
|
|
'ports' => [{
|
|
'name' => 'redis-server',
|
|
'containerPort' => 6379
|
|
}]
|
|
}]
|
|
rc
|
|
end
|
|
|
|
def guestbook_rc(namespace)
|
|
rc = construct_base_rc(namespace)
|
|
rc.metadata.name = 'guestbook'
|
|
rc.metadata.labels.app = 'guestbook'
|
|
rc.metadata.labels.role = 'slave'
|
|
rc.spec.replicas = 3
|
|
rc.spec.selector.app = 'guestbook'
|
|
rc.spec.template.metadata.labels.app = 'guestbook'
|
|
rc.spec.template.spec.containers = [
|
|
{
|
|
'name' => 'guestbook',
|
|
'image' => 'kubernetes/guestbook:v2',
|
|
'ports' => [
|
|
{
|
|
'name' => 'http-server',
|
|
'containerPort' => 3000
|
|
}
|
|
]
|
|
}
|
|
]
|
|
rc
|
|
end
|
|
|
|
def base_service(namespace)
|
|
our_service = Kubeclient::Resource.new
|
|
our_service.metadata = {}
|
|
our_service.metadata.namespace = namespace
|
|
our_service.metadata.labels = {}
|
|
our_service.spec = {}
|
|
our_service.spec.selector = {}
|
|
our_service
|
|
end
|
|
|
|
def redis_slave_service(namespace)
|
|
our_service = base_service(namespace)
|
|
our_service.metadata.name = 'redis-slave'
|
|
our_service.metadata.labels.app = 'redis'
|
|
our_service.metadata.labels.role = 'slave'
|
|
our_service.spec.ports = [{ 'port' => 6379, 'targetPort' => 'redis-server' }]
|
|
our_service.spec.selector.app = 'redis'
|
|
our_service.spec.selector.role = 'slave'
|
|
our_service
|
|
end
|
|
|
|
def redis_service(namespace)
|
|
our_service = base_service(namespace)
|
|
our_service.metadata.name = 'redis-master'
|
|
our_service.metadata.labels.app = 'redis'
|
|
our_service.metadata.labels.role = 'master'
|
|
our_service.spec.ports = [{ 'port' => 6379, 'targetPort' => 'redis-server' }]
|
|
our_service.spec.selector.app = 'redis'
|
|
our_service.spec.selector.role = 'master'
|
|
our_service
|
|
end
|
|
|
|
def guestbook_service(namespace)
|
|
our_service = base_service(namespace)
|
|
our_service.metadata.name = 'guestbook'
|
|
our_service.metadata.labels.name = 'guestbook'
|
|
our_service.spec.ports = [{ 'port' => 3000, 'targetPort' => 'http-server' }]
|
|
our_service.spec.selector.app = 'guestbook'
|
|
our_service.type = 'LoadBalancer'
|
|
our_service
|
|
end
|
|
end
|