diff --git a/Jenkinsfile b/Jenkinsfile index 0d30598..b5bf236 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,17 +2,54 @@ pipeline { agent { label 'ogAdministrator' } + parameters { + string(name: 'BRANCH', defaultValue: 'main', description: 'Deployment environment') + string(name: 'EXTRA_NAME', description: 'Some additional text to better identify the VMs within ESXi') + string(name: 'NUMBER_OF_CLIENTS', defaultValue: '1', description: 'Number of clients to deploy') + string(name: 'DEFAULT_UDS_REST_URL', defaultValue: 'https://uds-broker.evlt.uma.es/uds/rest/', description: 'UDS REST URL') + string(name: 'DEFAULT_UDS_AUTHENTICATOR' , defaultValue: 'Usuarios locales', description: 'UDS REST authenticator') + string(name: 'DEFAULT_OGLIVE' , defaultValue: 'ogLive-noble-6.8.0-31-generic-amd64-r20240716_20241014.iso', description: 'oGLive ISO image') + } + environment { + UDS_CREDENTIALS = credentials('UDS_CREDENTIALS') + BRANCH = "${params.BRANCH}" + VI_USERNAME = 'root' + VI_PASSWORD = credentials('VI_PASSWORD') + GITEA_USER = "unizar" + GITEA_TOKEN = credentials('GITEA_TOKEN') + VAGRANT_FILE = "Vagrantfile-esxi" + ESXI_PASSWORD = credentials('VI_PASSWORD') + USER_SSK_PRIVATE_KEY = credentials('ognproject-ssh-private-key') + + + } + stages { - stage('Build') { + stage ('Create environment') { steps { - sh "echo root > root_passwd" - sh 'docker run --privileged -v /dev:/dev -v /run:/run -v $(pwd):/installer -w /installer --rm opengnsys/oginstallerbuilder ./builder.sh' - } - } - stage ('Upload Image to NFS') - { - steps { - sh "cp ubuntu-from-scratch.iso /mnt/srv/artefactos/oginstaller/oginstaller-${BRANCH_NAME}_${BUILD_NUMBER}.iso" + script { + sh """ + + echo "BRANCH: ${BRANCH}" + echo "EXTRA_NAME: ${EXTRA_NAME}" + echo "NUMBER_OF_CLIENTS: ${NUMBER_OF_CLIENTS}" + echo "DEFAULT_UDS_REST_URL: ${DEFAULT_UDS_REST_URL}" + echo "DEFAULT_UDS_AUTHENTICATOR: ${DEFAULT_UDS_AUTHENTICATOR}" + echo "DEFAULT_OGLIVE: ${DEFAULT_OGLIVE}" + echo "UDS_CREDENTIALS: ${UDS_CREDENTIALS}" + echo "VI_USERNAME: ${VI_USERNAME}" + echo "VI_PASSWORD: ${VI_PASSWORD}" + echo "GITEA_USER: ${GITEA_USER}" + echo "GITEA_TOKEN: ${GITEA_TOKEN}" + echo "VAGRANT_FILE: ${VAGRANT_FILE}" + echo "ESXI_PASSWORD: ${ESXI_PASSWORD}" + chmod 755 vagrant/provision_esxi_net.sh + cat vagrant/provision_esxi_net.sh + echo "vagrant/provision_esxi_net.sh executed" + cp $USER_SSK_PRIVATE_KEY installer/vagrant/config/id_rsa + + """ + } } } } diff --git a/vagrant/Vagrantfile-esxi b/vagrant/Vagrantfile-esxi new file mode 100644 index 0000000..b8addbe --- /dev/null +++ b/vagrant/Vagrantfile-esxi @@ -0,0 +1,49 @@ +VAGRANTFILE_API_VERSION = "2" +ENV['VAGRANT_DEFAULT_PROVIDER'] = "vmware_esxi" + +BRANCH=ENV['BRANCH'] || "main" +BRANCH_EXTRA=ENV['BRANCH_EXTRA'] || BRANCH + +#OGAGENTVERSION="1.4.2" + +LANGUAGE = "es_ES" +ENV['LC_ALL'] = LANGUAGE + ".UTF-8" + +# NCLIENTS = ENV['NUMBER_OF_CLIENTS']|| 4 +# NCLIENTS = NCLIENTS.to_i + +SERVERMEM = 2048 # Minimum: 512 +CLIENTMEM = 512 # Minimum: 256 + +MACPREFIX = ENV['OGN_MAC_PREFIX'] || '00:50:56:aa:aa' +NETPREFIX = ENV['OGN_NET_PREFIX'] || "192.168.2" +DHCPNET = ENV['DHCPNET'] || "192.168.2.0" + +SERVERIP = "#{NETPREFIX}.10" + +LOCALWEBPORT = 8443 + +ESXIPASSWORD = ENV['ESXI_PASSWORD'] || 'prompt:' + +GITEA_TOKEN = ENV['GITEA_TOKEN'] +GITEA_USER = ENV['GITEA_USER'] || 'unizar' +SSH_GIT_KEY_PASS = ENV['SSH_GIT_KEY_PASS'] || '' + + +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + config.vm.provider :vmware_esxi do |esxi| + esxi.esxi_hostname = 'esxi-jenkins.evlt.uma.es' + esxi.esxi_username = 'root' + esxi.esxi_password = ESXIPASSWORD + esxi.esxi_virtual_network = ['vLan_742' , BRANCH_EXTRA ] + esxi.guest_mac_address = [ "#{MACPREFIX}:01", "#{MACPREFIX}:02" ] + esxi.clone_from_vm = 'template-ubuntu24' + esxi.esxi_resource_pool = "/" + esxi.local_allow_overwrite = 'True' + esxi.guest_nic_type = 'e1000' + esxi.guest_custom_vmx_settings = [['monitor.allowLegacyCPU', 'TRUE']] + esxi.guest_storage = [ 10 ] + end + config.vm.box = "esxi_clone/dummy" + config.vm.hostname = "og-#{BRANCH_EXTRA}" +end diff --git a/vagrant/config/01-eth1.yaml b/vagrant/config/01-eth1.yaml new file mode 100644 index 0000000..8fcaf1f --- /dev/null +++ b/vagrant/config/01-eth1.yaml @@ -0,0 +1,7 @@ +network: + ethernets: + eth1: + dhcp4: false + addresses: [##ADDRESS##/24] + version: 2 + renderer: networkd diff --git a/vagrant/provision_esxi_net.sh b/vagrant/provision_esxi_net.sh new file mode 100644 index 0000000..ab15805 --- /dev/null +++ b/vagrant/provision_esxi_net.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +set -e + +BRANCH=$1 +BRANCH=${BRANCH:-"main"} +ESXCLI=/usr/bin/esxcli +VSWITCH="vSwitch2" +source ~/.pass + + +# Check if portgroup exists +function checkIfPortgroupExists () { + local i=0 + PORTGROUPS=( $($ESXCLI network vswitch standard portgroup list | grep $BRANCH | awk ' { print $1 }') ) + for portgroup in "${PORTGROUPS[@]}"; do + if [ $portgroup == $BRANCH ] ; then + echo "Portgroup $BRANCH is not going to be created, already exists" + echo "Please Check ESXI configuration" + exit 0 + fi + done +} +function createPortGroup() { + echo Adding portgroup $BRANCH to $VSWITCH + $ESXCLI network vswitch standard portgroup add --portgroup-name=$BRANCH --vswitch-name=$VSWITCH +} + +function getMaxVlan(){ + PORTGROUPS=( $($ESXCLI --formatter=csv network vswitch standard portgroup list | grep $VSWITCH | cut -d "," -f3 ) ) + IFS=$'\n' + MAX_VLAN=$(echo "${PORTGROUPS[*]}" | sort -nr | head -n1) + NEXT_VLAN=$(( MAX_VLAN + 1 )) + [[ $NEXT_VLAN -lt 3000 ]] && NEXT_VLAN=3000 + echo VLAN assigned is $NEXT_VLAN +} + +function setVlan(){ + $ESXCLI network vswitch standard portgroup set -p $BRANCH --vlan-id $1 +} + +#### SCRIPT +checkIfPortgroupExists +createPortGroup +getMaxVlan +setVlan $NEXT_VLAN +echo portgroup $BRANCH created with vlan_id $NEXT_VLAN