Commit f04ff427 authored by Miguel Angel Reina Ortega's avatar Miguel Angel Reina Ortega
Browse files

Adding tosca model validation scripts

parent 084db534
Loading
Loading
Loading
Loading
+72 −0
Original line number Original line Diff line number Diff line
# CI/CD:
# * branch      Continuously Builds & Push TOSCA parser image

#image: docker:latest

#services:
#  - docker:dind

variables:
  GIT_DEPTH: "3"

stages:
  - build
  - test

build-tosca-toolbox:
  stage: build
  before_script:
    - |
     curl "${CI_API_V4_URL}/projects/694/repository/files/common-tosca%2Fbuild_tosca_parser%2Esh/raw?ref=main" >> build_tosca_parser.sh
    - chmod +x build_tosca_parser.sh
  
  script:
    - echo "Building Cloudnet-TOSCA-toolbox image..."
    - ./build_tosca_parser.sh -v "Cloudnet-TOSCA-toolbox"
    - echo "Build finished"    
    
build-tosca-puccini:
  stage: build
  before_script:
    - |
     curl "${CI_API_V4_URL}/projects/694/repository/files/common-tosca%2Fbuild_tosca_parser%2Esh/raw?ref=main" >> build_tosca_parser.sh
    - chmod +x build_tosca_parser.sh
    - |
     curl "${CI_API_V4_URL}/projects/694/repository/files/common-tosca%2FDockerfile%2Epuccini/raw?ref=main" >> Dockerfile.puccini
  script:
    - echo "Building Puccini image..."
    - ./build_tosca_parser.sh -v "Puccini"
    - echo "Build finished"    

test-definitions-cloudnet:
  stage: test
  needs: [build-tosca-toolbox]
  before_script:
    - |
     curl "${CI_API_V4_URL}/projects/694/repository/files/common-tosca%2Fparse_tosca_definitions%2Esh/raw?ref=main" >> parse_tosca_definitions.sh
    - chmod +x parse_tosca_definitions.sh
  script:
    - echo "Parsing TOSCA definitions"
    - ./parse_tosca_definitions.sh -v "Cloudnet-TOSCA-toolbox"
  artifacts:
    when: always
    paths:
      - debugCloudnet.log
      
test-definitions-puccini:
  stage: test
  needs: [build-tosca-puccini]
  before_script:
    - |
     curl "${CI_API_V4_URL}/projects/694/repository/files/common-tosca%2Fparse_tosca_definitions%2Esh/raw?ref=main" >> parse_tosca_definitions.sh
    - chmod +x parse_tosca_definitions.sh
    - |
     curl "${CI_API_V4_URL}/projects/694/repository/files/common-tosca%2Fpuccini_parse%2Esh/raw?ref=main" >> puccini_parse.sh
    - chmod +x puccini_parse.sh
  script:
    - echo "Parsing TOSCA definitions"
    - ./parse_tosca_definitions.sh -v "Puccini"
  artifacts:
    when: always
    paths:
      - debugPuccini.log
+14 −0
Original line number Original line Diff line number Diff line
FROM ubuntu:16.04

#COPY requirements.txt /requirements.txt
RUN apt-get update && apt-get install -y -qq curl git gcc
RUN curl -OL https://golang.org/dl/go1.21.7.linux-amd64.tar.gz
RUN tar -C /usr/local -xzf go1.21.7.linux-amd64.tar.gz

ENV PATH="${PATH}:/usr/local/go/bin"

RUN git clone https://github.com/tliron/puccini.git /puccini && cd puccini && git checkout v0.22.4

RUN ./puccini/scripts/build

ENV PATH="${PATH}:/root/go/bin"
+40 −0
Original line number Original line Diff line number Diff line
#!/bin/bash
TOSCA_PARSER="Cloudnet-TOSCA-toolbox"
GIT_URL_TOSCA_TOOLBOX="https://github.com/Orange-OpenSource/Cloudnet-TOSCA-toolbox.git"
TOSCA_PARSER_FOLDER="tosca-parser/"

while getopts v: flag
do
        case "${flag}" in
                v) TOSCA_PARSER=${OPTARG};;
        esac
done

if [ ${TOSCA_PARSER} == "Cloudnet-TOSCA-toolbox" ] ; then
	# clone robot tests
    git clone $GIT_URL_TOSCA_TOOLBOX $TOSCA_PARSER_FOLDER
    cd $TOSCA_PARSER_FOLDER
	
    sed -i 's/python:alpine/python:3.10.5-alpine/g' bin/toscaware/Dockerfile
	
	sed -i 's/PyYAML==5.4.1/PyYAML==5.3.1/g' bin/toscaware/requirements.txt
	
	docker build -t cloudnet/toscaware bin/toscaware
	
	#pwd
	#docker run -v "${PWD}:/work" -v "${PWD}/bin/cloudnet:/cloudnet" --workdir="/work" cloudnet/toscaware /bin/sh -c "echo Building image"
	#docker run --name=tosca-parser -v "${PWD}:/work" --workdir="/work" cloudnet/toscaware /bin/sh -c "ls"
	#sleep 5;
	#container_to_update=`docker ps -n 1 --format '{{.Names}}'`
	#echo "Creating updated image from container ${container_to_update}"
	#docker container commit ${container_to_update} cloudnet/toscaware:latest
	#echo "Deleting old container ${container_to_update}"
	#docker container rm ${container_to_update}

elif [ ${TOSCA_PARSER} == "Puccini" ] ; then
	#Build Puccini docker from Dockerfile
	docker build -t puccini -f Dockerfile.puccini .
	
fi

exit
+79 −0
Original line number Original line Diff line number Diff line
#!/bin/bash
TOSCA_PARSER="Cloudnet-TOSCA-toolbox"
GIT_URL_TOSCA_TOOLBOX="https://github.com/Orange-OpenSource/Cloudnet-TOSCA-toolbox.git"
TOSCA_PARSER_FOLDER="tosca-parser/"

while getopts v: flag
do
        case "${flag}" in
                v) TOSCA_PARSER=${OPTARG};;
        esac
done

if [ ${TOSCA_PARSER} == "Cloudnet-TOSCA-toolbox" ] ; then
	# Parse TOSCA definitions
	echo "Cloudnet-TOSCA-toolbox: Validation starting ..."
	# Cloudnet-TOSCA-toolbox 
    git clone $GIT_URL_TOSCA_TOOLBOX $TOSCA_PARSER_FOLDER
    
	mkdir ${TOSCA_PARSER_FOLDER}examples/workdir
	cp *.yaml -t ${TOSCA_PARSER_FOLDER}examples/workdir
	
	cd ${TOSCA_PARSER_FOLDER}examples/workdir
	
	CLOUDNET_BINDIR=../../bin  
	. ${CLOUDNET_BINDIR}/cloudnet_rc.sh
	
	finalResult=0
	for i in *.yaml ; do
    
		result=0
		echo "Cloudnet-TOSCA-toolbox: Validating file $i..." >> debugCloudnet.log
		../../bin/toscaware/toscaware $i &> debug.log
		#docker ${DOCKER_OPTS} run --user "$(id -u)":"$(id -g)" -v "${PWD}/${TOSCA_PARSER_FOLDER}:/work" -v "${PWD}/${TOSCA_PARSER_FOLDER}/bin/cloudnet:/cloudnet" --workdir="/work" --rm --attach=stdin --attach=stdout --attach=stderr cloudnet/toscaware python ${PYTHON_OPTS} /cloudnet/tosca/tosca2cloudnet.py --template-file "$i" ${TOSCAWARE_OPTS}
		
		#docker ${DOCKER_OPTS} run --user "$(id -u)":"$(id -g)" --rm --attach=stdin --attach=stdout --attach=stderr cloudnet/toscaware python ${PYTHON_OPTS} /cloudnet/tosca/tosca2cloudnet.py --template-file "$1" ${TOSCAWARE_OPTS}
		#./${TOSCA_PARSER_FOLDER}/bin/toscaware/toscaware $i $> debug.log

		if [ $? == 2 ] ; then

			echo "Cloudnet-TOSCA-toolbox: ++++ Issues found with TOSCA file syntax in $i"
			grep "ERROR" < debug.log
			finalResult=1
		else
			echo "Cloudnet-TOSCA-toolbox: ++++ TOSCA parser finished validation of $i"
			#Check the debug messages, if there's at least one ERROR then res=1
			if [ `grep "ERROR" < debug.log | wc -l` == 0 ] ; then
				echo "++++ TOSCA parser finished validation of $i with no errors"
			else
				echo "Cloudnet-TOSCA-toolbox: ++++ TOSCA parser finished validation of $i with errors"
				grep "ERROR" < debug.log
				finalResult=1
			fi
		fi 
		cat debug.log >> debugCloudnet.log
	done
	
	cp debugCloudnet.log ../../../debugCloudnet.log
elif [ ${TOSCA_PARSER} == "Puccini" ] ; then
	finalResult=0
	echo "Puccini: Validation starting ..."
		
	docker run --rm -v "${PWD}:/workdir" puccini ./workdir/puccini_parse.sh &> debugPuccini.log
		
	if [ $? == 0 ] ; then
		echo "Puccini: ++++ TOSCA parser finished validation with no errors"
	elif  [ $? == 1 ] ; then
		echo "Puccini: ++++ TOSCA parser finished validation with errors"
			#Check the debug messages, if there's at least one ERROR then res=1
			#if [ `grep "PROBLEMS" < debug.log | wc -l` > 0 ] ; then
			#	echo "Puccini: ++++ ERRORS: "
			#	grep "PROBLEMS" < debug.log
			#	res=1
			#fi
			finalResult=1
	fi 
		
fi

exit $finalResult
 No newline at end of file
+15 −0
Original line number Original line Diff line number Diff line
#!/bin/bash

res=0
for i in /workdir/*.yaml ; do

	echo "Puccini: Validating file $i..."
	
	puccini-tosca parse $i
	
	if [ $? == 1 ] ; then
		res=1
	fi 
	
done
exit $res
 No newline at end of file