Reddit DevOps
273 subscribers
64 photos
32K links
Reddit DevOps. #devops
Thanks @reddit2telegram and @r_channels
Download Telegram
What makes a "good" junior engineer? My 2c as a senior.

Something we see a lot in DevOps community forums are posts asking how to get into DevOps. This has been answered endlessly and will continue to be with varying degrees of snark depending on the mood of the people replying. Please, read the friendly manual! Something I personally haven't seen nearly as often, despite it being a much more interesting question, is "How do I succeed as a junior engineer?"

Most people know and would agree that one's skillset can be broadly delineated into soft skills and technical chops. The interview process is (usually poorly) designed to determine whether the applicant satisfies each of those requirements. So, congrats! You've landed your first job offer. What now?

In my opinion, soft skills are much more important to be effective as a junior than technical skills. They're also significantly more nebulous and harder to distill into something that you can just go study. They require huge amounts of practice to refine, and unlike tech, there's no test environment. Every interaction you have with another person is influencing their perception of you.

I was recently enough a junior that a lot of this is still fresh, and I mentor juniors regularly at work, so I figured I'd write this post up and recycle some content from a previous comment of mine that was well received in case this is helpful to anyone just starting out.

Hope some of this might be helpful to someone, and I'd be super keen to hear from other folks in the comments if you disagree or have anything to add.

Cheers!

------

Worry about your mindset first, you'll pick up the tech as you go. Keep in mind, everyone you work with closely will know that you're novice and should set their expectations accordingly. That is a huge blessing as it gives you a ton of room to blatantly not know things. A good junior should be curious, aware of their own limitations, and courageous enough to both try things on your own and ask for help when you need it.

Some of this advice is tailored to my experience with organizations that were not practiced at onboarding and mentoring juniors, but a lot of it is generalizable.

In no particular order:

- Ask questions when you don't understand something.
- Try to get a sense for when your question is specific to you being ignorant or whether it contributes to the discussion. If the former, don't interrupt a meeting to ask it. Ask someone on the side after (or during over chat, if you're comfortable with them).
- https://nohello.net/
- Learn to fish. People will generally resent being repeatedly asked to spoonfeed you information that can be looked up in internal docs or the internet. You wouldn't ask your senior colleague how to create a VM in Azure. You might ask their opinion on when to use a VM vs. a container.
- FIND WHERE THE DOCUMENTATION IS AND READ IT! If it's like most orgs, there will be several places to find docs and none of them will be up to date, but if the systems are still in use there will be good info in there even so.
- If you want serious brownie points, document a bunch of tribal knowledge that's missing from the new hire doc they give you. If there isn't a new hire doc, create one and list stuff you had to do to get onboarded. Permissions in this system or that, setting up MFA, whatever.
- Try to figure things out on your own before asking for help, but don't be stubborn about it. If you've worked a minimum wage job, you'll be shocked by how much you're left alone in a professional setting. Don't misinterpret this as thinking you're expected to work by yourself all the time.
- Talk to your manager or some seniors on your team about a rule of thumb for how long you should spin your wheels trying to figure something out on your own before asking for help. I would and have been annoyed to find out someone spent 4 hours on something and didn't make any progress when I knew the answer already.
- Learn git if you haven't already. Not crazy stuff, but how to create a feature branch and open a PR at
least.
- Try to understand (at a high level) the software development lifecycle at your company within the first few weeks. A good way to approach this is to pick a repository and map out how code goes from a developer's machine to production. Start with just system to system (dev machine -> github -> CI -> CD -> Develop -> UAT -> Staging -> Prod or whatever it is) then recursively dig into the actual processes happening in each system until you operate at the same abstraction layer as your senior colleagues.
- Volunteer for projects, especially things that other people don't want to do. The new pipeline ticket is toil for your senior colleague but represents a learning opportunity for you as well as a chance to deliver business value.
- Pay attention to things that seem silly. A fresh perspective on systems and processes that your predecessors have been working with for years can be invaluable.
- For the love of all that is holy, realize that people are smart and things are often the way they are for reasons that you have no knowledge of. Asking why is great, but reserve judgement on merit until you have a more comprehensive understanding of the thing you might be criticizing.
- Internalize the fact that many of the people you will be working with take a lot of pride in their work. While continuous improvement is an essential part of software development, be careful that you're not calling someone's baby ugly.
- Internalize the fact that as you level up your technical skills, your ability to drive impactful projects and make meaningful achievements is going to be hugely hampered or enabled by your colleague's opinion of you. Software development is a team sport and if you make people feel bad or are difficult to work with then you will be hamstrung in terms of your ability to get other people pulling in the same direction as you.
- Work with your supervisor (even ask senior colleagues for input) on a career development plan. You should orient yourself with the expectations of the next level up and use those to guide your progress.
- Do not abandon tasks unless priorities have shifted and you've been instructed to pivot.
- Project management is almost entirely about setting expectations. Communicate early and often to stakeholders on if something is delayed or if you hit a roadblock!

https://redd.it/zjnk4n
@r_devops
Devops entrepreneurs…..

How do I use my devops knowledge to create my own source of income? Tried freelancing websites, it seems like people are basically paying bare minimum to get massive volumes of work done. Besides 9-5 what’re some ways this skill can be used to generate revenue?

https://redd.it/zjo31k
@r_devops
Programming or Devops?

Hi everyone, I've been studying devops lately thinking about migrating to the area, but I am in great doubt, if I continue studying devops or if I change and go to programming. Nowadays I work as IT support with a focus on azure administration, the salary is not very good, and seeing my friends working with programming and receiving more than twice as much makes me want to migrate to the programming area, but I have more knowledge In Devops due to some courses I took abroad, such as docker, powershell scripting, azure ci/cd, datadog, Linux. I'm not very good at programming, but I can try. Those of you who already work in the area, should I continue studying devops or should I migrate to programming?

https://redd.it/zjuh37
@r_devops
Moving past Jenkins

What would you say is the best alternative to Jenkins? Of course something widely used and not in a beta stage.

I’m learning Jenkins right now and absolutely hate the plug-in based architecture, I was thinking maybe GitLab?

What would you suggest?

https://redd.it/zjvrx2
@r_devops
Director is floating the idea of moving me into Management...

Context:

I've been in the industry for almost two decades now (yes, I'm old LOL) primarily working with Linux based infrastructures. I've spent time as a sys admin, Network Engineer, Infrastructure Architect and now as a Sr. DevOps Engineer. Each transition in my career has been done strategically and with purpose to get to this point, such as my decision to become a Network Engineer for a couple of years where my goal was to gain a much stronger foundation in advanced networking concepts and protocols which I could apply to my journey and as a result, has put me head-and-shoulders over most of my peers.

I've only been with my current employer for about 3 years and in that time have been able to usher in some very impactful change such as self-healing architecture and automation, no-downtime code deployments, and above all else fostering a true DevOps philosophy, all of which contributing to more stability and cost reduction. This has given me a pretty good reputation at my workplace where my name is often part of higher level conversations among directors and some executives.

I'm writing here now, wondering if there's anyone else in here who has made the transition from high-performing individual contributor to manager.

What was that transition like?
What were some of the struggles you had to deal with?
What was it like going from managing machines / code to managing people?
And finally, was it worth it?
Would you do it again if you could?
What would you do differently?

TL:DR

What was your experienced going from a high-performing IC to a Manager?

https://redd.it/zjyojz
@r_devops
When is Ansible needed and why?

I'm having a hard time to understand why would Ansible be needed. I have the following 2 real world scenarios that I have worked on (I excluded details for brevity);

1. Using Azure DevOps as a CICD pipeline to build and push images to an external repository, Terraform A to bootstrap an AWS account, Terraform B to pull images and deploy application infrastructure on ECS.
2. Using JCasC on EKS A to build and push images to an external repository, package helm and deploy infrastructure on EKS B. Terraform A to bootstrap a Transit Gateway account (networking account), Terraform B to bootstrap an application account, Terraform C to deploy the application infrastructure.

Where and when would I need Ansible or any other similar tool to achieve what? Please keep in mind that I'm not specifically talking about the tooling here but generally for CaC. Both of the examples above are reasonably large projects with each having 60+ Terraform modules consisting of 5-8 Microservices and one being multi-region as well (I understand that for some people this isn't large at all but they're large enough for this argument sake)

I am not against introducing new tooling to any process, I am merely trying to understand where I could place a configuration management tool having in mind the 12 factor application methodology.

https://redd.it/zjzkdh
@r_devops
Infrastructure as code

Hi, I hope this is the right place to ask my question.

I try to automate the process of rolling out app VMs on Proxmox. I already use Ansible since quiet some time but recently stumbled upon Packer and Terraform and think they are useful too. However I have trouble to figure out how to best organize the pipeline.

I thought about the following:
- Use Packer to create a Proxmox VM template with the OS installed and some general configuration applied. With general I mean config that will always be the same across all VM instances. (Eg. SSH config hardening)
- Use Terraform to create a VM instance from this template and apply some instance specific configuration. (Eg. Generate SSH host keys)
- Use Ansible to rollout the application.

However I could also leave out the configuration through Packer and Terraform and do it all with Ansible afterwards... having it in three places seems a bit unorganized. But on the other hand why do these tools have the ability to do that.

I am aware that I can call Packer/Terraform from Ansible and vice versa.

I'm just very unsure how to organize that whole thing. And I want to get it (at least close to) right from the beginning.

So... are there any best practices? What could you recommend? Are there other tools that I should know about?

Thanks!

https://redd.it/zk7tgk
@r_devops
Artificial Intelligence Infrastructure-as-Code Generator

ChatGPT is the biggest trend in the tech world now. We developed AIaC to speed up the writing of iac for #devops teams ( terraform, cloudformation, helm, pulumi and more) using OpenAI. AIaC is an opensource and free to use. If you like it, give it a 🌟

https://redd.it/zkbmrb
@r_devops
terraforming existing infra

Hi
I started in a new company with a deployed but undocumented infra
I would like to terraform as much as I can of current infra so I can afront new requirements having a base, but I'm feel it's a big task and probably imposible to do

I'm wrong? There is some kind "of Magic" / procedures/ advises I can follow to have terraformed the infra?

https://redd.it/zkapt1
@r_devops
Expose only part of .env for every service in docker-compose

I was usually just doing env_file: - .env in every service in dc, but now Im little worried, that other some services may be malicious and sneak some sensitive env variables (i.e someone hacks docker hub / github repo and inserts malicious code - so you theoretically can pull malicious code that sends all your env variables).

​

So I was wondering what would be the best way to limit the scope of .env file that every service sees? Probably having a dedicated .env for every service is the most straight-forward way, but that will lead to some variables being duplicated in different files (i.e. db password)

https://redd.it/zk7lp5
@r_devops
I am not liking my job

A little background: 31 years old guy here. Did a bachelor in EEE with love in C, MATLAB programming. Wanted to build a career in the embedded system field but ended up joining in a power plant as an electrical maintenance engineer. Worked there for about 4 years then studied Master’s in IT.

Though I loved coding yet web development couldn’t fascinate me at all. I rather wanted to do system level coding with C++, Java or Rust.
But after completing my study, I landed a job as a DevOps engineer in a big software company with a decent salary.

There is not much to do in my position. Everyone knows everything and no one is willing to babysit me to teach me stuff. Nobody touches the pipeline and Kubernetes cluster. Two guys are responsible for AWS deployment and not willing to involve me there. I am only doing monitoring and alerting stuff. Sometimes do some administrative tasks on proxmox. But I like automating tasks with Python script but it’s very rare. At this point I am literally disappointed by DevOps position as it is not matching with what I dreamd of when learning DevOps. When I think about the dark side of my position, I feel like, I should start learning coding Java or Rust then get a job in a related field and quiet this job. Now I need your advice:

i. Should I use my all spare time to learn Rust or Java? If yes then how likely I am able to get a job as a 31 years old guy who started learning code?
ii. Should I stend some of my spare time to learn coding and rest to grow in my current position, so that in case of unsuccessful in coding, I can still continue DevOps?
iii. Should I stick to my current position and grow?

https://redd.it/zkikgj
@r_devops
What's the best and easiest to use GUI-based CI tool? No Jenkins suggestions, please.

I have used Azure Pipelines in my previous job, and I quite liked it. I'm not a fan of the YAML syntax and struggle to follow what is going on in those files, so a GUI friendly system liked Azure Pipelines is awesome. So, I'm looking for something more or less similar. I'm a Linux + opensource guy, that's why even though I like Azure Pipelines, I prefer to avoid Microsoft products. What other tool could meet my requirements?

https://redd.it/zkn8f0
@r_devops
NAT Gateway or IAM Security Policy for PCI compliance?

Guys, the PCI-DSS consultation team is asking for setting up NAT Gateway but I realized security rules are doing the almost same job for isolating resources as well as load balancer, can anyone suggest if IAM security rules are enough to comply with PCI requirements?

https://redd.it/zkomuw
@r_devops
For those familiar with Terraform CDK: tfcdk vpc module is empty? Yet other modules like "Instance" is not.

Greetings! I am trying to import an existing VPC in order to deploy an EC2 instance using Terraform CDK for Python.

https://constructs.dev/packages/@cdktf/provider-aws/v/9.0.15/api/DataAwsVpc?lang=python&submodule=vpc

​

\^ Using the above reference I want to

from cdktfcdktfprovideraws import vpc

so I can use function:

vpc.DataAwsVpc

However I get an error saying it cannot be found.

I'm using the following cdktf version:

&
#x200B;

>cdktf --version
0.14.3

It seems like most of the functions and classes are missing:

dir(cdktf
cdktfprovideraws.vpc)
'Vpc', 'VpcConfig', '__all__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_private'

Yes when I try another common module like the EC2 module its there:

dir(cdktfcdktfprovideraws.instance)
['Instance', 'InstanceCapacityReservationSpecification', 'InstanceCapacityReservationSpecificationCapacityReservationTarget', 'InstanceCapacityReservationSpecificationCapacityReservationTargetOutputReference', 'InstanceCapacityReservationSpecificationOutputReference', 'InstanceConfig', 'InstanceCreditSpecification', 'InstanceCreditSpecificationOutputReference', 'InstanceEbsBlockDevice', 'InstanceEbsBlockDeviceList', 'InstanceEbsBlockDeviceOutputReference', 'InstanceEnclaveOptions', 'InstanceEnclaveOptionsOutputReference', 'InstanceEphemeralBlockDevice', 'InstanceEphemeralBlockDeviceList', 'InstanceEphemeralBlockDeviceOutputReference', 'InstanceLaunchTemplate', 'InstanceLaunchTemplateOutputReference', 'InstanceMaintenanceOptions', 'InstanceMaintenanceOptionsOutputReference', 'InstanceMetadataOptions', 'InstanceMetadataOptionsOutputReference', 'InstanceNetworkInterface', 'InstanceNetworkInterfaceList', 'InstanceNetworkInterfaceOutputReference', 'InstancePrivateDnsNameOptions', 'InstancePrivateDnsNameOptionsOutputReference', 'InstanceRootBlockDevice', 'InstanceRootBlockDeviceOutputReference', 'InstanceTimeouts', 'InstanceTimeoutsOutputReference', 'all', 'cached', 'doc', 'file', 'loader', 'name', 'package', 'path', 'spec', '
private']

Can anyone tell me the issue? :)

https://redd.it/zkp2zo
@r_devops
Really struggling with building a docker container inside of gitlab-ci self-hosted docker-executor

Hi all,

I'm currently struggling with fixing the following pipeline job. I need to build a docker image inside of a self-hosted docker-executor. It's basically docker-inside-docker, but for some reason I just can't seem to get it working. I've gone through the documentation and everything and still can't seem to fix this error:

gitlab-ci.yml

stages:
- dev-docker-build

image: ruby:2.7

workflow:
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- when: always

job-dev-docker-build:
stage: dev-docker-build
resource_group: dev
environment:
name: DEV
script:
- apt update && apt upgrade -y
- apt install docker ca-certificates curl gnupg lsb-release git -y
- apt install docker-compose -y
- usermod -aG docker $(whoami)
- service docker start
- service docker status
- chown $(whoami):docker $(which docker)
- docker-compose build .
- docker-compose images

The error I get is:

< lots of installing nonsense >
$ usermod -aG docker $(whoami)
$ service docker start
Starting Docker: docker.
$ service docker status
Docker is running.
$ chown $(whoami):docker $(which docker)
$ docker-compose --version
docker-compose version 1.25.0, build unknown
$ docker-compose build .
Couldn't connect to Docker daemon at http+docker://localhost - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

How can I figure out what's wrong here? I've tried using the "already has docker installed" build, but same issue.

https://redd.it/zknv49
@r_devops
1
pgadmin with okta or paid equivalent

Just curious if anyone here has set up pgadmin with Okta authentication for databases running in RDS, bonus if you've done this with RDS not exposed to the internet. Basically, I'd like to keep my databases in private subnets in a VPC, run pgadmin such that authentication can be handled with Okta (or something similar). I'd like to also restrict the db access to read only.

I would also be open to paying for the above, for a service that makes all of it easy to manage.

https://redd.it/zkqyeh
@r_devops
Presigned URL for multiple files

Im basically creating a presigned URL so internal team as well as third party developers can have access to see the generated test results in a more visual HTML report. The problem im having is because i want to generate a presigned URL for HTML , it will not work properly since I would need to presign the other files needed to process the HTML. Is there a way to do this. Im using AWS S3 if that helps

https://redd.it/zkqysa
@r_devops
Github, Vault, JWT and OIDC setup

Hi
I'm trying to setup a Github Action to get a secret from Vault using JWT/OIDC. I understand the basic concepts of JWT and OIDC, but I'm not clear on how to implement it in my setup.
I have Github Enterprise running inside my network alongside an OS version of Vault.
I've created the JWT role, secret and policy on Vault, but when I try to test the setup it says OIDC login is not configured for the role.

curl --request POST --data @payload.json https://my-internal-vault-server:8200/v1/auth/jwt/oidc/authurl
{"errors":["OIDC login is not configured for this mount"]}

Contents of payload.json

{
"role": "github-jenkins",
"redirect
uri": "https://my-internal-vault-server:8200/ui/vault/auth/jwt/oidc/callback"
}

My real confusion is where should the OIDC authorization be taking place? My Github server, Vault or something else?
Or is it just a case of configuring the Vault role to specifically trust the JWT from the Github Action?

https://redd.it/zkt3sx
@r_devops