In questo esempio di progetto di vRealize Automation Cloud Assembly, si inizia con un modello cloud che contiene solo le risorse di base di WordPress, ad esempio un solo server applicazioni.
vRealize Automation Cloud Assembly è uno strumento infrastructure-as-code. Si trascinano le risorse nella tela di progettazione per iniziare. Quindi, è possibile completare i dettagli utilizzando l'editor di codice a destra della tela.
L'editor di codice consente di digitare, tagliare e incollare direttamente il codice. Se si sta modificando la modifica del codice, è possibile selezionare una risorsa nella tela, fare clic sulla scheda Proprietà dell'editor di codice e immettere i valori. I valori immessi vengono visualizzati nel codice come se fossero stati digitati direttamente.
Prerequisiti
Acquisire familiarità con l'infrastruttura. I nomi e i valori mostrati qui provengono dall'infrastruttura nella prima parte dell'esempio, ma è necessario sostituirli con i propri.
Procedura
- Passare a e fare clic su .
- Denominare il modello cloud Wordpress-BP.
- Selezionare il progetto WordPress e fare clic su Crea.
- Dalle risorse a sinistra della pagina di progettazione del modello cloud, trascinare due macchine indipendenti dal cloud sulla tela.
Le macchine fungono da server applicazioni di WordPress (WebTier) e server di database MySQL (DBTier).
- A destra, modificare il codice YAML della macchina per aggiungere nomi, immagini, caratteristiche e tag di vincolo:
resources:
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: 'ubuntu-16'
flavor: 'small'
constraints: - tag: env:dev
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: 'ubuntu-16'
flavor: 'small'
constraints: - tag: env:dev
- Trascinare una rete indipendente dal cloud nella tela e modificarne il codice:
WP-Network-Private:
type: Cloud.Network
properties:
name: WP-Network-Private
networkType: existing
constraints: - tag: 'type:isolated-net' - tag: 'env:dev'
- Connettere le macchine alla rete:
Fare clic e tenere premuto il punto in cui la linea tocca il blocco di rete, trascinarlo in un blocco macchina e rilasciarlo.
Nell'editor, si noti che il codice di rete viene aggiunto alle due macchine:
resources:
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: 'ubuntu-16'
flavor: 'small'
constraints:
- tag: env:dev
networks: - network: '${resource["WP-Network-Private"].id}'
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: 'ubuntu-16'
flavor: 'small'
constraints:
- tag: env:dev
networks: - network: '${resource["WP-Network-Private"].id}'
- Aggiungere la richiesta di input dell'utente.
In alcune posizioni, l'infrastruttura dell'esempio è stata configurata per più opzioni. Ad esempio:
- Ambienti della zona cloud per lo sviluppo, il test e la produzione
- Mappature delle caratteristiche per le macchine piccole, medie e grandi
- Velocità del disco di storage per l'utilizzo generale e rapido
È possibile impostare un'opzione specifica direttamente nel modello cloud, ma un approccio migliore consiste nel permettere all'utente di selezionare l'opzione al momento della distribuzione del modello. La richiesta di input dell'utente consente di creare un modello che può essere distribuito in molti modi, anziché avere molti modelli hardcoded.
- Creare una sezione
inputs
nel codice, in modo che gli utenti possano selezionare la dimensione della macchina e l'ambiente di destinazione al momento della distribuzione. Definire i valori selezionabili:
inputs:
env:
type: string
enum:
- 'env:dev'
- 'env:prod'
- 'env:test'
default: 'env:dev'
title: Environment
description: Target Environment
size:
type: string
enum:
- small
- medium
- large
description: Size of Nodes
title: Tier Machine Size
- Nella sezione
resources
del codice, aggiungere il codice ${input.input-name}
per richiedere la selezione dell'utente:
resources:
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: 'ubuntu-16'
flavor: '${input.size}'
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
WebTier:
type: Cloud.Machine
properties:
name: wordpress
image: 'ubuntu-16'
flavor: '${input.size}'
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
WP-Network-Private:
type: Cloud.Network
properties:
name: WP-Network-Private
networkType: existing
constraints:
- tag: 'type:isolated-net'
- tag: '${input.env}'
- Infine, migliorare il codice
WebTier
e DBTier
utilizzando i seguenti esempi. Il codice WP-Network-Private
non richiede modifiche aggiuntive.
Si noti che i miglioramenti includono l'accesso al server di database, un disco di database e gli script di inizializzazione cloudConfig in fase di distribuzione.
Componente |
Esempio |
Input DBTier aggiuntivi |
username:
type: string
minLength: 4
maxLength: 20
pattern: '[a-z]+'
title: Database Username
description: Database Username
userpassword:
type: string
pattern: '[a-z0-9A-Z@#$]+'
encrypted: true
title: Database Password
description: Database Password
databaseDiskSize:
type: number
default: 4
maximum: 10
title: MySQL Data Disk Size
description: Database Disk Size
|
Risorsa DBTier |
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: ubuntu-16
flavor: '${input.size}'
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
assignPublicIpAddress: true
remoteAccess:
authentication: usernamePassword
username: '${input.username}'
password: '${input.userpassword}'
cloudConfig: |
#cloud-config
repo_update: true
repo_upgrade: all
packages:
- mysql-server
runcmd:
- sed -e '/bind-address/ s/^#*/#/' -i /etc/mysql/mysql.conf.d/mysqld.cnf
- service mysql restart
- mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mysqlpassword';"
- mysql -e "FLUSH PRIVILEGES;"
attachedDisks: [] |
Risorsa WebTier |
WebTier:
type: Cloud.Machine
properties:
name: wordpress
flavor: '${input.size}'
image: ubuntu-16
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
assignPublicIpAddress: true
cloudConfig: |
#cloud-config
repo_update: true
repo_upgrade: all
packages:
- apache2
- php
- php-mysql
- libapache2-mod-php
- php-mcrypt
- mysql-client
runcmd:
- mkdir -p /var/www/html/mywordpresssite && cd /var/www/html && wget https://wordpress.org/latest.tar.gz && tar -xzf /var/www/html/latest.tar.gz -C /var/www/html/mywordpresssite --strip-components 1
- i=0; while [ $i -le 5 ]; do mysql --connect-timeout=3 -h ${DBTier.networks[0].address} -u root -pmysqlpassword -e "SHOW STATUS;" && break || sleep 15; i=$((i+1)); done
- mysql -u root -pmysqlpassword -h ${DBTier.networks[0].address} -e "create database wordpress_blog;"
- mv /var/www/html/mywordpresssite/wp-config-sample.php /var/www/html/mywordpresssite/wp-config.php
- sed -i -e s/"define( 'DB_NAME', 'database_name_here' );"/"define( 'DB_NAME', 'wordpress_blog' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_USER', 'username_here' );"/"define( 'DB_USER', 'root' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_PASSWORD', 'password_here' );"/"define( 'DB_PASSWORD', 'mysqlpassword' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_HOST', 'localhost' );"/"define( 'DB_HOST', '${DBTier.networks[0].address}' );"/ /var/www/html/mywordpresssite/wp-config.php
- service apache2 reload
|
Esempio: Esempio di codice del modello cloud di base completato
inputs:
env:
type: string
enum:
- 'env:dev'
- 'env:prod'
- 'env:test'
default: 'env:dev'
title: Environment
description: Target Environment
size:
type: string
enum:
- small
- medium
- large
description: Size of Nodes
title: Tier Machine Size
username:
type: string
minLength: 4
maxLength: 20
pattern: '[a-z]+'
title: Database Username
description: Database Username
userpassword:
type: string
pattern: '[a-z0-9A-Z@#$]+'
encrypted: true
title: Database Password
description: Database Password
databaseDiskSize:
type: number
default: 4
maximum: 10
title: MySQL Data Disk Size
description: Database Disk Size
resources:
DBTier:
type: Cloud.Machine
properties:
name: mysql
image: ubuntu-16
flavor: '${input.size}'
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
assignPublicIpAddress: true
remoteAccess:
authentication: usernamePassword
username: '${input.username}'
password: '${input.userpassword}'
cloudConfig: |
#cloud-config
repo_update: true
repo_upgrade: all
packages:
- mysql-server
runcmd:
- sed -e '/bind-address/ s/^#*/#/' -i /etc/mysql/mysql.conf.d/mysqld.cnf
- service mysql restart
- mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mysqlpassword';"
- mysql -e "FLUSH PRIVILEGES;"
attachedDisks: []
WebTier:
type: Cloud.Machine
properties:
name: wordpress
flavor: '${input.size}'
image: ubuntu-16
constraints:
- tag: '${input.env}'
networks:
- network: '${resource["WP-Network-Private"].id}'
assignPublicIpAddress: true
cloudConfig: |
#cloud-config
repo_update: true
repo_upgrade: all
packages:
- apache2
- php
- php-mysql
- libapache2-mod-php
- php-mcrypt
- mysql-client
runcmd:
- mkdir -p /var/www/html/mywordpresssite && cd /var/www/html && wget https://wordpress.org/latest.tar.gz && tar -xzf /var/www/html/latest.tar.gz -C /var/www/html/mywordpresssite --strip-components 1
- i=0; while [ $i -le 5 ]; do mysql --connect-timeout=3 -h ${DBTier.networks[0].address} -u root -pmysqlpassword -e "SHOW STATUS;" && break || sleep 15; i=$((i+1)); done
- mysql -u root -pmysqlpassword -h ${DBTier.networks[0].address} -e "create database wordpress_blog;"
- mv /var/www/html/mywordpresssite/wp-config-sample.php /var/www/html/mywordpresssite/wp-config.php
- sed -i -e s/"define( 'DB_NAME', 'database_name_here' );"/"define( 'DB_NAME', 'wordpress_blog' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_USER', 'username_here' );"/"define( 'DB_USER', 'root' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_PASSWORD', 'password_here' );"/"define( 'DB_PASSWORD', 'mysqlpassword' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_HOST', 'localhost' );"/"define( 'DB_HOST', '${DBTier.networks[0].address}' );"/ /var/www/html/mywordpresssite/wp-config.php
- service apache2 reload
WP-Network-Private:
type: Cloud.Network
properties:
name: WP-Network-Private
networkType: existing
constraints:
- tag: 'type:isolated-net'
- tag: '${input.env}'
Operazioni successive
Testare il modello cloud controllando la sintassi e distribuirlo.