---
# System prepended metadata

title: Artifakt Engineering

---

# Artifakt Engineering

Welcome to Artifakt Egineering Technical test :rocket:. 

This test has 2 purposes :
- Get a first overview of your software engineering skills and have a basis for discussion for the next interview
- Show you what we do at Artifakt, how we work and give you a first glimpse of what you will do if you join us

This test is not : 
- free hidden work (your code will be not ship in the next release :smile: )
- a painfull moment for you

We extremely take care of work-life balance. Feel free to discuss it with us if you cannot run this test in the best conditions for you.


## Cloud Software Engineer Tech test

Artifakt Cloud Platforms is based on a piece of software running in Kubernetes and using [Kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) pattern.

Our mission in Cloud Software Engineering team is to provide a Cloud provider abstraction for Artifakt product.

### Technical test details

Write a small [Kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) that manage a [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) which operate any managed service running in the cloud (eg: EC2, S3, Cloud functions, etc...)

You are completely free to choose which service on which Cloud provider and the language of your operator. If you don't have any idea you can implement the following exemple.

> Example :
> This operator will operate a CRD managing AWS EC2 instance
>
> ```yaml
> $ kubectl get ec2 -n myns
>   NAME           SIZE          PHASE      IP
>   test-ec2       t2.small      Running    10.54.69.58
>
> $ cat new_ec2.yml
> apiVersion: aws.artifakt.io/v1
> kind: EC2
> metadata:
>   name: new-ec2
>   namespace: default
> spec:
>   size: m5.large
>   ami: ami-0bb3fad3c0286ebd5
>   region: eu-west-1
>
> $ kubectl apply -f new_ec2.yaml
>   ec2.artifakt.io created
>   
> $ kubectl get ec2 -n myns
>   NAME           SIZE          PHASE       IP
>   test-ec2       t2.small      Running     10.54.69.58
>   new-ec2        m5.large      Pending
>
> $ kubectl delete ec2 test-ec2 -n myns
>   NAME           SIZE          PHASE       IP
>   test-ec2       t2.small      Deleting    10.54.69.58
>   new-ec2        m5.large      Running     10.54.69.57
> ```

:information_source: Bonus points; feel free to explore the following topics :
- unit tests
- metrics
- CICD
- documentation
- :bulb: ...

### Tips for your test

- [kubernetes/sample-controller](https://github.com/kubernetes/sample-controller)
- [github.com/operator-framework](https://github.com/operator-framework)
- [kubernetes fake client](https://github.com/kubernetes/client-go/tree/master/examples/fake-client)
- [kind (kubernetes in docker)](https://kind.sigs.k8s.io/docs/user/quick-start/)

## Practical informations

When you are satisfied with your work please : 
1. Create a private Github Repository and push your code
2. Send us an email
3. We will setup the next interview and give you the githubID of people who will run the next interview
4. Add this people as `Read` user on your project


We really hope you will enjoy this test :i_love_you_hand_sign: