![Page 1: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/1.jpg)
GIVING POWER TO THE PEOPLEWith ANSIBLE @ General Mills
Ashley Nelson DevOps Engineer - General Mills
Mike Dahlgren Sr. Cloud Solution Architect - Red Hat
Ops | Devs | Net
![Page 2: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/2.jpg)
Ashley NELSONDevOps @ GEN MILLS
Mike DAHLGRENCLOUD SA @ RedHat
![Page 3: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/3.jpg)
Agenda!× History of Automation at General Mills
× Use Case #1: Operations
× Use Case #2: Networking
× Use Case #3: Application Management
× Operationalizing Ansible and Tower
![Page 4: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/4.jpg)
Gmi’s HISTORY
![Page 5: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/5.jpg)
Large File Copy Script
C
Server Provisioning Scripts
Ruby
VM Storage Script
Bash
SAN Zoning Script
Perl
Linux Group Mapping Script
Python
Server Config Deployment
Puppet
![Page 6: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/6.jpg)
Portability Supportability Integration
Locality Knowledge Sharing
Permissions
Room for Improvement
![Page 7: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/7.jpg)
Why Ansible?No SetupRPM Installation
Use existing SSH
Python-basedOn Linux by default
Familiar with language
IntuitiveYAML - markup language
Sequentially executed
IntegrationNo need to change environment
Works alongside Puppet
Glues automation together
EcosystemModules for a variety of use cases
Most of our vendors have modules
Ad-hoc TasksRuns automation just once
Don’t always need to worry about idempotence
![Page 8: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/8.jpg)
Ansible @ General Mills
Linux Server Automation
App Owners
Everyone
![Page 9: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/9.jpg)
Why Tower?Privileged AccessNon-server admins
can execute privileged
automation
No access to playbook or credentials
User InterfaceEasier for people
that are unfamiliar with Linux and the
command line
APIEnables end to end automation when
Ansible is not at the beginning of the
pipeline
![Page 10: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/10.jpg)
#1Use Case: Operations
Integrate Everything
![Page 11: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/11.jpg)
EVERYONE LOVES SERVER PATCHING
RIGHT?
![Page 12: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/12.jpg)
The Old Way× Whole team in a room together× Divide up servers among everyone× Manually run commands
× Stop services× Update packages× Reboot× Verify new kernel
![Page 13: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/13.jpg)
Glibc GHOST Vulnerability
Critical buffer overflow vulnerability that required immediate patching
![Page 14: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/14.jpg)
- assert: { that: "ansible_os_family == 'RedHat'" }
- name: update RHEL 7 channel command: /opt/gmi/tools/satellite/channels update {{ inventory_hostname }} delegate_to: job_server when: ansible_distribution_version == '7.1'
- name: upgrade all packages yum: name=* state=latest notify: - reboot machine
handlers: - name: reboot machine shell: sleep 2 && shutdown -r now "Ansible updates triggered" async: 1 poll: 0 ignore_errors: true
My First Playbook
![Page 15: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/15.jpg)
9 peopleIn a cramped room
89%Labor savings
1 personIn their pajamas
![Page 16: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/16.jpg)
WHere do servers come
from?
![Page 17: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/17.jpg)
![Page 18: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/18.jpg)
Create VMSetup
PXE Config
Kickstart VM
Generate Host
Keytab
Configure Puppet Client
Configure Puppet Server
Update Software + Reboot
Install Backup
Software
Ansible Roles
![Page 19: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/19.jpg)
vm_compute_map:
clustorr1:
vcenter: xmvcsq1
datacenter: QA1
cluster: Cluster1
network_type: standard
vm_network_map:
mission_critical:
template: rhel_tier1net
enterprise:
template: rhel_tier2net
kickstart_map:
rhel68_virtual:
kickstart_profile: rhel68-rhel-x86_64-server6
pxe_provider: satellite
Conf
ig Ma
pping
![Page 20: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/20.jpg)
- name: Set up PXE boot
hosts: new_hosts
gather_facts: false
serial: 1
vars_files:
- build_config_maps.yaml
tags:
- before_kickstart
vars:
kickstart_profile: "{{kickstart_map[kickstart].kickstart_profile}}"
vcenter: "{{vm_compute_map[vm_compute].vcenter}}"
vmware_datacenter: "{{vm_compute_map[vm_compute].datacenter}}"
roles:
- pxe_config
Play from Server Build Playbook
![Page 21: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/21.jpg)
- name: get HP ILO MAC address hpilo_facts: host: "{{inventory_hostname}}-ilo" login: admin password: "{{ lookup('ini', 'password section=ilo file=' + ilo_pw) }}" delegate_to: localhost connection: local register: ilo_facts
- name: set boot interface mac address fact vars: interface: "{{interface_map[hp_model]}}" set_fact: boot_mac_addr: "{{ilo_facts.ansible_facts[interface].macaddress | lower()}}" boot_mac_addr_dash: "{{ilo_facts.ansible_facts[interface].macaddress_dash}}"
PHysical Server Builds
![Page 22: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/22.jpg)
Results× Fully automated server provisioning× 30 minutes of manual work to 1 minute× Easier to automate for change
× vCenters× OS versions× Networks
![Page 23: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/23.jpg)
#2Use Case: NETWORKINGRouter ACL’s & The Cloud
![Page 24: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/24.jpg)
Content Gateway
Internal Traffic
internet
Office 365, Microsoft Exchange, and Skypedon’t appreciate going through the redirect
Process of manually creating whitelist was 10+ hours of work
![Page 25: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/25.jpg)
Playbook #1Detect whether Microsoft has updated their IP address list
Playbook #2Retrieve new list and generate config to deploy to all routers
The ANsible approach !
![Page 26: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/26.jpg)
- name: GET MICROSOFT PRODUCT IP ADDRESSES
shell: /mnt/data1/network/scripts/get_microsoft_product_ip_addrs.py
delegate_to: localhost
run_once: true
tags: always
- name: GENERATE INTERNET-WCCP ACCESS-LIST FILE
template: src=internet_wccp.j2 dest={{acl_dir}}/internet-wccp.txt
tags: generate_acl_file
...
- name: DEPLOY {{ inventory_hostname }} INTERNET-WCCP ACCESS-LIST
napalm_install_config:
provider: "{{ creds['conn'] }}"
dev_os: "{{ dev_os }}"
config_file: "{{acl_dir}}/internet-wccp.txt"
commit_changes: True
replace_config: False
diff_file: "/tmp/{{ inventory_hostname }}.diff"
tags: deploy_acl
![Page 27: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/27.jpg)
× Fully automated 10+ hours of tedious work
× Removed human error from equation
× Now updating router ACLs weekly
× For the end user the Cloud just works!
NETWORKING RESULTS
![Page 28: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/28.jpg)
#3Use Case: App Management
Empower the user!
![Page 29: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/29.jpg)
What’s between DEVOPS?
E-AppsOperations Developers
![Page 30: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/30.jpg)
The SITUATION . . .The E-Apps Team
11 People150+ Apps
● Responsible for Start/Stop/Deploy etc.
● Provided self-service for Win applications
○ SharePoint > Word Doc > watching
process > JSON > PowerShell >
● Tasked with owning Linux applications
● Most of team not automation experts
![Page 31: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/31.jpg)
The approach × Put everything in GIT× Create a template of a template
× Allows E-Apps team to quickly build services for new apps
× Used Tower Survey vs Word docs× Allow users to schedule actions
- Ansible Tower!
![Page 32: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/32.jpg)
THE JOB TEMPLATE TEMPLATE
(ALL Options)(ALL Servers)
THE JOB TEMPLATE
(NEW SURVEY)
(LIMITED Options)(LIMITED Servers)
THE ANSIBLE
JOB
ALL IN ONE ANSIBLE PLAYBOOK
THE USER
![Page 33: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/33.jpg)
The Job Template template!Has all the options
![Page 34: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/34.jpg)
Customize what you don’t want!
SET AS DEFAULT
AUTO POPULATED
NOT NEEDED
![Page 35: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/35.jpg)
The End User experience!Everything you need - nothing you don’t!
![Page 36: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/36.jpg)
- include_tasks: "Windows_services_stop.yml sname={{ item }}"
name: "Stopping {{stop_service_name}}"
with_items: "{{stop_service_name}}"
when: (win_command == "stop") or (win_command == "reboot")
- name: "Pause before stopping AppPool"
pause:
seconds: 60
when: (AppPool_state == "stopped") or (AppPool_state == "restarted")
- name: "stop an application pool"
win_iis_webapppool:
name: "{{AppPool}}"
state: "{{AppPool_state}}"
when: (AppPool_state == "stopped") or (AppPool_state == "restarted")
![Page 37: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/37.jpg)
● Global changes can be made in one place
● Still allows for isolation
● Easily create Job templates
● Even without Ansible knowledge!
Advantages
![Page 38: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/38.jpg)
Challenges#1 WinRM- Ansible wants to use HTTPS everywhere- No GPO for certificate deployment- Currently leveraging powershell script
#2 Plan the organization first! - Split out the middleware group- Required moving 100’s of templates- Give people access to multiple orgs
![Page 39: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/39.jpg)
Results× Simpler interface for end users
× 90% of team workload now automated by Ansible
× Single automation platform for Windows + Linux
× Changes the role of the E-app team
× Can now focus on big picture projects
![Page 40: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/40.jpg)
Operationalizing
![Page 41: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/41.jpg)
× Meet with teams to go over Ansible architecture
× Linux -> Ansible Core server× Windows -> Ansible Tower× Segment teams by organization in Tower
Introducing Teams to Ansible
![Page 42: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/42.jpg)
× Open repositories in TFS× Enforce best practices× Required vs. optional variables
documentation× Import roles with Ansible Galaxy CLI or git
submodules
Sharing Roles and Modules
![Page 43: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/43.jpg)
× Python dependencies
× Jump host with Windows
× Integration with TFS
× Job isolation
Challenges
![Page 44: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/44.jpg)
You’re not alone!
Red Hat has support for Tower, Networking, and Engine.
Join your local Ansible meetups and RHUG’s (Red Hat User Group).
![Page 45: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/45.jpg)
× Replace scripts with Ansible
× Eliminate manual infrastructure changes
× Setup Tower Isolated Nodes
× Isolated Python environments for teams
Future Plans
![Page 46: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/46.jpg)
CreditsSpecial thanks to everyone who made this possible:
× Application story by Richard Zuraff× Network story by Warren Welford× Presentation template by SlidesCarnival× Photographs from Vecteezy.com
![Page 47: With ANSIBLE @ General Mills GIVING POWER TO THE PEOPLE€¦ · Special thanks to everyone who made this possible: × Application story by Richard Zuraff × Network story by Warren](https://reader035.vdocuments.mx/reader035/viewer/2022071023/5fd77de5ae8a5d5cba6bee38/html5/thumbnails/47.jpg)
plus.google.com/+RedHat
linkedin.com/company/red-hat
youtube.com/user/RedHatVideos
facebook.com/redhatinc
twitter.com/RedHat
THANK YOU