diff --git a/Questions_Answers.md b/Questions_Answers.md new file mode 100644 index 0000000..7d72173 --- /dev/null +++ b/Questions_Answers.md @@ -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? + + diff --git a/README b/README new file mode 100644 index 0000000..21f42c5 --- /dev/null +++ b/README @@ -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` diff --git a/main b/main deleted file mode 100755 index a4734c9..0000000 Binary files a/main and /dev/null differ