Changes to be committed: new file: Questions_Answers.md new file: README deleted: mainmaster
parent
3c420dc3db
commit
4d180a1212
3 changed files with 75 additions and 0 deletions
@ -0,0 +1,51 @@ |
||||
## Level 1 Questions |
||||
How would you prove the code is correct? |
||||
To prove the code is correct I suppose I could set up a test environment |
||||
where I could account for all connections and run tests like |
||||
ssh connections, dhclient or dig (dns) connections, nmap port |
||||
scans, and then ensure the connections I expect from the tests |
||||
appear in the program's output. |
||||
|
||||
How would you make this solution better? |
||||
I'd improve the solution by making the functions more focused on |
||||
specific tasks, improving how I present the interface of each |
||||
function to each other to more specifically eliminate type |
||||
or value errors. I'd also allot more time to complete the task |
||||
since I wasn't able to find enough before the deadline. |
||||
Is it possible for this program to miss a connection? |
||||
Yes, if the connection is brief enough so as not to last more than 10 |
||||
seconds and thereby be missed by the most recent read of the |
||||
/proc/net/tcp file |
||||
If you weren't following these requirements, how would you solve the problem of logging every new connection? |
||||
I would likely find a solution that leverages inotify to detect any change to the file and then read it, |
||||
rather than polling it every 10 seconds. |
||||
|
||||
## Level 2 Questions |
||||
Why did you choose 'x' to write the build automation? |
||||
I would simply choose bash, as it's what I'm most familiar with and it |
||||
can reliably use the go build tools as well as invoke testing |
||||
systems like kvm/qemu, docker/podman and the like. |
||||
Is there anything else you would test if you had more time? |
||||
If I had more time I'd spend it fleshing out my testing as outlined above |
||||
and doing a more thorough job of structuring my data in the way |
||||
that I've modeled it in my head - the choice of go definitely |
||||
consigned me to reading more than writing with the little time |
||||
I had. Should have gone with bash I think. |
||||
What is the most important tool, script, or technique you have for solving |
||||
problems in production? Explain why this tool/script/technique is the most important. |
||||
|
||||
|
||||
## Level 3 Questions |
||||
|
||||
If you had to deploy this program to hundreds of servers, what would be your |
||||
preferred method and why? |
||||
|
||||
I would use ansible and use git to clone, build, and install the script. |
||||
This method is my preferred one because it's simple to |
||||
troubleshoot in the event that I run into issues and |
||||
ansible doesn't require a central orchestrator node. It's |
||||
also the Infrastructure-as-code tool I'm most familiar with. |
||||
What is the hardest technical problem or outage you've had to solve in your |
||||
career? Explain what made it so difficult? |
||||
|
||||
|
@ -0,0 +1,24 @@ |
||||
# teleport_devops_challenge |
||||
|
||||
WARNING: This program is in an incomplete state and does not build successfully. |
||||
The latest commit that builds successfully can be found here: |
||||
https://git.libre.audio/seasharp/teleport_devops_challenge/commit/93fd6f916bc5a6b7504c5475f7cbcebabaae5277 |
||||
|
||||
|
||||
## Dependencies |
||||
|
||||
- golang 'encoding' package |
||||
|
||||
## Building |
||||
|
||||
Ensure your $GOPATH is set correctly and run: |
||||
|
||||
1. Execute `go build main.go` in repository root |
||||
2. Execute `go install teleport_devops_challenge` |
||||
|
||||
## Executing |
||||
|
||||
Ensure GOPATH/bin (GOPATH = `go env GOPATH`) has been added to your shell $PATH |
||||
or execute the following: |
||||
|
||||
`PATH=/home/$(whoami)/go/bin:$PATH teleport_devops_challenge` |
Loading…
Reference in new issue