🚧
DevOps - Technical test
Introduction
This technical test is an assessment of some of the necessary technical skills for this
Smartex job. With this technical test, all the other necessary work files shall be provided
as an attachment.
Please provide the output of this tech test a maximum of 72 hours after the delivery of
this document.
The output of this tech test should be:
A PDF where the answers to the questions on this document are detailed
The necessary work files that are an output of the questions
At the end of the test, please send the output to paulo.ribeiro@smartex.ai
Notes:
1. For questions that require commands, we are expecting Linux commands (native or
not, ex. you could use a command that is not widely distributed by default but that
can be installed using apt)
DevOps - Technical test 1
2. For questions that require scripts, the scripts can be in any language (bash, shell,
python, ruby, Perl, etc)
Exercise #1 - Generic / Network
How would you discover how many Raspberry Pi devices are connected to a network.
Use any tools to find out this information. How would you list their mac addresses and
their IP addresses?
Exercise #2 - Linux / Scripting
Write a script to determine whether a host is up or down
Write a script to remove all the empty files in a given directory (also nested
directories)
Exercise #3 - Generic
Describe the tools that you would use and the steps that you would take to address
these generic issues:
What are you using for troubleshooting and debugging network issues?
What are you using for troubleshooting and debugging disk & file system issues?
What are you using for troubleshooting and debugging process issues?
What are you using for debugging CPU-related issues?
DevOps - Technical test 2
You get a call from someone claiming "my system is SLOW". What do you do?
Exercise #4 - Linux / Scripting
Given a text file, perform the following exercises (answers should be the commands that
you would use):
Extract all the numbers
Extract the first word of each line
Extract all the IP addresses
Extract dates in the format of yyyy-mm-dd or yyyy-dd-mm
Extract email addresses
Replace tabs with four spaces
Replace 'red' with 'green'
Exercise #5 - Generic / Linux / Network
How would you identify the MAC Address of the Access Point in the Smartex office with
the highest signal strength for your computer?
DevOps - Technical test 3
Exercise #6 - Generic / Linux
Being connect by ssh to an embedded device running Linux with I2C support how would
you find all the connected I2C devices and their addresses?
Exercise #7 - Python
ℹ Document functions with numpy docstrings
1. Write a function that gets a string and compresses it
'aaaabbccc' -> 'a4b2c3'
'abbbc' -> 'a1b3c1'
2. Write a function that decompresses a given string
'a4b2c3' -> 'aaaabbccc'
'a1b3c1' -> 'abbbc'
Exercise #8 - CI/CD + Containerization
1. Choose an open-source project from GitHub and fork it
2. Create a CI pipeline/workflow for the project you forked
3. The CI pipeline/workflow will include anything that is relevant to the project you
forked. For example:
If it's a Python project, you will run PEP8
If the project has a unit tests directory, you will run these unit tests as part of the CI
4. In a separate file, describe what is running as part of the CI and why you chose to
include it. You can also describe any thoughts, dilemmas, challenge you had
DevOps - Technical test 4
5. Bonus - Containerize the app of the project you forked using any containerization
technology you would like.
Exercise #9 - Kubernetes
ℹ Detail the commands used in each step
1. Cluster
a. Setup a kubernets cluster in at least 2 VMs
2. Pods
a. Create a pod running ngnix
b. Create a service for the pod you've just created
c. Verify the app is reachable
3. ReplicaSets
a. Create a ReplicaSet with 2 replicas.
b. Verify a ReplicaSet was created and there are 2 replicas
c. Delete one of the Pods the ReplicaSet has created
d. If you'll list all the Pods now, what will you see?
e. Remove the ReplicaSet you've created
f. Verify you've deleted the ReplicaSet
Exercise #10 - Cloud Architecture
Draw a diagram of a backend service (like NodeJS, Flask, etc), exposed on the internet,
with an unpredictable network load, to update values on a database
The architecture should be:
Reliable
DevOps - Technical test 5
Scalable
Secure
Fault-Tolerant
For this exercise, you can include as many details as possible, including network ports,
different solution providers, encrypted connections, domains, certificates, and network
segregation. Database scalability can be ignored.
Suggestion: There are many online apps to draw diagrams. You can use
https://app.diagrams.net/
Exercise #11 - GOLang
Create a small script in go that:
1. Print all mac addresses from interfaces with IP addresses
2. Print machine hostname
3. Bonus: Create a small menu for this;
Exercise #12 - Terraform
Create a terraform recipe to launch an AWS EC2 instance with the following proprieties:
1. Instance type: t2.nano
2. AMI: ubuntu 20.04
3. Storage: 5GB disk
4. Generate an ssh key and set it as the access key
5. Open port 22 to 193.137.28.212/32 IP address
6. Use subnet: subnet-011c0778a1f037247
DevOps - Technical test 6
7. Bonus: Create the whole infrastructure from VPC to EC2. Note: We are going to
need internet access on this machine
DevOps - Technical test 7