La marca gcloud app deploy '--appyaml' no parece funcionar

Aug 19 2020

Para Google App Engine, quiero inyectar env_variablesen mi app.yamlal implementar. En los documentos para gcloud app deploy, veo que hay una bandera --appyamlque:

Implementar con un archivo app.yaml específico que reemplazará al definido en DESPLEGABLE.

https://cloud.google.com/sdk/gcloud/reference/app/deploy

Entonces tengo un script de Fabric que lee my app.yaml, inyecta mis variables env adicionales, escribe este nuevo app.yaml en un archivo temporal y luego se ejecuta gcloud app deploy. El comando gcloudtermina luciendo así:

gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'

La implementación se realiza correctamente y se carga un nuevo código, sin embargo, mis nuevas variables env no parecen compensarlo.

Si proporciono un valor falso --appyaml, arroja un error, por lo que parece usar mi entrada.

¿Alguna idea de lo que podría estar haciendo mal?

Respuestas

2 vitooh Aug 19 2020 at 17:09

Lo he probado en AppEngine estándar con una pequeña HelloWorldmodificación en node.JS como esta:

'use strict';

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    var my_respond = "variables: ";
    res.status(200).send(Object.entries(process.env)).end();
});

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});

module.exports = app;

La muestra muestra variables de entorno como resultado.

De lo que agregué más simple app.yaml:

runtime: nodejs10
env_variables:
  MY_VAR: "my value from app.yaml"

Que en otra ubicación he agregado diferentes yamlllamados app1.yaml:

runtime: nodejs12
env_variables:
  MY_VAR: "my value from app1.yaml"

Entonces esto está cambiando la versión del nodo y el valor de MY_VAR.

Según mis pruebas, esto parece funcionar de manera un poco diferente a lo explicado en el documento, al menos lo entiendo de manera diferente.

Es posible usar --appyamlflag, pero solo cuando no hay ningún app.yamlarchivo en el directorio. Si no lo tiene en el directorio de la aplicación, usando la bandera puede apuntar a diferentes yaml.

Entonces, cuando estaba tratando de implementar gcloud app deploy --appyaml="/home/vitooh/app1.yaml"y app.yamlestaba en el directorio de la aplicación, la aplicación se implementó con él, por lo que la bandera no hace nada. Sin embargo, cuando lo hice sin app.yamlque funcione la bandera, se cambia el valor de la variable.

En realidad, puede detectarlo justo después de enviar el comando donde se muestra un resumen, justo antes de confirmar la implementación, en un descriptorvalor como este:

descriptor:      [/home/vitooh/app1.yaml]
source:          [/home/vitooh/appEngine/nodejs-docs-samples/appengine/hello-world/standard]
target project:  [xxxxx-test-01]
target service:  [default]
target version:  [20200819t094956]
target url:      [https://xxxxx-test-01.appspot.com]

Do you want to continue (Y/n)?
1 yedpodtrzitko Aug 19 2020 at 18:48

La pregunta es una caja negra sin ningún detalle: "Tengo un fabfile y luego pasan cosas pero pasan mal". Sin embargo, aquí hay un consejo sobre cómo hacer esto un poco más simple sin molestar app.yaml. app.yamlpuede contener una directiva llamada includes, que puede hacer referencia a otro archivo yaml, donde puede tener las variables de entorno, por lo que no tiene que tocar el archivo original.

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value