def test_rc_aws_ebs(self): # http://kubernetes.io/docs/user-guide/volumes/#awselasticblockstore # - the nodes on which pods are running must be AWS EC2 instances # - those instances need to be in the same region and availability-zone as the EBS volume # - EBS only supports a single EC2 instance mounting a volume # Pod creation will timeout waiting for readiness if not on AWS; unschedulable. container_name = "nginx" container_image = "nginx:1.7.9" container_nginx = utils.create_container(name=container_name, image=container_image) container_name = "redis" container_image = "redis:3.0.7" container_redis = utils.create_container(name=container_name, image=container_image) volume_id = "vol-0e3056a2" vol_name = "ebs" vol_type = "awsElasticBlockStore" vol_mount = "/test-aws-ebs" volume = utils.create_volume(name=vol_name, type=vol_type, mount_path=vol_mount) volume.set_volume_id(volume_id) container_nginx.add_volume_mount(volume) container_redis.add_volume_mount(volume) rc_name = "nginx-{0}".format(str(uuid.uuid4())) rc = utils.create_rc(name=rc_name) rc.add_volume(volume) rc.add_container(container_nginx) rc.add_container(container_redis) rc.set_replicas(3) if utils.is_reachable(rc.config.api_host): try: rc.create() vols = rc.model.model['spec']['template']['spec']['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) vols = rc.model.pod_spec.model['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) self.assertEqual(2, len(rc.model.model['spec']['template']['spec']['containers'])) mounts = rc.model.model['spec']['template']['spec']['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) self.assertEqual(2, len(rc.model.pod_spec.model['containers'])) mounts = rc.model.pod_spec.model['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) except Exception as err: self.assertIsInstance(err, TimedOutException)
def test_rc_gce_pd(self): # http://kubernetes.io/docs/user-guide/volumes/#gcepersistentdisk # - the nodes on which pods are running must be GCE VMs # - those VMs need to be in the same GCE project and zone as the PD # Pod creation will timeout waiting for readiness if not on GCE; unschedulable. container_name = "nginx" container_image = "nginx:1.7.9" container_nginx = utils.create_container(name=container_name, image=container_image) container_name = "redis" container_image = "redis:3.0.7" container_redis = utils.create_container(name=container_name, image=container_image) pd_name = "kubernetes-py-test-pd" vol_name = "persistent" vol_type = "gcePersistentDisk" vol_mount = "/test-gce-pd" volume = utils.create_volume(name=vol_name, type=vol_type, mount_path=vol_mount, read_only=True) volume.set_pd_name(pd_name) container_nginx.add_volume_mount(volume) container_redis.add_volume_mount(volume) rc_name = "nginx-{0}".format(str(uuid.uuid4())) rc = utils.create_rc(name=rc_name) rc.add_volume(volume) rc.add_container(container_nginx) rc.add_container(container_redis) rc.set_replicas(3) if utils.is_reachable(rc.config.api_host): try: rc.create() vols = rc.model.model['spec']['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) vols = rc.model.pod_spec.model['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) self.assertEqual(1, len(rc.model.model['spec']['containers'])) mounts = rc.model.model['spec']['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) self.assertEqual(1, len(rc.model.pod_spec.model['containers'])) mounts = rc.model.pod_spec.model['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) except Exception as err: self.assertIsInstance(err, TimedOutException)
def test_rc_git_repo(self): container_name = "nginx" container_image = "nginx:1.7.9" container_nginx = utils.create_container(name=container_name, image=container_image) container_name = "redis" container_image = "redis:3.0.7" container_redis = utils.create_container(name=container_name, image=container_image) vol_name = "git-repo" vol_type = "gitRepo" vol_mount = "/test-git-repo" repo = "https://*****:*****@git-lab1.mtl.mnubo.com/ops/traffic-analyzer.git" revision = "e42d3dca1541ba085f34ce282feda1109a707c7b" volume = utils.create_volume(name=vol_name, type=vol_type, mount_path=vol_mount) volume.set_git_repository(repo) volume.set_git_revision(revision) container_nginx.add_volume_mount(volume) container_redis.add_volume_mount(volume) rc_name = "nginx-{0}".format(str(uuid.uuid4())) rc = utils.create_rc(name=rc_name) rc.add_volume(volume) rc.add_container(container_nginx) rc.add_container(container_redis) rc.set_replicas(3) if utils.is_reachable(rc.config.api_host): try: rc.create() vols = rc.model.model['spec']['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) vols = rc.model.pod_spec.model['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) self.assertEqual(1, len(rc.model.model['spec']['containers'])) mounts = rc.model.model['spec']['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) self.assertEqual(1, len(rc.model.pod_spec.model['containers'])) mounts = rc.model.pod_spec.model['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) except Exception as err: self.assertIsInstance(err, TimedOutException)
def test_rc_nfs(self): container_name = "nginx" container_image = "nginx:1.7.9" container_nginx = utils.create_container(name=container_name, image=container_image) container_name = "redis" container_image = "redis:3.0.7" container_redis = utils.create_container(name=container_name, image=container_image) vol_name = "nfs" vol_type = "nfs" vol_mount = "/test-nfs" server = "howard.mtl.mnubo.com" path = "/fs1/test-nfs" volume = utils.create_volume(name=vol_name, type=vol_type, mount_path=vol_mount) volume.set_server(server) volume.set_path(path) container_nginx.add_volume_mount(volume) container_redis.add_volume_mount(volume) rc_name = "nginx-{0}".format(str(uuid.uuid4())) rc = utils.create_rc(name=rc_name) rc.add_volume(volume) rc.add_container(container_nginx) rc.add_container(container_redis) rc.set_replicas(3) if utils.is_reachable(rc.config.api_host): try: rc.create() vols = rc.model.model['spec']['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) vols = rc.model.pod_spec.model['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) self.assertEqual(1, len(rc.model.model['spec']['containers'])) mounts = rc.model.model['spec']['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) self.assertEqual(1, len(rc.model.pod_spec.model['containers'])) mounts = rc.model.pod_spec.model['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) except Exception as err: self.assertIsInstance(err, TimedOutException)
def test_rc_secret(self): container_name = "nginx" container_image = "nginx:1.7.9" container_nginx = utils.create_container(name=container_name, image=container_image) container_name = "redis" container_image = "redis:3.0.7" container_redis = utils.create_container(name=container_name, image=container_image) secret_name = "yosecret" secret = utils.create_secret(name=secret_name) k = ".secret-file" v = "dmFsdWUtMg0KDQo=" secret.set_data(k, v) vol_name = "secret" vol_type = "secret" vol_mount = "/test-secret" volume = utils.create_volume(name=vol_name, type=vol_type, mount_path=vol_mount) volume.set_secret_name(secret) container_nginx.add_volume_mount(volume) container_redis.add_volume_mount(volume) rc_name = "app" rc = utils.create_rc(name=rc_name) rc.add_volume(volume) rc.add_container(container_nginx) rc.add_container(container_redis) rc.set_replicas(1) if utils.is_reachable(rc.config.api_host): secret.create() rc.create() vols = rc.model.model['spec']['template']['spec']['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) vols = rc.model.pod_spec.model['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) self.assertEqual(2, len(rc.model.model['spec']['template']['spec']['containers'])) mounts = rc.model.model['spec']['template']['spec']['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) self.assertEqual(2, len(rc.model.pod_spec.model['containers'])) mounts = rc.model.pod_spec.model['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames)
def test_cassandra_setup(self): svc = Service(utils.cassandra_service()) k8s_service = utils.create_service(name="cassandra") k8s_service.model = svc rc = ReplicationController(utils.cassandra_rc()) k8s_rc = utils.create_rc(name="cassandra") k8s_rc.model = rc ds = DaemonSet(utils.cassandra_daemonset()) k8s_ds = utils.create_daemonset(name="cassandra") k8s_ds.model = ds if utils.is_reachable(k8s_rc.config.api_host): k8s_service.create() k8s_rc.create() self.assertIsInstance(k8s_service, K8sService) self.assertIsInstance(k8s_rc, K8sReplicationController)
def test_rc_hostpath(self): container_name = "nginx" container_image = "nginx:1.7.9" container_nginx = utils.create_container(name=container_name, image=container_image) container_name = "redis" container_image = "redis:3.0.7" container_redis = utils.create_container(name=container_name, image=container_image) vol_name = "hostpath" vol_type = "hostPath" vol_mount = "/test-hostpath" hostpath = "/var/lib/docker" volume = utils.create_volume(name=vol_name, type=vol_type, mount_path=vol_mount) volume.set_path(hostpath) container_nginx.add_volume_mount(volume) container_redis.add_volume_mount(volume) rc_name = "app" rc = utils.create_rc(name=rc_name) rc.add_volume(volume) rc.add_container(container_nginx) rc.add_container(container_redis) rc.set_replicas(1) if utils.is_reachable(rc.config.api_host): rc.create() vols = rc.model.model['spec']['template']['spec']['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) vols = rc.model.pod_spec.model['volumes'] volnames = [x['name'] for x in vols] self.assertIn(vol_name, volnames) self.assertEqual(2, len(rc.model.model['spec']['template']['spec']['containers'])) mounts = rc.model.model['spec']['template']['spec']['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames) self.assertEqual(2, len(rc.model.pod_spec.model['containers'])) mounts = rc.model.pod_spec.model['containers'][0]['volumeMounts'] mountnames = [x['name'] for x in mounts] self.assertIn(vol_name, mountnames)
def test_init_with_invalid_name(self): name = object() with self.assertRaises(SyntaxError): utils.create_rc(name=name)