Así es como se ve mi docker-compose.yml.
nginx:
container_name: 'nginx'
image: 'nginx:1.11'
restart: 'always'
ports:
- '80:80'
- '443:443'
volumes:
- '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
links:
- 'anything'
Ahora necesito agregar algo de contenido a través del script de shell (en un servidor ubuntu). No estoy muy seguro de si es posible en absoluto:
- Agregue un nuevo elemento a
nginx/links
, si no existe - Agregar
newthing
bloque si no existe un bloque nuevo
El nuevo contenido debería verse así:
nginx:
container_name: 'nginx'
image: 'nginx:1.11'
restart: 'always'
ports:
- '80:80'
- '443:443'
volumes:
- '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
- '/etc/letsencrypt:/etc/letsencrypt'
links:
- 'anything'
- 'newthing'
newthing:
container_name: foo
image: 'newthing:1.2.3'
restart: always
hostname: 'example.com'
shell-script
ubuntu
text-processing
docker
yaml
usuario3142695
fuente
fuente
sed
,awk
yregular expressions
para actualizar su archivo.ruamel.yaml
biblioteca para Python.Respuestas:
Hay varias bibliotecas de yaml para Perl, Python, etc., si está bien, no lo haga directamente desde un script de shell, sino que use otro idioma.
Otra opción es instalar un procesador yaml de línea de comandos y llamarlo desde su script de shell.
fuente
Escribí https://github.com/kislyuk/yq , un contenedor alrededor de https://stedolan.github.io/jq/ , para abordar este caso de uso.
fuente
yq -y '.newthing=...' input.yml > output.yml
. (Si está preguntando por una actualización en el lugar, comosed -i
, yq no puede hacerlo por sí mismo todavía, pero puede usarsponge
:.yq -y .newthing=... file.yml | sponge file.yml
)Escribí yaml_cli ( https://github.com/Gallore/yaml_cli ) para hacer exactamente lo que necesita. Está basado en python. Esta sería la sintaxis para su ejemplo:
Se agradece su opinión sobre yaml_cli.
fuente
Dado que la razón por la que desea hacer esto es modificar un archivo docker-compose, otra alternativa es usar un archivo JSON. Docker-compose ahora admite archivos JSON . El soporte para la manipulación de JSON en la línea de comandos ya es muy bueno (ej: jq )
fuente