8e04be98a3
* Added tasks to check repolist in the image * ADded validation tasks to check offertype according to client pkg * Added task for repo validation * Added task for repo validation * Updated debug task in the per-vm validation file * Added a condition to check the client pkg acc to offertype except for base and byol * Added task to validate for base offertype * Made a correction in variable offertype * Added a condition to check the client pkg acc to offertype except for base and byol * Added correct variables in the repo validation tasks * Added correct variables in the repo validation tasks * Removed debug task * Added tasks for byos and base offer types * Added debug statement and conditionals * Added debug statement and conditionals * Added debug statement and conditionals * Commented the task for base package validation * Corrected the variable name * Added conditional statement in the ansible task * Modified the task to check offertype according to client pkg * Modified the task to check offertype according to client pkg * Made corrections related to syntax * Made corrections related to syntax * Made corrections related to syntax * Modifed the ansible validation task for repo-clint pkg mapping * Modifed the ansible validation task for repo-clint pkg mapping * Added validation task for arm64 based architecture packages * Added ansible.builtin.shell in the tasks * Added ansible.builtin.shell in the tasks * Added validation task for client packages against given offertype * Added log statements for more clarity in output of conditionals * Modified the logic to validate offertype against client pkg when offer is other than base and byol * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Debuging template error * Adding variables in the task for validation of client pkg * Adding variables in the task for validation of client pkg * Adding architecture variable * Added architecture parameter in validation to validate arm64 pkgs also * Added architecture parameter in validation to validate arm64 pkgs also * added validation of client pkg against ofeertype when architecture is arm64 * Added debug statement * Added debug statement * Added debug statement * Added variable in the ansible validation task * Added variable in the ansible validation task * Added comments to explain the logic of the ansible tasks * Added comments to explain the logic of the ansible tasks * Revamping the logic * Revamping the logic * Revamping the logic * Revamping the logic * Revamping the logic * Corrected the variable value * Revamped the logic * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * added debug statement * corrected variables * Added comments in the task, corrected variable naming in the task * Added comments in the task, corrected variable naming in the task * Added comments in the task, corrected variable naming in the task * Added comments in the task, corrected variable naming in the task * Updated repo-package mapping task * Updated repo-package mapping task * Updated repo-package mapping task * Updated repo-package mapping task * Added additional check * Updated comments in the task * Updated comments in the task * Updated comments in the task * Updated the logic * Added additional comments to get clarity of the validation tasks * Added a separate file to include the task of repo-validation * Print variables in repo-validation task * Print variables in repo-validation task * Print variables in repo-validation task * Added debug statements * Removed a conditional statement * Added more debug statements * Added variables in the repo-validation task * Updated variables in the ansible task * Updated variables in the ansible task * Added more comments in the repo-validation task * Added more comments in the repo-validation task * Added more comments in the repo-validation task * Added more comments in the repo-validation task |
||
---|---|---|
.github | ||
ansible_image_validation | ||
azure | ||
samples/output | ||
validations | ||
.gitignore | ||
CODE_OF_CONDUCT.md | ||
LICENSE | ||
README.md | ||
SECURITY.md | ||
azure-pipelines.yml |
README.md
Validations for Linux Images on Azure (Vhd Supported)
Use this script/pipeline to check if your custom linux image (Vhd) built works on Azure.
Table of Contents
Motivation
We wish to help our customers and also the community who are using Azure to use their Linux Virtual Machines with custom images and generalized images with less hassle. Hence the requirement of this pipeline which the customer/community can fork in their repositories and run as part of their regular validations.
This can also be used by Support teams across and outside Microsoft to validate incoming customers' images using Azure Cloud Shell
Requirements
Linux / macOS / Windows
- Terraform
- Azure Account
- Azure AAD Appliation Id Setup
- Currently AAD Application ID and Client Secret is Supported
- Ensure that Azure App has contributor access
Azure Pipelines
- Ensure that Terraform is available on Azure pipeline
- Ensure that relevant pipeline variables are set
Azure Cloud Shell
All requirements are met. Terraform is already installed by default.
Installation
- Ensure that Requirements is met
- clone the repo using the following command
git clone https://github.com/Azure/linux-image-validations
- Tar the validations folder using the following command
tar -cvzf validations/* validator.tar.gz
- Ensure that
validator.tar.gz
is present inside an Azure Storage Account.https://storage_account.blob.core.windows.net/container/validator.tar.gz
- Create a file called validate_upload.sh with the following details and place it inside the storage account
#!/bin/bash -e generation=$2 vhdName=$1 sudo $(which tar) -xzf validator.tar.gz [[ -n "$(uname -a | grep -i $distro)" || -n "$(uname -a | grep -i debian)" ]] && sudo $(which python) validate.py [[ -n "$(uname -a | grep -i $redhat)" || -n "$(uname -a | grep -i centos)" ]] && sudo $(which platform_python) validate.py cat logs.json # Example of a curl call echo "https://contoso.com/images/$vhdName/validation/$generation" curl --location --request POST "https://contoso.com/images/$vhdName/validation/$generation" \ --header 'Content-Type: application/json' -d @logs.json
- For folks who wish to run from commandline. Do note that this is to be performed after previous steps are in place.
- Deploying Resources (Terraform variables / Environment variables can also be used)
cd linux-image-validations/azure terraform apply
- Cleanup of Resources
cd linux-image-validations/azure terraform destroy
Working
Terraform is used in setting up of the infrastructure. Python is used to run the scripts inside the Virtual Machine using the Azure Custom Script Extension By doing so will perform the inherent validations such as WALinuxAgent Availability
Setup
Current Setup
- Single VM
- Single nic support
- Testing of Generation 1 and Generation 2 Virtual Machine.
- HA Not supported
- Input is currently the SAS Uri to the Linux VHD.
Future Setup
- High Availability with cluster
- Multiple NIC support
Output
Output is currently rendered in JSON We are currently in the Information Gathering wherein most of the details is not validated rather than displayed directly. The output details are currently available in logs.json
Currently Available
System
- /proc/cmdline - This is used to check if the VM supports Serial console
- Grub configuration - This is used to check if the VM supports Serial console
- OS Release and Kernel Version
- Disk Usage Report
- MBR/EFI Boot
Package Manager
- Repo availability - (yum and dnf)
Future Support
- Driver details
- Cloud-Init details
- Instance Metadata Service (IMDS)
Example
Validations
Current Validations Performed
- Generation 1 and Generation 2 VM Bootability
- WALinuxAgent Availability.
- Network Connectivity
- Repo Availability (Currently Yum and dnf supported)
Future Validations
- Azure Site Recovery
- Cloud-Init validation
Linux Distribution Supported
Current
- RedHat
- CentOS
Future Support
- SLES
- OpenSUSE
- Ubuntu - (Works - E2E testing is required)
- Debian - (Works - E2E testing is required)
Contributing
We sincerely welcome contributions from our customers and community. Together we believe that we can make this a better validation system for Linux Images on Azure.
Areas
- Documentation
- Code Enhancement
- Testing and Bug Reports
Issue and Bug Reporting
Issue Template to report Bugs and bugs are tracked on issues tab.
This can also be used to propose new feature request. Please turn the feature-request
flag
[Issue Occurrence - Optional]
Short one-liner issue statement
[Environment]
1. Linux / Windows / OS X
2. Azure Pipelines
3. CloudShell
[Description]
Provide Detailed Description explaining the issue statement
Add Screenshots / Snippets / Error messages if available
[Steps to Reproduce]
[Severity]
Code Enhancement
- naming convention for terraform scripts - snake_case for variables
- PEP-8 for Python is followed
- Commit Message format.
Multiple file changes involving multiple work should be submitted with multiple commits.<Repo Name / Work Name>: Short one-liner of the work Description: <Provide your description in brief> Signed-off-by:
Code of Conduct
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.