Existem várias bibliotecas yaml para Perl, Python, etc., se não for possível fazer isso diretamente de um shell script, mas usar outra linguagem.
Outra opção é instalar um processador de linha de comando yaml e chamá-lo de seu script de shell.
É assim que meu docker-compose.yml se parece.
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'
Agora eu preciso adicionar algum conteúdo via shell script (em um servidor ubuntu). Não tenho certeza se é possível:
nginx/links
, se não existir newthing
bloco se não houver nenhum bloco newthing O novo conteúdo deve ficar assim:
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'
Existem várias bibliotecas yaml para Perl, Python, etc., se não for possível fazer isso diretamente de um shell script, mas usar outra linguagem.
Outra opção é instalar um processador de linha de comando yaml e chamá-lo de seu script de shell.
Eu escrevi yaml_cli ( link ) para fazer exatamente o que você precisa. É baseado em python. Essa seria a sintaxe do seu exemplo:
yaml_cli \
-f docker-compose.yml \ # read from and save to file
--list-append \ # flag to append to lists instead of replacing existing values
-s nginx:links newthing \ # add a value of type string; here you need --list-append
-s newthing:container_name foo \ # key 'newthing' is created automatically
-s newthing:image 'newthing:1.2.3' \ #
-s newthing:restart always \ #
-s newthing:hostname 'example.com' #
Feedback sobre yaml_cli é apreciado.