เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ€ เช…เช‚เชฆเชฐ เช…เชจเซ‡ เชฌเชนเชพเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช—เซ‹เช เชตเชฃเซ€

เชฎเซ‡เช‚ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชฒเช–เซเชฏเซเช‚ เช›เซ‡ เชกเซ‹เช•เชฐเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฒเชพเช‡เชซ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชฌเชนเชพเชฐ เชกเซ€เชฌเช—เซ€เช‚เช— เช•เซ‹เชก เชตเชฟเชถเซ‡ เชœเชตเชพเชฌ เช†เชชเซ‹, เชœเซเชฏเชพเช‚ เชคเซ‡เชฎเชฃเซ‡ เชธเช‚เช•เซเชทเชฟเชชเซเชคเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช•เซ‡ เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชฟเชธเซเชŸเชฎ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชธเซ‡เชตเชพ เช•เซเชฌเซ‡เชฐเชฎเชพเช‚ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡, เชฐเชนเชธเซเชฏเซ‹ เช–เซ‡เช‚เชšเซ‡ เช…เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เช…เชจเซเช•เซ‚เชณ เชฐเซ€เชคเซ‡ เชšเชพเชฒเซ‡, เชกเซ‹เช•เชฐเชจเซ€ เชฌเชนเชพเชฐ เชชเชฃ. เช•เช‚เชˆ เชœเชŸเชฟเชฒ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชตเชฐเซเชฃเชตเซ‡เชฒ โ€œเชฐเซ‡เชธเซ€เชชเซ€โ€ เช•เซ‹เชˆเชจเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ :) เช•เซ‹เชก เชชเชพเชฏเชฅเซ‹เชจเชฎเชพเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเชฐเซเช• เชญเชพเชทเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เชจเชฅเซ€.

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ€ เช…เช‚เชฆเชฐ เช…เชจเซ‡ เชฌเชนเชพเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช—เซ‹เช เชตเชฃเซ€

เชชเซเชฐเชถเซเชจเชจเซ€ เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟ เช† เช›เซ‡: เชเช• เชธเชฎเชฏเซ‡ เชเช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชนเชคเซ‹, เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชคเซ‡ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“ เช…เชจเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชธเชพเชฅเซ‡เชจเซ‹ เชเช• เชจเชพเชจเซ‹ เชฎเซ‹เชจเซ‹เชฒเชฟเชฅ เชนเชคเซ‹, เชชเชฐเช‚เชคเซ เชธเชฎเชฏ เชœเชคเชพเช‚ เชคเซ‡ เชตเชงเชคเซ‹ เช—เชฏเซ‹, เชธเซ‡เชตเชพเช“เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เชฅเชฏเซ‹, เชœเซ‡ เชฌเชฆเชฒเชพเชฎเชพเช‚ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธเชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เชฅเชตเชพ เชฒเชพเช—เซเชฏเซ‹, เช…เชจเซ‡ เชชเช›เซ€ เชฎเชพเชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช† เชฌเชงเซเช‚ เชเช•เชฆเชฎ VPS เชชเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซเช‚ เชนเชคเซเช‚, เช•เซ‹เชก เชธเซ‡เชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เชœเชฎเชพเชตเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เช•เซ‡ เชœเซ‡เชจเชพ เชชเชฐ Ansible เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชธเซ‡เชตเชพเชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช…เชจเซ‡ เช•เซ€ เชธเชพเชฅเซ‡ YAML เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชธเชพเชฅเซ‡ เชธเช‚เช•เชฒเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เช…เชจเซ‡ เชธเชฎเชพเชจ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชธเซเชฅเชพเชจเชฟเช• เชฒเซ‹เชจเซเชš, เชœเซ‡ เช–เซ‚เชฌ เช…เชจเซเช•เซ‚เชณ เชนเชคเซเช‚, เช•เชพเชฐเชฃ เช•เซ‡ .k เช† เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชตเซˆเชถเซเชตเชฟเช• เช‘เชฌเซเชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชฒเซ‹เชก เชฅเชฏเซ‡เชฒ เช›เซ‡, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช—เชฎเซ‡ เชคเซเชฏเชพเช‚เชฅเซ€ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชœเซ‹ เช•เซ‡, เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชตเซƒเชฆเซเชงเชฟ, เชคเซ‡เชฎเชจเชพ เชœเซ‹เชกเชพเชฃเซ‹ เช…เชจเซ‡ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชฏ เชฒเซ‹เช—เซ€เช‚เช— เช…เชจเซ‡ เชฎเซ‹เชจเซ€เชŸเชฐเซ€เช‚เช—เชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค, เช•เซเชฌเซ‡เชฐ เชคเชฐเชซ เชœเชตเชพเชจเซ€ เชชเซ‚เชฐเซเชตเชฆเชฐเซเชถเชจ เชนเชคเซ€, เชœเซ‡ เชนเชœเซ เชชเชฃ เชšเชพเชฒเซ เช›เซ‡. เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชธเชฎเชธเซเชฏเชพเช“เชจเชพ เชจเชฟเชฐเชพเช•เชฐเชฃเชฎเชพเช‚ เชธเชนเชพเชฏเชคเชพ เชธเชพเชฅเซ‡, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเชพ เช…เชญเชฟเช—เชฎเซ‹ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เช•เชนเซ‡เชตเชพเชคเชพ เชฐเชนเชธเซเชฏเซ‹ ะธ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเซ‹. เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช…เชจเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจ เช•เชฐเชตเซ‹ เช เชถเชพเชฌเซเชฆเชฟเช• เชฐเซ€เชคเซ‡ เชชเชพเชช เช›เซ‡! เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชนเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเชพ เชตเชฐเซเชคเชฎเชพเชจ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเซ‡ เชœเชพเชณเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚: เชชเซเชฐเชฅเชฎ, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชตเชฟเชตเชฟเชง เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธเชฎเชพเช‚ เชคเซ‡เชจเซ‹ เชเช•เชธเชฐเช–เซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹, เช…เชจเซ‡ เชฌเซ€เชœเซเช‚, เชเช• เชธเชฐเชณเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฎเชถเซ€เชจ เชชเชฐ เช•เซ‹เชก เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชซเชพเช‡เชฒ.

เช† เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚, เช…เชฎเชพเชฐเซ€ เช•เซเชฒเชพเชธเชฟเช• เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชซเชพเช‡เชฒ เช…เชจเซ‡ เช•เซเชฌเซ‡เชฐเชจเชพ เชฐเชนเชธเซเชฏเซ‹ เชฌเช‚เชจเซ‡ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชคเซเชฐเซ€เชœเชพ เชชเชพเชฏเชฅเซ‹เชจเชจเซ€ เชญเชพเชทเชพเชฎเชพเช‚ เชตเชงเซ เช•เช เซ‹เชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฎเชพเชณเช–เซเช‚ เชชเชฃ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡:

Dict[str, Dict[str, Union[str, int, float]]]

เชเชŸเชฒเซ‡ เช•เซ‡, เช…เช‚เชคเชฟเชฎ เช•เซ‹เช—เชซเชฟเช— เช เชจเชพเชฎเชตเชพเชณเชพ เชตเชฟเชญเชพเช—เซ‹ เชธเชพเชฅเซ‡เชจเซ‹ เชถเชฌเซเชฆเช•เซ‹เชถ เช›เซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชฆเชฐเซ‡เช• เชธเชฐเชณ เชชเซเชฐเช•เชพเชฐเซ‹เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฅเซ‡เชจเซ‹ เชถเชฌเซเชฆเช•เซ‹เชถ เช›เซ‡. เช…เชจเซ‡ เชตเชฟเชญเชพเช—เซ‹ เชšเซ‹เช•เซเช•เชธ เชชเซเชฐเช•เชพเชฐเชจเชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ€ เช—เซ‹เช เชตเชฃเซ€ เช…เชจเซ‡ เชเช•เซเชธเซ‡เชธเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡. เช…เชฎเชพเชฐเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเชพ เชญเชพเช—เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ:

adminka:
  django_secret: "ExtraLongAndHardCode"

db_main:
  engine: mysql
  host: 256.128.64.32
  user: cool_user
  password: "SuperHardPassword"

redis:
  host: 256.128.64.32
  pw: "SuperHardPassword"
  port: 26379

smtp:
  server: smtp.gmail.com
  port: 465
  email: [email protected]
  pw: "SuperHardPassword"

เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เช•เซเชทเซ‡เชคเซเชฐ engine เชกเซ‡เชŸเชพเชฌเซ‡เช SQLite เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช…เชจเซ‡ redis เชชเชฐ เชธเซ‡เชŸ เช•เชฐเซ‹ mock, เชธเชพเชšเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชซเชพเช‡เชฒเชจเซเช‚ เชจเชพเชฎ เชชเชฃ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเซเช‚ - เช† เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช“เชณเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชกเชฟเชฌเช—เซ€เช‚เช—, เชฏเซเชจเชฟเชŸ เชชเชฐเซ€เช•เซเชทเชฃ เช…เชจเซ‡ เช…เชจเซเชฏ เช•เซ‹เชˆเชชเชฃ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เชฎเชพเชŸเซ‡ เช•เซ‹เชกเชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เช† เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฎเชนเชคเซเชตเชจเซเช‚ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เช…เชจเซเชฏ เช˜เชฃเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เช›เซ‡ - เช…เชฎเชพเชฐเชพ เช•เซ‹เชกเชจเซ‹ เชเช• เชญเชพเช— เชตเชฟเชตเชฟเชง เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชพเชคเซเชฎเช• เช—เชฃเชคเชฐเซ€เช“ เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเชพเชฏเซ‡เชฒ เช›เซ‡, เชคเซ‡ เชฎเชพเชคเซเชฐ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชธเชพเชฅเซ‡เชจเชพ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชœ เชจเชนเซ€เช‚, เชชเชฃ เชตเชฟเชตเชฟเชง เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชธเชพเชฅเซ‡ เชชเชฃ เชšเชพเชฒเซ‡ เช›เซ‡, เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‹เชจเชพ เช•เชฎเซเชชเซเชฏเซเชŸเชฐเซเชธ เชชเชฐ เชœเซ‡เชฎเชจเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชจเซ‡ เชฌเซ‡เช•เชเชจเซเชก เชธเชฎเชธเซเชฏเชพเช“เชจเซ€ เชšเชฟเช‚เชคเชพ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชœเชŸเชฟเชฒ เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธเชจเซ‡ เชกเซ€เชฌเช— เช•เชฐเซ‹. เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฒเซ‡เช†เช‰เชŸ เช•เซ‹เชก เชธเชนเชฟเชค เช…เชฎเชพเชฐเชพ เชฎเซเช–เซเชฏ เชธเชพเชงเชจเซ‹, เช†เชจเชพ เชฆเซเชตเชพเชฐเชพ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเชพ เช›เซ‡ เชคเซ‡ เชถเซ‡เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชจเซเช•เชธเชพเชจ เชฅเชถเซ‡ เชจเชนเซ€เช‚ setup.py - เชเช•เชธเชพเชฅเซ‡ เช† เช…เชฎเชพเชฐเชพ เช•เซ‹เชกเชจเซ‡ เชเช• เชœ เช‡เช•เซ‹เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เชœเซ‹เชกเซ‡ เช›เซ‡, เชœเซ‡ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เชจเซ€ เชชเชฆเซเชงเชคเชฟเชฅเซ€ เชธเซเชตเชคเช‚เชคเซเชฐ เช›เซ‡.

เช•เซเชฌเชฐเชจเซ‡เชŸเซ€เชธ เชชเซ‹เชกเชจเซเช‚ เชตเชฐเซเชฃเชจ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡:

containers:
  - name : enter-api
    image: enter-api:latest
    ports:
      - containerPort: 80
    volumeMounts:
      - name: db-main-secret-volume
        mountPath: /etc/secrets/db-main

volumes:
  - name: db-main-secret-volume
    secret:
      secretName: db-main-secret

เชเชŸเชฒเซ‡ เช•เซ‡, เชฆเชฐเซ‡เช• เชฐเชนเชธเซเชฏ เชเช• เชตเชฟเชญเชพเช—เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡. เชฐเชนเชธเซเชฏเซ‹ เชชเซ‹เชคเชพเชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

apiVersion: v1
kind: Secret
metadata:
  name: db-main-secret
type: Opaque
stringData:
  db_main.yaml: |
    engine: sqlite
    filename: main.sqlite3

เชเช•เชธเชพเชฅเซ‡ เช† เชชเชพเชฅ เชธเชพเชฅเซ‡ YAML เชซเชพเช‡เชฒเซ‹เชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃเชฎเชพเช‚ เชชเชฐเชฟเชฃเชฎเซ‡ เช›เซ‡ /etc/secrets/db-main/section_name.yaml

เช…เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฒเซ‹เช‚เชš เชฎเชพเชŸเซ‡, เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชฐเซ‚เชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เช…เชฅเชตเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชชเชพเชฅ เชธเชพเชฅเซ‡ เชธเซเชฅเชฟเชค เช›เซ‡. เช† เชธเช—เชตเชกเชคเชพเช“ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช•เซ‹เชก เชธเซเชชเซ‹เชˆเชฒเชฐเชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡.

config.py

__author__ = 'AivanF'
__copyright__ = 'Copyright 2020, AivanF'

import os
import yaml

__all__ = ['config']
PROJECT_DIR = os.path.abspath(__file__ + 3 * '/..')
SECRETS_DIR = '/etc/secrets'
KEY_LOG = '_config_log'
KEY_DBG = 'debug'

def is_yes(value):
    if isinstance(value, str):
        value = value.lower()
        if value in ('1', 'on', 'yes', 'true'):
            return True
    else:
        if value in (1, True):
            return True
    return False

def update_config_part(config, key, data):
    if key not in config:
        config[key] = data
    else:
        config[key].update(data)

def parse_big_config(config, filename):
    '''
    Parse YAML config with multiple section
    '''
    if not os.path.isfile(filename):
        return False
    with open(filename) as f:
        config_new = yaml.safe_load(f.read())
        for key, data in config_new.items():
            update_config_part(config, key, data)
        config[KEY_LOG].append(filename)
        return True

def parse_tiny_config(config, key, filename):
    '''
    Parse YAML config with a single section
    '''
    with open(filename) as f:
        config_tiny = yaml.safe_load(f.read())
        update_config_part(config, key, config_tiny)
        config[KEY_LOG].append(filename)

def combine_config():
    config = {
        # To debug config load code
        KEY_LOG: [],
        # To debug other code
        KEY_DBG: is_yes(os.environ.get('DEBUG')),
    }
    # For simple local runs
    CONFIG_SIMPLE = os.path.join(PROJECT_DIR, 'config.yaml')
    parse_big_config(config, CONFIG_SIMPLE)
    # For container's tests
    CONFIG_ENVVAR = os.environ.get('CONFIG')
    if CONFIG_ENVVAR is not None:
        if not parse_big_config(config, CONFIG_ENVVAR):
            raise ValueError(
                f'No config file from EnvVar:n'
                f'{CONFIG_ENVVAR}'
            )
    # For K8s secrets
    for path, dirs, files in os.walk(SECRETS_DIR):
        depth = path[len(SECRETS_DIR):].count(os.sep)
        if depth > 1:
            continue
        for file in files:
            if file.endswith('.yaml'):
                filename = os.path.join(path, file)
                key = file.rsplit('.', 1)[0]
                parse_tiny_config(config, key, filename)
    return config

def build_config():
    config = combine_config()
    # Preprocess
    for key, data in config.items():
        if key.startswith('db_'):
            if data['engine'] == 'sqlite':
                data['filename'] = os.path.join(PROJECT_DIR, data['filename'])
    # To verify correctness
    if config[KEY_DBG]:
        print(f'** Loaded config:n{yaml.dump(config)}')
    else:
        print(f'** Loaded config from: {config[KEY_LOG]}')
    return config

config = build_config()

เช…เชนเซ€เช‚เชจเซ‹ เชคเชฐเซเช• เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡: เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชฎเซ‹เชŸเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เช…เชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เชชเชพเชฅ, เช…เชจเซ‡ เช•เซเชฌเซ‡เชฐ เชธเชฟเช•เซเชฐเซ‡เชŸเซเชธเชจเชพ เชจเชพเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชตเชฟเชญเชพเช—เซ‹เชจเซ‡ เชœเซ‹เชกเซ€เช เช›เซ€เช, เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡เชฎเชจเซ‡ เชฅเซ‹เชกเซ€ เชชเซเชฐเซ€เชชเซเชฐเซ‹เชธเซ‡เชธ เช•เชฐเซ€เช เช›เซ€เช. เชตเชคเซเชคเชพ เช•เซ‡เชŸเชฒเชพเช• เชšเชฒเซ‹. เชนเซเช‚ เชจเซ‹เช‚เชงเซเช‚ เช›เซเช‚ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฐเชนเชธเซเชฏเซ‹เชฎเชพเช‚เชฅเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ€ เชถเซ‹เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชŠเช‚เชกเชพเชˆ เชฎเชฐเซเชฏเชพเชฆเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ K8s เชฆเชฐเซ‡เช• เช—เซเชชเซเชคเชฎเชพเช‚ เชเช• เช›เซเชชเชพเชฏเซ‡เชฒ เชซเซ‹เชฒเซเชกเชฐ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฐเชนเชธเซเชฏเซ‹ เชชเซ‹เชคเชพเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชซเช•เซเชค เชเช• เชฒเชฟเช‚เช• เช‰เชšเซเชš เชธเซเชคเชฐ เชชเชฐ เชธเซเชฅเชฟเชค เช›เซ‡.

เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เชœเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ เชคเซ‡ เช•เซ‹เชˆเชจเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡ :) เชธเซเชฐเช•เซเชทเชพ เช…เชฅเชตเชพ เชธเซเชงเชพเชฐเชฃเชพ เชฎเชพเชŸเซ‡เชจเชพ เช…เชจเซเชฏ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเซ‡ เชฒเช—เชคเซ€ เช•เซ‹เชˆเชชเชฃ เชŸเชฟเชชเซเชชเชฃเซ€เช“ เช…เชจเซ‡ เชญเชฒเชพเชฎเชฃเซ‹ เชธเซเชตเซ€เช•เชพเชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชธเชฎเซเชฆเชพเชฏเชจเซ‹ เช…เชญเชฟเชชเซเชฐเชพเชฏ เชชเชฃ เชฐเชธเชชเซเชฐเชฆ เช›เซ‡, เช•เชฆเชพเชš เชคเซ‡ ConfigMaps (เช…เชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชนเชœเซ€ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซเช‚ เชจเชฅเซ€) เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชฅเชจ เช‰เชฎเซ‡เชฐเชตเชพ เช…เชจเซ‡ GitHub / PyPI เชชเชฐ เช•เซ‹เชก เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพ เชฏเซ‹เช—เซเชฏ เช›เซ‡? เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฐเซ€เชคเซ‡, เชฎเชจเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช• เชนเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เช†เชตเซ€ เชตเชธเซเชคเซเช“ เช–เซ‚เชฌ เชœ เชตเซเชฏเช•เซเชคเชฟเช—เชค เช›เซ‡, เช…เชจเซ‡ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชชเชฐ เชฅเซ‹เชกเซเช‚ เชกเซ‹เช•เชฟเชฏเซเช‚ เช•เชฐเชตเซเช‚, เชœเซ‡เชฎ เช•เซ‡ เช…เชนเซ€เช‚ เช†เชชเซ‡เชฒ เช›เซ‡, เช…เชจเซ‡ เช˜เซ‹เช‚เช˜เชพเชŸ, เชŸเซ€เชชเซเชธ เช…เชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เชชเชฆเซเชงเชคเชฟเช“เชจเซ€ เชšเชฐเซเชšเชพ, เชœเซ‡ เชนเซเช‚ เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชœเซ‹เชตเชพเชจเซ€ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚. , เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡ ๐Ÿ˜‰

เชซเช•เซเชค เชจเซ‹เช‚เชงเชพเชฏเซ‡เชฒเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชœ เชธเชฐเซเชตเซ‡เชฎเชพเช‚ เชญเชพเช— เชฒเชˆ เชถเช•เซ‡ เช›เซ‡. เชธเชพเช‡เชจ เช‡เชจ เช•เชฐเซ‹, เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡.

เชถเซเช‚ เชฎเชพเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ/เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชคเชฐเซ€เช•เซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช?

  • 0,0%เชนเชพ, เชนเซเช‚ /contribution0 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถ

  • 33,3%เชนเชพ, เชคเซ‡ เชฎเชนเชพเชจ เชฒเชพเช—เซ‡ เช›เซ‡4

  • 41,7%เชจเชพ, เชœเซ‡เชฎเชฃเซ‡ เชคเซ‡เชจเซ‡ เชชเซ‹เชคเชพเชจเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡5

  • 25,0%เชนเซเช‚ เชœเชตเชพเชฌ เช†เชชเชตเชพเชจเซเช‚ เชŸเชพเชณเซ€เชถ3

12 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เช เชฎเชค โ€‹โ€‹เช†เชชเซเชฏเซ‹. 3 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฆเซ‚เชฐ เชฐเชนเซเชฏเชพ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹