%%(display:none)
{{{
WikiUp
}}}
/%
[{TableOfContents }]\\
!!! Cos'è uno smartkit\\
\\
Lo smartkit in Sme.UP nasce con lo smartkit-fe per la fatturazione elettronica. Lo smartkit-fe è una macchina virtuale con pre-installato uno Smeup Provider. La macchina virtuale è controllabile da Sme.UP perchè resa minion di un master SaltStack di produzione di Sme.UP.\\
Successivamente allo smartkit-fe sono stati ideati nuovi smartkit, tra cui smartkit-webup e smartkit-gateway.\\
\\
I nuovi smartkit hanno una struttura comune che permette di partire da una macchina Centos opportunamente integrata con alcuni software di sistema utili (es: Docker, client SaltStack...) senza nessun software applicativo (ovvero i prodotti Sme.UP) installato. Il software applicativo viene installato dall'installatore tramite opportuni script da lui richiamati. La macchina Centos avendo il client SaltStack è collegabile come minion a qualsiasi master SaltStack.\\
\\
Tratteremo qui i nuovi smartkit e non lo smartkit-fe.\\
\\
!!! Architettura degli smartkit\\
\\
Ogni smartkit è deputato a gestire il software applicativo che lo riguarda. Ad esempio lo smartkit-webup è deputato a creare e gestire uno o più Web.UP Providerless, lo smartkit-gateway è deputato a creare e gestire uno o più Sme.UP Gateway. Le unità deployate (i Web.UP Providerless detti wup net o gli smarkit-gateway ad esempio) saranno qui chiamate provisioning units.\\
\\
Oltre agli smartkit applicativi esiste anche il progetto smartkit-commons, che contiene alcuni script utili per la gestione degli smartkit. Nel repository github relativo allo smartkit-commons sono committati anche gli script di generazione della macchina virtuale vuota (che contengono l'unica installazione nginx sulla macchina, il client SaltStack, il software Docker...). Sono attualmente committati per comodità in quel repository ma afferirebbero logicamente ad un progetto differente (ad esempio su github potrebbero essere committati su un repository smartkit-vm).\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_002.png' caption='Smartkits' width='100%' style='max-width: 100%;'}]\\
Ogni smartkit ha un pacchetto di installazione versionato sul repository di Sme.UP. Ad esempio l'artefatto dello smartkit-y versione x.x.x si troverà a questa url:\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_011.png' caption='smartkit-url-artifact' width='100%' style='max-width: 100%;'}]\\
Ogni pacchetto contiene uno script (installer.sh) per installare/aggiornare lo smartkit sulla vm.\\
\\
Ogni smartkit installato ha uno script di ingresso (smart.sh) per l'esecuzione dei comandi possibili allo smartkit in questione.\\
\\
Questo vale anche per lo smartkit-commons.\\
Per facilitare l'installazione e la gestione degli smartkit presenti sulla macchina è consigliato installare lo smartkit-commons ma non è obbligatorio. Infatti ogni smartkit è installabile da sè e non dipende da nessun altro smartkit.\\
\\
!!! Installazione di uno smartkit\\
\\
Per installare lo smartkit-y in versione X.X.X sulla vm le istruzioni sono:\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_009.png' caption='smartkit-installer-instructions' width='100%' style='max-width: 100%;'}]\\
Per individuare l'ultima versione disponibile dello smartkit-y si può usare questo comando:\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_010.png' caption='smartkit-lastest-release' width='100%' style='max-width: 100%;'}]\\
Per aggiornare alla versione X.X.X uno smartkit-y già precedentemente installato le istruzioni sono le stesse. L'installer.sh infatti installa o aggiorna. Si noti che l'aggiornamento è solo dello smartkit (sostanzialmente degli script di gestione e della relativa documentazione di versione) e non delle eventuali provisioning units installate da esso, come si vedrà meglio in seguito.\\
\\
Questo è quanto si vede ad esempio a console chiamando l'installer.sh dello smartkit-commons su un'installazione già presente.\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_003.png' caption='smarkit-commons-installer' width='100%' style='max-width: 100%;'}]\\
L'installazione dello smartkit-commons è possibile solo in questo modo.\\
\\
Per tutti gli altri smartkit le istruzioni di installazione possono essere eseguite in maniera facilitata tramite lo smartkit-commons.\\
\\
!!! Struttura degli smartkit sulla vm\\
\\
Gli installer degli smartkit creeranno una struttura di questo genere sulla macchina.\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_006.png' caption='smarkit-vm-structure' width='100%' style='max-width: 100%;'}]\\
Si nota che per lo smartkit-y viene creata una sua apposita cartella ($USER_HOME/smartkit/smartkit-y) con:\\
\\
* informazioni di versione (version.info)\\
* documentazione (README.md + docs)\\
* cartella scripts con almeno lo script smart.sh\\
$USER_HOME/smartkit/repository è una cartella comune a tutti gli smartkit dove sono scaricati i pacchetti del repo remoto.\\
\\
$USER_HOME/smartkit/backup è una cartella comune a tutti gli smartkit utilizzata per i backup.\\
\\
!!! Gli script smart.sh\\
\\
L'api di uno smartkit-y è esposta nel suo script smart.sh.\\
Chiamando $USER_HOME/smartkit/smartkit-y/scripts/smart.sh --help si possono vedere i metodi esposti (se vogliamo fare un paragone con le api rest l'help è analogo allo swagger di un'api rest).\\
Questi sono ad esempio i metodi esposti dallo smartkit-commons.\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_001.png' caption='smarkit-commons-help' width='100%' style='max-width: 100%;'}]\\
Come si nota l'installazione e aggiornamento di uno smartkit-y avviene alla sua ultima versione disponibile.\\
Questi sono i metodi esposti dallo smartkit-webup.\\
\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_007.png' caption='smarkit-webup-help' width='100%' style='max-width: 100%;'}]\\
Si nota che ogni smartkit espone sempre i metodi di detail e releases. Espone poi metodi propri del suo compito. Ad esempio lo smartkit-commons espone metodi di gestione degli smartkit, mentre lo smartkit-webup espone metodi di gestione dei Web.UP Providerless (detti wup net). Lo smartkit-gateway esporrà metodi di gestione degli Sme.UP Gateway.\\
\\
Lo smartkit-commons per i comandi smartkit-install e smartkit-update di uno smartkit-y effettuerà le istruzioni di installazione viste nella sezione "Installazione di uno smartkit" mentre per i comandi smartkit-details e smartkit-releases di uno smartkit-y chiamerà i rispettivi metodi di detail e releases dello smartkit in questione.\\
\\
Gli smartkit applicativi nella gestione delle varie provisioning units agiranno creando cartelle specifiche all'interno della loro directory USER_HOME/smartkit/smartkit-y. Ad esempio per lo smartkit-webup lanciando il comando "wupnet-create prod1" si creerà la cartella $USER_HOME/smartkit/smartkit-webup/wn-prod1 (a partire da script di template contenuti nel pacchetto di installazione alla cartella src/templates, come si vedrà successivamente). In quella cartella wn-prod1 ci sarà tutto quanto riguarderà l'installazione del wup net prod1.\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_005.png' caption='smarkit-structure-with-vup-nets' width='100%' style='max-width: 100%;'}]\\
!!! Aggiornamento del software\\
\\
Notiamo nelle immagini proposte degli help degli smart.sh la parte di alert: "There is a newer smartkit-y version. Updating is suggested! If you want to update terminate with CTRL-C and follow instructions in $USER_HOME/smartkit/smartkit-y/README". Ogni script di smart.sh ha infatti quando lanciato un controllo automatico che verifica se è presente una versione più aggiornata del software e propone all'utente di aggiornarsi all'ultima versione se ciò si verifica.\\
\\
Aggiornare uno smartkit all'ultima versione significa aggiornare i suoi script di gestione (sostanzialmente quello che si trova in smartkit-y/scripts) e non le eventuali provisioning units da lui deployate (ad esempio quello che si trova nelle cartelle smartkit-y/wn-* per lo smartkit-webup). Questo significa che per aggiornare i vari Web.UP providerless installati nello smartkit-webup va chiamato esplicitamente il comando wupnet-update. Quindi è possibilissimo avere uno smartkit-webup aggiornato all'ultima versione ma i vari wup net aggiornati a versioni precedenti e diverse tra loro.\\
\\
Si noti che negli smartkit applicativi il comando releases dà l'elenco delle versioni disponibili del pacchetto smartkit-y, che può incrementare di versione sia per modifiche allo script smart.sh sia per modifiche ai template di gestione delle provisioning units.\\
Ecco un potenziale doc releases.md per lo smartkit-webup:\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_008.png' caption='smartkit-doc-Release.md' width='100%' style='max-width: 100%;'}]\\
In una situazione del genere non avrebbe alcun senso aggiornare il wup net 1 alla versione 1.0.2 se è già alla versione 1.0.1. La versione 1.0.2 contiene solo un aggiornamento dello script di gestione.\\
\\
!!! Struttura dei progetti github\\
\\
I nuovi progetti smartkit hanno tutti la medesima struttura.\\
Il progetto smartkit-commons committato su git ha la stessa identica struttura degli altri progetti smartkit con in più cartelle per la gestione comune (es: una cartella vm contenente gli script di generazione della macchina vuota, una cartella nginx per l'installazione dell'unico reverse proxy della vm).\\
\\
Si mostra la struttura di un progetto smartkit qualsiasi (smartkit-webup) e dello smartkit-commons.\\
[{Image src='immagini/MBDOC-NSSKIT_02/nsskit_004.png' caption='smarkit-github-structure' width='100%' style='max-width: 100%;'}]\\
* README.md + cartella docs: contiene la documentazione del progetto (cosa riguarda, istruzioni di installazione, releases rilasciate...)\\
* pom.xml + version.info + cartella assembly: file di definizione del progetto mavenizzato e versionato.\\
* installer.sh: è lo script da chiamare per installare il progetto sulla macchina dopo aver unzippato il suo pacchetto di installazione\\
* cartella src: contiene il codice e le risorse del progetto. Al suo interno deve essere sempre presente il main script: script/smart.sh, lo script da chiamare con i comandi di gestione resi disponibili dallo smartkit in questione. Ci possono essere altri script o risorse di appoggio come ad esempio la cartella templates nello smartkit-webup che contiene i template per la generazione delle installazioni  dei vari webup providerless.\\