Python Forum
Append data to Yaml section - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Append data to Yaml section (/thread-36343.html)



Append data to Yaml section - tbaror - Feb-09-2022

Hello ,

I am trying to append in loop sub sections into a Yaml ,using Pyyaml ,the yaml is below , didn't have a success until now

The section i want to append is right after
Quote:scrape_configs:

The code i am trying as follows below

Please advice

Thanks

the section to append to Yaml file
- job_name: system
  pipeline_stages:
  
  - output:
      source: message
 
      action_on_failure: skip
  static_configs:
  - targets:
      - localhost
    labels:
      job: LogsIssue
      agent: promtail
      __path__: C:\\Scripts\\LokiGrafana\\promtail\\log\\**
------the yaml file
#This is promtail-local-config.yaml 
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: C:/Scripts/LokiGrafana/promtail/positions.yaml

clients:
  - url: http://192.168.12.5:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  pipeline_stages:
  
  - output:
      source: message
 
      action_on_failure: skip
  static_configs:
  - targets:
      - localhost
    labels:
      job: LogsIssue
      agent: promtail
      __path__: C:\\Scripts\\LokiGrafana\\promtail\\log\\**
the python code

from glob import glob
import os
import yaml
cwd = os.getcwd()



def yaml_update(job_name, host_name, path_name,yaml_name):

    prom_dict = dict_file ={'job_name': 'system', 'static_configs': [{'targets': ['localhost'], 'labels': {'job': 'varlogs', '__path__': '/var/log/*log', 'host': 'grafana'}}]}

    prom_dict['jobname'] = job_name
    prom_dict['static_configs'][0]['labels']['host'] = host_name
    prom_dict['static_configs'][0]['labels']['__path__'] = path_name

    with open(yaml_name,'r') as yamlfile:
        cur_yaml = yaml.safe_load(yamlfile) # Note the safe_load
        cur_yaml['scrape_configs'].update(prom_dict)

    if cur_yaml:
        with open(yaml_name,'w') as yamlfile:
            yaml.safe_dump(cur_yaml, yamlfile) # Also note the safe_dump

    print(prom_dict)
    


def listdirs(rootdir):
    yaml_name = cwd + '\promtail\promtail-local-config.yaml'
    for file in os.listdir(rootdir):
        d = os.path.join(rootdir, file)
        if os.path.isdir(d):

            #path mame
            path_name = d

            #hostname extract 
            pos = d.rfind("@")
            host_name= d[pos+1:]
            print(host_name)
            
            #job name extract
            pos = d.rfind("\\")
            job_name= d[pos+1:]
            print(job_name)

            #append yaml
            yaml_update(job_name, host_name, path_name,yaml_name)


            #print(d)
            listdirs(d)
 

listdirs(cwd)