1+ from os import environ
12from logging import getLogger
23from pyouroboros .logger import BlacklistFilter
34
45
56class Config (object ):
67 options = ['INTERVAL' , 'PROMETHEUS' , 'DOCKER_SOCKETS' , 'MONITOR' , 'IGNORE' , 'LOG_LEVEL' , 'PROMETHEUS_ADDR' ,
7- 'PROMETHEUS_PORT' , 'NOTIFIERS' , 'REPO_USER' , 'REPO_PASS' , 'CLEANUP' , 'RUN_ONCE' , 'LATEST' ,
8+ 'PROMETHEUS_PORT' , 'NOTIFIERS' , 'REPO_USER' , 'REPO_PASS' , 'CLEANUP' , 'RUN_ONCE' , 'LATEST' , 'CRON' ,
89 'INFLUX_URL' , 'INFLUX_PORT' , 'INFLUX_USERNAME' , 'INFLUX_PASSWORD' , 'INFLUX_DATABASE' , 'INFLUX_SSL' ,
9- 'INFLUX_VERIFY_SSL' , 'DATA_EXPORT' , 'SELF_UPDATE' , 'LABEL_ENABLE' , 'DOCKER_TLS_VERIFY ' , 'LABELS_ONLY' ,
10- 'DRY_RUN' ]
10+ 'INFLUX_VERIFY_SSL' , 'DATA_EXPORT' , 'SELF_UPDATE' , 'LABEL_ENABLE' , 'DOCKER_TLS ' , 'LABELS_ONLY' ,
11+ 'DRY_RUN' , 'HOSTNAME' , 'DOCKER_TLS_VERIFY' ]
1112
13+ hostname = environ .get ('HOSTNAME' )
1214 interval = 300
15+ cron = None
1316 docker_sockets = 'unix://var/run/docker.sock'
14- docker_tls_verify = False
17+ docker_tls = False
18+ docker_tls_verify = True
1519 monitor = []
1620 ignore = []
1721 data_export = None
@@ -76,23 +80,27 @@ def config_blacklist(self):
7680 def parse (self ):
7781 for option in Config .options :
7882 if self .environment_vars .get (option ):
83+ env_opt = self .environment_vars [option ]
84+ if isinstance (env_opt , str ):
85+ # Clean out quotes, both single/double and whitespace
86+ env_opt = env_opt .strip ("'" ).strip ('"' ).strip (' ' )
7987 if option in ['INTERVAL' , 'PROMETHEUS_PORT' , 'INFLUX_PORT' ]:
8088 try :
81- opt = int (self . environment_vars [ option ] )
89+ opt = int (env_opt )
8290 setattr (self , option .lower (), opt )
8391 except ValueError as e :
8492 print (e )
8593 elif option in ['LATEST' , 'CLEANUP' , 'RUN_ONCE' , 'INFLUX_SSL' , 'INFLUX_VERIFY_SSL' , 'DRY_RUN' ,
86- 'SELF_UPDATE' , 'LABEL_ENABLE' , 'DOCKER_TLS_VERIFY ' , 'LABELS_ONLY' ]:
87- if self . environment_vars [ option ] .lower () in ['true' , 'yes' ]:
94+ 'SELF_UPDATE' , 'LABEL_ENABLE' , 'DOCKER_TLS ' , 'LABELS_ONLY' , 'DOCKER_TLS_VERIFY ' ]:
95+ if env_opt .lower () in ['true' , 'yes' ]:
8896 setattr (self , option .lower (), True )
89- elif self . environment_vars [ option ] .lower () in ['false' , 'no' ]:
97+ elif env_opt .lower () in ['false' , 'no' ]:
9098 setattr (self , option .lower (), False )
9199 else :
92- self .logger .error ('%s is not true/yes, nor false/no for %s. Assuming false ' ,
93- self . environment_vars [ option ], option )
100+ self .logger .error ('%s is not true/yes, nor false/no for %s. Assuming %s ' ,
101+ env_opt , option , getattr ( self , option ) )
94102 else :
95- setattr (self , option .lower (), self . environment_vars [ option ] )
103+ setattr (self , option .lower (), env_opt )
96104 elif vars (self .cli_args ).get (option ):
97105 setattr (self , option .lower (), vars (self .cli_args ).get (option ))
98106
@@ -106,9 +114,19 @@ def parse(self):
106114 for option in ['docker_sockets' , 'notifiers' , 'monitor' , 'ignore' ]:
107115 if isinstance (getattr (self , option ), str ):
108116 string_list = getattr (self , option )
109- setattr (self , option , [string . strip ( ' ' ). strip ( '"' ) for string in string_list .split (' ' )])
117+ setattr (self , option , [string for string in string_list .split (' ' )])
110118
111119 # Config sanity checks
120+ if self .cron :
121+ cron_times = self .cron .strip ().split (' ' )
122+ if len (cron_times ) != 5 :
123+ self .logger .error ("Cron must be in cron syntax. e.g. * * * * * (5 places). Ignoring and using interval" )
124+ self .cron = None
125+ else :
126+ self .logger .info ("Cron configuration is valid. Using Cron schedule %s" , cron_times )
127+ self .cron = cron_times
128+ self .interval = None
129+
112130 if self .data_export == 'influxdb' and not self .influx_database :
113131 self .logger .error ("You need to specify an influx database if you want to export to influxdb. Disabling "
114132 "influxdb data export." )
@@ -120,4 +138,11 @@ def parse(self):
120138 self .logger .warning ("Dry run is designed to be ran with run once. Setting for you." )
121139 self .run_once = True
122140
141+ # Remove default config that is not used for cleaner logs
142+ if self .data_export != 'prometheus' :
143+ self .prometheus_addr , self .prometheus_port = None , None
144+
145+ if self .data_export != 'influxdb' :
146+ self .influx_url , self .influx_port , self .influx_username , self .influx_password = None , None , None , None
147+
123148 self .config_blacklist ()
0 commit comments