Repository: chef/automate
Pull request #7917 (2023-05-25 01:33:14)

System user for deployment
### :nut_and_bolt: Description: What code changed, and why?
Added implementation to verify system user and group availability on the machine and their correct mapping in order to ensure successful deployment.

<!-- /!\ Please ensure that you are NOT disclosing any customer information without their consent /!\ -->

### :chains: Related Resources
https://chefio.atlassian.net/browse/CHEF-2202

### :+1: Definition of Done

### :athletic_shoe: How to Build and Test the Change

1. git checkout this branch
2. `rebuild components/automate-cli/ ` and upload it your origin
3. Install automate-cli on your instance
4. Run `chef-automate verify serve -d`
5. Hit `curl -s "http://localhost:7799/api/v1/checks/system-user" | jq`

Tested on:
Ubuntu
Amazon linux
Suse linux
Centos
Redhat

### :white_check_mark: Checklist

**All PRs** must tick these:

- [ ] I have read the [CONTRIBUTING document](https://github.com/chef/automate/blob/master/CONTRIBUTING.md).
- [ ] All commits signed-off for the [Developer Certification of Origin](https://github.com/chef/chef/blob/master/CONTRIBUTING.md#developer-certification-of-origin-dco).

With occasional exceptions, all PRs **from Progress employees** must tick these:

- [ ] Is the code clear? *(complicated code or lots of comments--subdivide and use well-named methods, meaningful variable names, etc.)*
- [ ] Consistency checked? *(user notifications, user prompts, visual patterns, code patterns, variable names)*
- [ ] Repeated code blocks eliminated? *(adapt and reuse existing components, blocks, functions, etc.)*
- [ ] Spelling, grammar, typos checked? *(at a minimum use `make spell` in any component directory)*
- [ ] Code well-formatted? *(indents, line breaks, etc. improve rather than hinder readability)*

All PRs **from Progress employees** should tick these if appropriate:

- [ ] Tests added/updated? (all new code needs new tests)
- [ ] Docs added/updated? (all customer-facing changes)

*Please add a note next to any checkbox above if you are NOT ticking it.*

### :camera: Screenshots, if applicable

**If User is already present:**
![image](https://github.com/chef/automate/assets/101619541/52768bcd-0ffb-4374-89f0-016e83eac7f2)

![image](https://github.com/chef/automate/assets/101619541/f50577ec-2d70-4f36-ae31-4a3b972a06bc)

**If user not present**
![image](https://github.com/chef/automate/assets/101619541/4e303cd7-af4c-400a-a77b-df0a912d14c8)

![image](https://github.com/chef/automate/assets/101619541/2d0c7fad-d6e4-4ce9-a40a-0d2234de0bd9)

**If primary group is not hab:**
![image](https://github.com/chef/automate/assets/101619541/6c9b2845-2f25-4bba-b268-d7387f5c2046)


![image](https://github.com/chef/automate/assets/101619541/b603e590-aab9-46f0-b175-86db7e649602)

**If user creation failed**
![image](https://github.com/chef/automate/assets/101619541/2e76e192-9fd4-4fec-9479-c048dc2d2c0c)

![image](https://github.com/chef/automate/assets/101619541/ead8438e-f14b-49d8-88a1-78e3395375ac)


Demo video:
https://progresssoftware-my.sharepoint.com/:v:/g/personal/sboorla_progress_com/EWKy59ctPX5Hgsl9hu2lFd4BlpUTHAJ4qBbcJGZmBcszqQ?e=6680sL

netlify[bot]: ### <span aria-hidden="true">👷</span> Deploy Preview for *chef-automate* processing.


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | c12ec3bae7f66f1a1eba75c7eeabbf7f78f1a87c |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/chef-automate/deploys/646ebadcb10fa700082f149a |
sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate failed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/failed-16px.png 'Quality Gate failed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Failed condition](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/FailedConditionIcon-16px.png 'Failed condition')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![73.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/60-16px.png '73.3%')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) 73.3% Coverage on New Code (is less than 80%)  

[See analysis details on SonarQube](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![87.9%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/60-16px.png '87.9%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [87.9% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![90.5%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '90.5%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [90.5% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![90.5%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '90.5%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [90.5% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![90.5%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '90.5%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [90.5% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![90.7%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '90.7%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [90.7% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


vivekshankar1: Also check why automate-lib is failing in verify pipeline
sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.5%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.5%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.5% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![91.3%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/90-16px.png '91.3%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [91.3% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![87.6%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/60-16px.png '87.6%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [87.6% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)


sonarqube-for-infrastructure-prod[bot]: **SonarQube Quality Gate**

[![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonar.progress.com/dashboard?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)

[![Bug](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/bug-16px.png 'Bug')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG) [0 Bugs](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=BUG)  
[![Vulnerability](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/vulnerability-16px.png 'Vulnerability')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/security_hotspot-16px.png 'Security Hotspot')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917) [0 Security Hotspots](https://sonar.progress.com/security_hotspots?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917)  
[![Code Smell](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/common/code_smell-16px.png 'Code Smell')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [![A](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/RatingBadge/A-16px.png 'A')](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonar.progress.com/project/issues?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&resolved=false&types=CODE_SMELL)

[![87.6%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/CoverageChart/60-16px.png '87.6%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list) [87.6% Coverage](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_coverage&view=list)  
[![0.0%](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v97/checks/Duplications/3-16px.png '0.0%')](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonar.progress.com/component_measures?id=chef_automate_AYeOVEbqJ4YHsO5MtKWC&pullRequest=7917&metric=new_duplicated_lines_density&view=list)



Patch:
diff --git a/.bldr.toml b/.bldr.toml
index 5f3d1df6a..29319dd3d 100644
--- a/.bldr.toml
+++ b/.bldr.toml
@@ -442,6 +442,7 @@ paths = [
   "lib/config/*",
   "lib/config_parser/*",
   "lib/db/*",
+  "lib/executil/*",
   "lib/grpc/*",
   "lib/httputils/*",
   "lib/io/*",
@@ -460,6 +461,7 @@ paths = [
   "lib/tls/*",
   "lib/tracing/*",
   "lib/user/*",
+  "lib/userutils/*",
   "lib/uuid4/*",
   "lib/verification/*",
   "lib/version/*"
diff --git a/VERSION b/VERSION
index 882e3bb51..da8326116 100644
--- a/VERSION
+++ b/VERSION
@@ -1,1 +1,1 @@
-4.7.26
\ No newline at end of file
+4.7.27
\ No newline at end of file
diff --git a/components/automate-cli/pkg/verifyserver/constants/systemuserconstant.go b/components/automate-cli/pkg/verifyserver/constants/systemuserconstant.go
new file mode 100644
index 000000000..328b60130
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/constants/systemuserconstant.go
@@ -0,0 +1,24 @@
+package constants
+
+const (
+	USER_NAME                                  = "hab"
+	GROUP_NAME                                 = "hab"
+	USER_ADD_CMD                               = "useradd"
+	USER_DEL_CMD                               = "userdel"
+	GROUP_DEL_CMD                              = "groupdel"
+	SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE   = "User creation/validation check"
+	SYSTEM_USER_HAB_SUCCESS_MSG                = "User is created or found successfully"
+	SYSTEM_GROUP_HAB_VALIDATION_SUCCESS_TITLE  = "Group creation/validation check"
+	SYSTEM_GROUP_HAB_SUCCESS_MSG               = "Group is created or found successfully"
+	SYSTEM_USERANDGROUP_MAPPING_SUCCESS_TITLE  = "User and group mapping successfully"
+	SYSTEM_USERANDGROUP_MAPPING_SUCCESS_MSG    = "User and group mapping successful"
+	SYSTEM_USER_HAB_VALIDATION_FAILURE_TITLE   = "User validation failure"
+	SYSTEM_USER_HAB_ERROR_MSG                  = "Hab user creation failed"
+	SYSTEM_USER_HAB_RESOLUTION_MSG             = "Check the user name"
+	SYSTEM_GROUP_HAB_VALIDATION_FAILURE_TITLE  = "Group validation failure"
+	SYSTEM_GROUP_HAB_ERROR_MSG                 = "Hab group not found"
+	SYSTEM_GROUP_HAB_RESOLUTION_MSG            = "Check the group name"
+	SYSTEM_USERANDGROUP_MAPPING_FAILURE_TITLE  = "User and group mapping failed"
+	SYSTEM_PRIMARYGROUP_MATCH_ERROR_MSG        = "Primary group mapping for user hab is not hab group"
+	SYSTEM_USERANDGROUP_MAPPING_RESOLUTION_MSG = "Verify the mapping for the user and the group"
+)
diff --git a/components/automate-cli/pkg/verifyserver/models/systemuser.go b/components/automate-cli/pkg/verifyserver/models/systemuser.go
new file mode 100644
index 000000000..9b0178f33
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/models/systemuser.go
@@ -0,0 +1,6 @@
+package models
+
+type SystemUserResponse struct {
+	Passed bool     `json:"passed"`
+	Checks []*Checks `json:"checks"`
+}
diff --git a/components/automate-cli/pkg/verifyserver/server/api/v1/handler.go b/components/automate-cli/pkg/verifyserver/server/api/v1/handler.go
index ec78a83bd..da5cac20e 100644
--- a/components/automate-cli/pkg/verifyserver/server/api/v1/handler.go
+++ b/components/automate-cli/pkg/verifyserver/server/api/v1/handler.go
@@ -12,6 +12,7 @@ import (
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/startmockserverservice"
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/statusservice"
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/stopmockserverservice"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/systemuserservice"
 	"github.com/chef/automate/lib/logger"
 )
 
@@ -28,6 +29,7 @@ type Handler struct {
 	OSBackupService              opensearchbackupservice.IOSS3BackupService
 	PortReachableService         portreachableservice.IPortReachableService
 	ExternalPostgresqlService    externalpostgresqlservice.ExternalPostgresqlService
+	SystemUserService            systemuserservice.SystemUserService
 }
 
 func NewHandler(logger logger.Logger) *Handler {
@@ -73,6 +75,11 @@ func (h *Handler) AddStopMockServerService(sm stopmockserverservice.IStopMockSer
 	return h
 }
 
+func (h *Handler) AddSystemUserService(su systemuserservice.SystemUserService) *Handler {
+	h.SystemUserService = su
+	return h
+}
+
 func (h *Handler) AddOSS3BackupService(ss opensearchbackupservice.IOSS3BackupService) *Handler {
 	h.OSBackupService = ss
 	return h
diff --git a/components/automate-cli/pkg/verifyserver/server/api/v1/systemuser.go b/components/automate-cli/pkg/verifyserver/server/api/v1/systemuser.go
new file mode 100644
index 000000000..43cfc5c99
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/server/api/v1/systemuser.go
@@ -0,0 +1,11 @@
+package v1
+
+import (
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/response"
+	"github.com/gofiber/fiber/v2"
+)
+
+func (h *Handler) CheckSystemUser(c *fiber.Ctx) error {
+	checks := h.SystemUserService.GetSystemUserServiceDetails()
+	return c.JSON(response.BuildSuccessResponse(checks))
+}
diff --git a/components/automate-cli/pkg/verifyserver/server/routes.go b/components/automate-cli/pkg/verifyserver/server/routes.go
index eb723067a..0e022a5ed 100644
--- a/components/automate-cli/pkg/verifyserver/server/routes.go
+++ b/components/automate-cli/pkg/verifyserver/server/routes.go
@@ -20,12 +20,14 @@ func (vs *VerifyServer) SetupRoutes() {
 	apiChecksGroup.Post("/port-reachable", vs.Handler.PortReachable)
 	apiChecksGroup.Post("/external-postgresql", vs.Handler.CheckExternalPostgresql)
 	
+	apiChecksGroup.Get("/system-user", vs.Handler.CheckSystemUser)
+
 	apiStartGroup := apiV1Group.Group("/start")
 	apiStartGroup.Post("/mock-server", vs.Handler.StartMockServer)
 	apiChecksGroup.Post("/aws-opensearch-s3-bucket-access", vs.Handler.CheckOSBackupS3)
 
 	apiStopGroup := apiV1Group.Group("/stop")
 	apiStopGroup.Post("/mock-server", vs.Handler.StopMockServer)
-
+	
 	fiberutils.LogResgisteredRoutes(vs.App.Stack(), vs.Log)
 }
diff --git a/components/automate-cli/pkg/verifyserver/server/server.go b/components/automate-cli/pkg/verifyserver/server/server.go
index 91387a468..65320a3c4 100644
--- a/components/automate-cli/pkg/verifyserver/server/server.go
+++ b/components/automate-cli/pkg/verifyserver/server/server.go
@@ -28,9 +28,12 @@ import (
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/stopmockserverservice"
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/utils/awsutils"
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/utils/db"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/systemuserservice"
 	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/utils/fiberutils"
 	"github.com/chef/automate/lib/io/fileutils"
+	"github.com/chef/automate/lib/executil"
 	"github.com/chef/automate/lib/logger"
+	"github.com/chef/automate/lib/userutils"
 	"github.com/gofiber/fiber/v2"
 	"github.com/gofiber/fiber/v2/middleware/cors"
 	fiberlogger "github.com/gofiber/fiber/v2/middleware/logger"
@@ -100,7 +103,8 @@ func NewVerifyServer(port string, debug bool) (*VerifyServer, error) {
 		AddStopMockServerService(stopmockserverservice.NewStopMockServerService(l)).
 		AddOSS3BackupService(opensearchbackupservice.NewOSS3BackupService(l)).
 		AddPortReachableService(portreachableservice.NewPortReachableService(l, constants.TIMEOUT)).
-		AddExternalPostgresqlService(externalpostgresqlservice.NewExternalPostgresqlService(db.NewDBImpl(),fileutils.NewFileSystemUtils(),l))
+		AddExternalPostgresqlService(externalpostgresqlservice.NewExternalPostgresqlService(db.NewDBImpl(),fileutils.NewFileSystemUtils(),l)).
+		AddSystemUserService(systemuserservice.NewSystemUserService(l, executil.NewExecCmdServiceImp(), userutils.NewUserUtilImp()))
 	vs := &VerifyServer{
 		Port:    port,
 		Log:     l,
diff --git a/components/automate-cli/pkg/verifyserver/services/systemuserservice/mocksystemuserservice.go b/components/automate-cli/pkg/verifyserver/services/systemuserservice/mocksystemuserservice.go
new file mode 100644
index 000000000..338e2786c
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/services/systemuserservice/mocksystemuserservice.go
@@ -0,0 +1,12 @@
+package systemuserservice
+
+import "github.com/chef/automate/components/automate-cli/pkg/verifyserver/models"
+
+type MockSystemUserService struct {
+	GetSystemUserServiceDetailsFunc func() *models.SystemUserResponse
+}
+
+// GetSystemUserServiceDetails implements SystemUser
+func (msu *MockSystemUserService) GetSystemUserServiceDetails() *models.SystemUserResponse {
+	return msu.GetSystemUserServiceDetailsFunc()
+}
diff --git a/components/automate-cli/pkg/verifyserver/services/systemuserservice/systemuserservice.go b/components/automate-cli/pkg/verifyserver/services/systemuserservice/systemuserservice.go
new file mode 100644
index 000000000..e6693f3ad
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/services/systemuserservice/systemuserservice.go
@@ -0,0 +1,173 @@
+package systemuserservice
+
+import (
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/constants"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/models"
+	"github.com/chef/automate/lib/executil"
+	"github.com/chef/automate/lib/logger"
+	"github.com/chef/automate/lib/userutils"
+)
+
+type SystemUserService interface {
+	GetSystemUserServiceDetails() *models.SystemUserResponse
+}
+
+type SystemUserServiceImp struct {
+	exec executil.ExecCmdService
+	user userutils.UserUtil
+	Log  logger.Logger
+}
+
+func NewSystemUserService(log logger.Logger, exec executil.ExecCmdService, user userutils.UserUtil) *SystemUserServiceImp {
+	return &SystemUserServiceImp {
+		exec: exec,
+		user: user,
+		Log:  log,
+	}
+}
+
+func (su *SystemUserServiceImp) GetSystemUserServiceDetails() *models.SystemUserResponse {
+	serviceResponse := &models.SystemUserResponse{}
+	serviceResponse.Passed = true
+	serviceResponseArray := []*models.Checks{}
+
+	habUserResponse, isHabUserCreated := su.ValidateOrCreateHabUser()
+	if !habUserResponse.Passed {
+		serviceResponse.Passed = false
+	}
+
+	habGroupResponse := su.ValidateHabGroup()
+	if !habGroupResponse.Passed {
+		serviceResponse.Passed = false
+	}
+
+	habUserAndGroupMapResponse := su.ValidateHabUserAndGroupMapping()
+	if !habUserAndGroupMapResponse.Passed {
+		serviceResponse.Passed = false
+	}
+
+	if isHabUserCreated {
+		defer func() {
+			_, _ = su.exec.Command(constants.USER_DEL_CMD, []string{constants.USER_NAME})
+
+			if su.isHabGroupPresent(constants.GROUP_NAME) {
+				_, _ = su.exec.Command(constants.GROUP_DEL_CMD, []string{constants.GROUP_NAME})
+				su.Log.Debug("Group hab deleted")
+			}
+		}()
+
+	}
+
+	serviceResponseArray = append(serviceResponseArray, habUserResponse, habGroupResponse, habUserAndGroupMapResponse)
+
+	serviceResponse.Checks = serviceResponseArray
+	return serviceResponse
+
+}
+
+func (su *SystemUserServiceImp) ValidateOrCreateHabUser() (*models.Checks, bool) {
+	isHabUserPresent := su.isHabUserPresent(constants.USER_NAME)
+
+	if !isHabUserPresent {
+		_, err := su.exec.Command(constants.USER_ADD_CMD, []string{"-U", constants.USER_NAME})
+		if err != nil {
+			su.Log.Error("Failed to create user 'hab':", err)
+			return failureResponse(constants.SYSTEM_USER_HAB_VALIDATION_FAILURE_TITLE, constants.SYSTEM_USER_HAB_ERROR_MSG, constants.SYSTEM_USER_HAB_RESOLUTION_MSG), false
+		}
+		su.Log.Debug("Created 'hab' user and group ")
+		return successResponse(constants.SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE, constants.SYSTEM_USER_HAB_SUCCESS_MSG), true
+	}
+	su.Log.Debug("User 'hab' found successfully")
+	return successResponse(constants.SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE, constants.SYSTEM_USER_HAB_SUCCESS_MSG), false
+}
+
+func (su *SystemUserServiceImp) ValidateHabGroup() *models.Checks {
+	isHabGroupPresent := su.isHabGroupPresent(constants.GROUP_NAME)
+
+	if !isHabGroupPresent {
+		su.Log.Error("Group 'hab' doesn't exists")
+		return failureResponse(constants.SYSTEM_GROUP_HAB_VALIDATION_FAILURE_TITLE, constants.SYSTEM_GROUP_HAB_ERROR_MSG, constants.SYSTEM_GROUP_HAB_RESOLUTION_MSG)
+	}
+	su.Log.Debug("Group 'hab' found successfully")
+	return successResponse(constants.SYSTEM_GROUP_HAB_VALIDATION_SUCCESS_TITLE, constants.SYSTEM_GROUP_HAB_SUCCESS_MSG)
+}
+
+func (su *SystemUserServiceImp) ValidateHabUserAndGroupMapping() *models.Checks {
+	// Check if "hab" user's primary group is "hab" group
+	userPrimaryGroup := su.checkUserPrimaryGroup(constants.USER_NAME, constants.GROUP_NAME)
+
+	if !userPrimaryGroup {
+		su.Log.Error("Validation failed: Primary group mapping for user 'hab' is not 'hab' group")
+		return failureResponse(constants.SYSTEM_USERANDGROUP_MAPPING_FAILURE_TITLE, constants.SYSTEM_PRIMARYGROUP_MATCH_ERROR_MSG, constants.SYSTEM_USERANDGROUP_MAPPING_RESOLUTION_MSG)
+	}
+	su.Log.Debug("Validation passed: Primary group mapping for user 'hab' is 'hab' group")
+
+	return successResponse(constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_TITLE, constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_MSG)
+}
+
+// Check if "hab" user exists
+func (su *SystemUserServiceImp) isHabUserPresent(username string) bool {
+	_, err := su.user.Lookup(username)
+	if err != nil {
+		su.Log.Error("Hab user not present: ", err)
+		return false
+	}
+	su.Log.Debug("Hab user exists")
+	return true
+}
+
+// Check if "hab" group exists
+func (su *SystemUserServiceImp) isHabGroupPresent(groupname string) bool {
+	_, err := su.user.LookupGroup(groupname)
+	if err != nil {
+		su.Log.Error("Hab group not present: ", err)
+		return false
+	}
+	su.Log.Debug("Hab group exists")
+	return true
+}
+
+// Check for user's primary group
+func (su *SystemUserServiceImp) checkUserPrimaryGroup(username, groupname string) bool {
+	sysUser, err := su.user.Lookup(username)
+	if err != nil {
+		su.Log.Error("User not found: ", err)
+		return false
+	}
+
+	// Get the user's primary group
+	group, err := su.user.LookupGroupId(sysUser.Gid)
+	if err != nil {
+		su.Log.Error("Group not found by Gid '"+sysUser.Gid+"': ", err)
+		return false
+	}
+
+	if group.Name != groupname {
+		su.Log.Debug("User's primary group is not hab")
+		return false
+	}
+	su.Log.Debug("User's primary group is hab with gid '"+ sysUser.Gid+"'")
+	return true
+}
+
+func successResponse(title string, successMsg string) *models.Checks {
+	checkResponse := &models.Checks{
+		Title:         title,
+		Passed:        true,
+		SuccessMsg:    successMsg,
+		ErrorMsg:      "",
+		ResolutionMsg: "",
+	}
+	return checkResponse
+}
+
+func failureResponse(title string, errorMsg string, resolutionMsg string) *models.Checks {
+	checkResponse := &models.Checks{
+		Title:         title,
+		Passed:        false,
+		SuccessMsg:    "",
+		ErrorMsg:      errorMsg,
+		ResolutionMsg: resolutionMsg,
+	}
+	return checkResponse
+}
diff --git a/components/automate-cli/pkg/verifyserver/utils/fiberutils/os.go b/components/automate-cli/pkg/verifyserver/utils/fiberutils/os.go
index 10c94aee1..0588e828d 100644
--- a/components/automate-cli/pkg/verifyserver/utils/fiberutils/os.go
+++ b/components/automate-cli/pkg/verifyserver/utils/fiberutils/os.go
@@ -1,6 +1,8 @@
 package fiberutils
 
-import "os/exec"
+import (
+	"os/exec"
+)
 
 func ExecuteShellCommand(cmd string) ([]byte, error) {
 	return exec.Command("/bin/sh", "-c", cmd).CombinedOutput()
diff --git a/lib/executil/exec.go b/lib/executil/exec.go
new file mode 100644
index 000000000..9ce66c21f
--- /dev/null
+++ b/lib/executil/exec.go
@@ -0,0 +1,17 @@
+package executil
+
+import "os/exec"
+
+type ExecCmdService interface {
+	Command(name string, args []string) ([]byte, error)
+}
+
+type ExecCmdServiceImp struct{}
+
+func NewExecCmdServiceImp() ExecCmdService {
+	return &ExecCmdServiceImp{}
+}
+
+func (s *ExecCmdServiceImp) Command(name string, args []string) ([]byte, error) {
+	return exec.Command(name, args...).Output()
+}
\ No newline at end of file
diff --git a/lib/executil/mockexec.go b/lib/executil/mockexec.go
new file mode 100644
index 000000000..93caf0c0c
--- /dev/null
+++ b/lib/executil/mockexec.go
@@ -0,0 +1,9 @@
+package executil
+
+type ExecCmdServiceMock struct {
+	CommandFunc func(name string, args []string) ([]byte, error)
+}
+
+func (s *ExecCmdServiceMock) Command(name string, args []string) ([]byte, error) {
+	return s.CommandFunc(name, args)
+}
\ No newline at end of file
diff --git a/lib/userutils/mockuser.go b/lib/userutils/mockuser.go
new file mode 100644
index 000000000..93819c8c7
--- /dev/null
+++ b/lib/userutils/mockuser.go
@@ -0,0 +1,21 @@
+package userutils
+
+import "os/user"
+
+type UserUtilMock struct {
+	LookupFunc        func(name string) (*user.User, error)
+	LookupGroupFunc   func(name string) (*user.Group, error)
+	LookupGroupIdFunc func(name string) (*user.Group, error)
+}
+
+func (mock *UserUtilMock) Lookup(name string) (*user.User, error) {
+	return mock.LookupFunc(name)
+}
+
+func (mock *UserUtilMock) LookupGroup(name string) (*user.Group, error) {
+	return mock.LookupGroupFunc(name)
+}
+
+func (mock *UserUtilMock) LookupGroupId(name string) (*user.Group, error) {
+	return mock.LookupGroupIdFunc(name)
+}
diff --git a/lib/userutils/user.go b/lib/userutils/user.go
new file mode 100644
index 000000000..74219ce12
--- /dev/null
+++ b/lib/userutils/user.go
@@ -0,0 +1,27 @@
+package userutils
+
+import "os/user"
+
+type UserUtil interface {
+	Lookup(name string) (*user.User, error)
+	LookupGroup(name string) (*user.Group, error)
+	LookupGroupId(name string) (*user.Group, error)
+}
+
+type UserUtilImp struct{}
+
+func NewUserUtilImp() UserUtil {
+	return &UserUtilImp{}
+}
+
+func (s *UserUtilImp) Lookup(name string) (*user.User, error) {
+	return user.Lookup(name)
+}
+
+func (s *UserUtilImp) LookupGroup(name string) (*user.Group, error) {
+	return user.LookupGroup(name)
+}
+
+func (s *UserUtilImp) LookupGroupId(name string) (*user.Group, error) {
+	return user.LookupGroupId(name)
+}


Test patch:
diff --git a/components/automate-cli/pkg/verifyserver/server/api/v1/systemuser_test.go b/components/automate-cli/pkg/verifyserver/server/api/v1/systemuser_test.go
new file mode 100644
index 000000000..2132b10c8
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/server/api/v1/systemuser_test.go
@@ -0,0 +1,104 @@
+package v1_test
+
+import (
+	"io/ioutil"
+	"net/http/httptest"
+	"testing"
+
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/constants"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/models"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/server"
+	v1 "github.com/chef/automate/components/automate-cli/pkg/verifyserver/server/api/v1"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/systemuserservice"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/utils/fiberutils"
+	"github.com/chef/automate/lib/logger"
+	"github.com/gofiber/fiber/v2"
+	"github.com/stretchr/testify/assert"
+)
+
+func SetupMockSystemUserHandlers(su systemuserservice.SystemUserService) (*fiber.App, error) {
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		return nil, err
+	}
+	fconf := fiber.Config{
+		ServerHeader: server.SERVICE,
+		ErrorHandler: fiberutils.CustomErrorHandler,
+	}
+	app := fiber.New(fconf)
+	handler := v1.NewHandler(log).
+		AddSystemUserService(su)
+	vs := &server.VerifyServer{
+		Port:    server.DEFAULT_PORT,
+		Log:     log,
+		App:     app,
+		Handler: handler,
+	}
+	vs.SetupRoutes()
+	return vs.App, nil
+}
+
+func SetupMockSystemUserService(response models.SystemUserResponse) systemuserservice.SystemUserService {
+	return &systemuserservice.MockSystemUserService{
+		GetSystemUserServiceDetailsFunc: func() *models.SystemUserResponse {
+			return &response
+		},
+	}
+}
+
+func TestSystemUserService(t *testing.T) {
+	tests := []struct {
+		description  string
+		expectedCode int
+		responseBody models.SystemUserResponse
+		expectedBody string
+	}{
+		{
+			description:  "200:User and Group verified and mapping validated",
+			expectedCode: 200,
+			responseBody: models.SystemUserResponse{
+				Passed: true,
+				Checks: []*models.Checks{
+					{
+						Title:         constants.SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE,
+						Passed:        true,
+						SuccessMsg:    constants.SYSTEM_USER_HAB_SUCCESS_MSG,
+						ErrorMsg:      "",
+						ResolutionMsg: "",
+					},
+					{
+						Title:         constants.SYSTEM_GROUP_HAB_VALIDATION_SUCCESS_TITLE,
+						Passed:        true,
+						SuccessMsg:    constants.SYSTEM_GROUP_HAB_SUCCESS_MSG,
+						ErrorMsg:      "",
+						ResolutionMsg: "",
+					},
+					{
+						Title:         constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_TITLE,
+						Passed:        true,
+						SuccessMsg:    constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_MSG,
+						ErrorMsg:      "",
+						ResolutionMsg: "",
+					},
+				},
+			},
+			expectedBody: "{\"status\":\"SUCCESS\",\"result\":{\"passed\":true,\"checks\":[{\"title\":\"User creation/validation check\",\"passed\":true,\"success_msg\":\"User is created or found successfully\",\"error_msg\":\"\",\"resolution_msg\":\"\"},{\"title\":\"Group creation/validation check\",\"passed\":true,\"success_msg\":\"Group is created or found successfully\",\"error_msg\":\"\",\"resolution_msg\":\"\"},{\"title\":\"User and group mapping successfully\",\"passed\":true,\"success_msg\":\"User and group mapping successful\",\"error_msg\":\"\",\"resolution_msg\":\"\"}]}}",
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.description, func(t *testing.T) {
+			systemuserCheckEndpoint := "/api/v1/checks/system-user"
+			app, err := SetupMockSystemUserHandlers(SetupMockSystemUserService(test.responseBody))
+			assert.NoError(t, err)
+			req := httptest.NewRequest("GET", systemuserCheckEndpoint, nil)
+			req.Header.Add("Content-Type", "application/json")
+			res, err := app.Test(req, -1)
+			assert.NoError(t, err)
+			body, err := ioutil.ReadAll(res.Body)
+			assert.NoError(t, err, test.description)
+			assert.Contains(t, string(body), test.expectedBody)
+			assert.Equal(t, res.StatusCode, test.expectedCode)
+		})
+	}
+}
diff --git a/components/automate-cli/pkg/verifyserver/services/systemuserservice/systemuserservice_test.go b/components/automate-cli/pkg/verifyserver/services/systemuserservice/systemuserservice_test.go
new file mode 100644
index 000000000..827a40a86
--- /dev/null
+++ b/components/automate-cli/pkg/verifyserver/services/systemuserservice/systemuserservice_test.go
@@ -0,0 +1,451 @@
+package systemuserservice
+
+import (
+	"errors"
+	"os/user"
+	"testing"
+
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/constants"
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/models"
+	"github.com/chef/automate/lib/userutils"
+	"github.com/chef/automate/lib/executil"
+	"github.com/chef/automate/lib/logger"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestNewSystemUserService(t *testing.T) {
+	log, err := logger.NewLogger("text", "debug")
+	assert.NoError(t, err)
+
+	s := NewSystemUserService(log, executil.NewExecCmdServiceImp(), userutils.NewUserUtilImp())
+	assert.NotEqual(t, s, nil)
+}
+
+func TestValidateHabUserSuccess(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{}, nil
+		},
+	}
+
+	mockExec := &executil.ExecCmdServiceMock{
+		CommandFunc: func(name string, args []string) ([]byte, error) {
+			return []byte{}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+		exec: mockExec,
+	}
+	service, _ := s.ValidateOrCreateHabUser()
+	assert.Equal(t, service.Passed, true)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE,
+		Passed:        true,
+		SuccessMsg:    constants.SYSTEM_USER_HAB_SUCCESS_MSG,
+		ErrorMsg:      "",
+		ResolutionMsg: "",
+	}, service)
+}
+
+func TestValidateHabUserFailure(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{}, errors.New("user not found")
+		},
+	}
+
+	mockExec := &executil.ExecCmdServiceMock{
+		CommandFunc: func(name string, args []string) ([]byte, error) {
+			return []byte{}, errors.New("exit status 1")
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+		exec: mockExec,
+	}
+	service, _ := s.ValidateOrCreateHabUser()
+	assert.Equal(t, service.Passed, false)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USER_HAB_VALIDATION_FAILURE_TITLE,
+		Passed:        false,
+		SuccessMsg:    "",
+		ErrorMsg:      constants.SYSTEM_USER_HAB_ERROR_MSG ,
+		ResolutionMsg: constants.SYSTEM_USER_HAB_RESOLUTION_MSG,
+	}, service)
+}
+
+func TestValidateHabUserCreatedSuccess(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{}, errors.New("user not found")
+		},
+	}
+
+	mockExec := &executil.ExecCmdServiceMock{
+		CommandFunc: func(name string, args []string) ([]byte, error) {
+			return []byte{}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+		exec: mockExec,
+	}
+	service, _ := s.ValidateOrCreateHabUser()
+	assert.Equal(t, service.Passed, true)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE,
+		Passed:        true,
+		SuccessMsg:    constants.SYSTEM_USER_HAB_SUCCESS_MSG,
+		ErrorMsg:      "",
+		ResolutionMsg: "",
+	}, service)
+}
+
+func TestValidateHabGroup(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupGroupFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+	}
+	service := s.ValidateHabGroup()
+	assert.Equal(t, service.Passed, true)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_GROUP_HAB_VALIDATION_SUCCESS_TITLE,
+		Passed:        true,
+		SuccessMsg:    constants.SYSTEM_GROUP_HAB_SUCCESS_MSG,
+		ErrorMsg:      "",
+		ResolutionMsg: "",
+	}, service)
+}
+
+func TestValidateHabGroupFailed(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupGroupFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, errors.New("Group 'hab' doesn't exists")
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+	}
+	service := s.ValidateHabGroup()
+	assert.Equal(t, service.Passed, false)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_GROUP_HAB_VALIDATION_FAILURE_TITLE,
+		Passed:        false,
+		SuccessMsg:    "",
+		ErrorMsg:      constants.SYSTEM_GROUP_HAB_ERROR_MSG,
+		ResolutionMsg: constants.SYSTEM_GROUP_HAB_RESOLUTION_MSG,
+	}, service)
+}
+
+func TestValidateHabUserAndGroupMappingFailed(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{
+				Uid:      "1001",
+				Gid:      "1001",
+				Username: "hab",
+				Name:     "hab",
+				HomeDir:  "",
+			}, nil
+		},
+		LookupGroupIdFunc: func(name string) (*user.Group, error) {
+			return &user.Group{
+				Gid:  "1002",
+				Name: "test",
+			}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+	}
+	service := s.ValidateHabUserAndGroupMapping()
+	assert.Equal(t, service.Passed, false)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USERANDGROUP_MAPPING_FAILURE_TITLE,
+		Passed:        false,
+		SuccessMsg:    "",
+		ErrorMsg:      constants.SYSTEM_PRIMARYGROUP_MATCH_ERROR_MSG,
+		ResolutionMsg: constants.SYSTEM_USERANDGROUP_MAPPING_RESOLUTION_MSG,
+	}, service)
+}
+
+func TestValidateHabUserAndGroupMappingSuccess(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{
+				Uid:      "1001",
+				Gid:      "1001",
+				Username: "hab",
+				Name:     "hab",
+				HomeDir:  "",
+			}, nil
+		},
+		LookupGroupIdFunc: func(name string) (*user.Group, error) {
+			return &user.Group{
+				Gid:  "1001",
+				Name: "hab",
+			}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+	}
+	service := s.ValidateHabUserAndGroupMapping()
+	assert.Equal(t, service.Passed, true)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_TITLE,
+		Passed:        true,
+		SuccessMsg:    constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_MSG,
+		ErrorMsg:      "",
+		ResolutionMsg: "",
+	}, service)
+}
+
+func TestValidateHabUserAndGroupMappingFailedForLookupUsernameError(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{}, errors.New("User not found")
+		},
+		LookupGroupIdFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+	}
+	service := s.ValidateHabUserAndGroupMapping()
+	assert.Equal(t, service.Passed, false)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USERANDGROUP_MAPPING_FAILURE_TITLE,
+		Passed:        false,
+		SuccessMsg:    "",
+		ErrorMsg:      constants.SYSTEM_PRIMARYGROUP_MATCH_ERROR_MSG,
+		ResolutionMsg: constants.SYSTEM_USERANDGROUP_MAPPING_RESOLUTION_MSG,
+	}, service)
+}
+
+func TestValidateHabUserAndGroupMappingFailedForLookUpGroupId(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{
+				Uid:      "1001",
+				Gid:      "1001",
+				Username: "hab",
+				Name:     "hab",
+				HomeDir:  "",
+			}, nil
+		},
+		LookupGroupIdFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, errors.New("Group not found with Gid")
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		user: mockUser,
+	}
+	service := s.ValidateHabUserAndGroupMapping()
+	assert.Equal(t, service.Passed, false)
+	assert.Equal(t, &models.Checks{
+		Title:         constants.SYSTEM_USERANDGROUP_MAPPING_FAILURE_TITLE,
+		Passed:        false,
+		SuccessMsg:    "",
+		ErrorMsg:      constants.SYSTEM_PRIMARYGROUP_MATCH_ERROR_MSG,
+		ResolutionMsg: constants.SYSTEM_USERANDGROUP_MAPPING_RESOLUTION_MSG,
+	}, service)
+}
+
+func TestGetSystemUserServiceDetailsSuccess(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{
+				Uid:      "1001",
+				Gid:      "1001",
+				Username: "hab",
+				Name:     "hab",
+				HomeDir:  "",
+			}, nil
+		},
+		LookupGroupFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, nil
+		},
+		LookupGroupIdFunc: func(name string) (*user.Group, error) {
+			return &user.Group{
+				Gid:  "1001",
+				Name: "hab",
+			}, nil
+		},
+	}
+	mockExec := &executil.ExecCmdServiceMock{
+		CommandFunc: func(name string, args []string) ([]byte, error) {
+			return []byte{}, nil
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		exec: mockExec,
+		user: mockUser,
+	}
+
+	tests := []struct {
+		description  string
+		expectedBody *models.SystemUserResponse
+	}{
+		{
+			description: "User and group not validated and mapping not successful",
+			expectedBody: &models.SystemUserResponse{
+				Passed: true,
+				Checks: []*models.Checks{
+					{
+						Title:         constants.SYSTEM_USER_HAB_VALIDATION_SUCCESS_TITLE,
+						Passed:        true,
+						SuccessMsg:    constants.SYSTEM_USER_HAB_SUCCESS_MSG,
+						ErrorMsg:      "",
+						ResolutionMsg: "",
+					},
+					{
+						Title:         constants.SYSTEM_GROUP_HAB_VALIDATION_SUCCESS_TITLE,
+						Passed:        true,
+						SuccessMsg:    constants.SYSTEM_GROUP_HAB_SUCCESS_MSG,
+						ErrorMsg:      "",
+						ResolutionMsg: "",
+					},
+					{
+						Title:         constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_TITLE,
+						Passed:        true,
+						SuccessMsg:    constants.SYSTEM_USERANDGROUP_MAPPING_SUCCESS_MSG,
+						ErrorMsg:      "",
+						ResolutionMsg: "",
+					},
+				},
+			},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.description, func(t *testing.T) {
+			got := s.GetSystemUserServiceDetails()
+			assert.Equal(t, tt.expectedBody, got)
+		})
+	}
+}
+
+func TestGetSystemUserServiceDetailsFailed(t *testing.T) {
+	mockUser := &userutils.UserUtilMock{
+		LookupFunc: func(name string) (*user.User, error) {
+			return &user.User{}, errors.New("user not found")
+		},
+		LookupGroupFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, errors.New("Group 'hab' doesn't exists")
+		},
+		LookupGroupIdFunc: func(name string) (*user.Group, error) {
+			return &user.Group{}, errors.New("Primary group mapping failed")
+		},
+	}
+	mockExec := &executil.ExecCmdServiceMock{
+		CommandFunc: func(name string, args []string) ([]byte, error) {
+			return []byte{}, errors.New("exit status 1")
+		},
+	}
+	log, err := logger.NewLogger("text", "debug")
+	if err != nil {
+		assert.Error(t, err)
+	}
+	s := &SystemUserServiceImp{
+		Log:  log,
+		exec: mockExec,
+		user: mockUser,
+	}
+
+	tests := []struct {
+		description  string
+		expectedBody *models.SystemUserResponse
+	}{
+		{
+			description: "User and group not validated and mapping not successful",
+			expectedBody: &models.SystemUserResponse{
+				Passed: false,
+				Checks: []*models.Checks{
+					{
+						Title:         constants.SYSTEM_USER_HAB_VALIDATION_FAILURE_TITLE,
+						Passed:        false,
+						SuccessMsg:    "",
+						ErrorMsg:      constants.SYSTEM_USER_HAB_ERROR_MSG ,
+						ResolutionMsg: constants.SYSTEM_USER_HAB_RESOLUTION_MSG,
+					},
+					{
+						Title:         constants.SYSTEM_GROUP_HAB_VALIDATION_FAILURE_TITLE,
+						Passed:        false,
+						SuccessMsg:    "",
+						ErrorMsg:      constants.SYSTEM_GROUP_HAB_ERROR_MSG,
+						ResolutionMsg: constants.SYSTEM_GROUP_HAB_RESOLUTION_MSG,
+					},
+					{
+						Title:         constants.SYSTEM_USERANDGROUP_MAPPING_FAILURE_TITLE,
+						Passed:        false,
+						SuccessMsg:    "",
+						ErrorMsg:      constants.SYSTEM_PRIMARYGROUP_MATCH_ERROR_MSG,
+						ResolutionMsg: constants.SYSTEM_USERANDGROUP_MAPPING_RESOLUTION_MSG,
+					},
+				},
+			},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.description, func(t *testing.T) {
+			got := s.GetSystemUserServiceDetails()
+			assert.Equal(t, tt.expectedBody, got)
+		})
+	}
+}
diff --git a/lib/executil/exec_test.go b/lib/executil/exec_test.go
new file mode 100644
index 000000000..80e41a8fd
--- /dev/null
+++ b/lib/executil/exec_test.go
@@ -0,0 +1,17 @@
+package executil_test
+
+import (
+	"testing"
+
+	"github.com/chef/automate/lib/executil"
+	"github.com/stretchr/testify/assert"
+)
+
+
+func TestCommand(t *testing.T) {
+	f := &executil.ExecCmdServiceImp{}
+
+	output, err := f.Command("echo", []string{"Hello"})
+	assert.Contains(t, string(output), "Hello")
+	assert.Equal(t, nil, err)
+}
\ No newline at end of file
diff --git a/lib/userutils/user_test.go b/lib/userutils/user_test.go
new file mode 100644
index 000000000..2073e5562
--- /dev/null
+++ b/lib/userutils/user_test.go
@@ -0,0 +1,35 @@
+package userutils_test
+
+import (
+	"os/user"
+	"testing"
+
+	"github.com/chef/automate/components/automate-cli/pkg/verifyserver/constants"
+	"github.com/chef/automate/lib/userutils"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestLookup(t *testing.T) {
+	s := &userutils.UserUtilImp{}
+	sysUser, err := s.Lookup(constants.USER_NAME)
+	if sysUser == nil {
+		assert.Equal(t, user.UnknownUserError(constants.USER_NAME), err)
+	}
+}
+
+func TestLookupGroup(t *testing.T) {
+	s := &userutils.UserUtilImp{}
+	group, err := s.LookupGroup(constants.GROUP_NAME)
+	if group == nil {
+		assert.Equal(t, user.UnknownGroupError(constants.GROUP_NAME), err)
+	}
+}
+
+func TestLookupGroupId(t *testing.T) {
+	s := &userutils.UserUtilImp{}
+	gid := "1000"
+	group, err := s.LookupGroupId(gid)
+	if group == nil {
+		assert.Equal(t, user.UnknownGroupIdError(gid), err)
+	}
+}