ಸೂಚನೆಗಳು: ಅನ್ಸಿಬಲ್ ಪಾತ್ರಗಳನ್ನು ಹೇಗೆ ಪರೀಕ್ಷಿಸುವುದು ಮತ್ತು ಉತ್ಪಾದನೆಯ ಮೊದಲು ಸಮಸ್ಯೆಗಳ ಬಗ್ಗೆ ಕಂಡುಹಿಡಿಯುವುದು ಹೇಗೆ

ಎಲ್ಲರೂ ಹಲೋ!

ನಾನು ಹೋಟೆಲ್ ಬುಕಿಂಗ್ ಸೇವೆಯಲ್ಲಿ DevOps ಇಂಜಿನಿಯರ್ ಆಗಿ ಕೆಲಸ ಮಾಡುತ್ತೇನೆ. Ostrovok.ru. ಈ ಲೇಖನದಲ್ಲಿ, ಅನ್ಸಿಬಲ್ ಪಾತ್ರಗಳನ್ನು ಪರೀಕ್ಷಿಸುವಲ್ಲಿ ನಮ್ಮ ಅನುಭವದ ಬಗ್ಗೆ ಮಾತನಾಡಲು ನಾನು ಬಯಸುತ್ತೇನೆ.

Ostrovok.ru ನಲ್ಲಿ, ನಾವು ಕಾನ್ಫಿಗರೇಶನ್ ಮ್ಯಾನೇಜರ್ ಆಗಿ ಅನ್ಸಿಬಲ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಇತ್ತೀಚೆಗೆ, ನಾವು ಪಾತ್ರಗಳನ್ನು ಪರೀಕ್ಷಿಸುವ ಅಗತ್ಯಕ್ಕೆ ಬಂದಿದ್ದೇವೆ, ಆದರೆ ಅದು ಬದಲಾದಂತೆ, ಇದಕ್ಕಾಗಿ ಹೆಚ್ಚಿನ ಸಾಧನಗಳಿಲ್ಲ - ಅತ್ಯಂತ ಜನಪ್ರಿಯ, ಬಹುಶಃ, ಮಾಲಿಕ್ಯೂಲ್ ಫ್ರೇಮ್ವರ್ಕ್, ಆದ್ದರಿಂದ ನಾವು ಅದನ್ನು ಬಳಸಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ. ಆದರೆ ಅವರ ದಸ್ತಾವೇಜನ್ನು ಅನೇಕ ಅಪಾಯಗಳ ಬಗ್ಗೆ ಮೌನವಾಗಿದೆ ಎಂದು ಬದಲಾಯಿತು. ರಷ್ಯನ್ ಭಾಷೆಯಲ್ಲಿ ನಮಗೆ ಸಾಕಷ್ಟು ವಿವರವಾದ ಕೈಪಿಡಿಯನ್ನು ಕಂಡುಹಿಡಿಯಲಾಗಲಿಲ್ಲ, ಆದ್ದರಿಂದ ನಾವು ಈ ಲೇಖನವನ್ನು ಬರೆಯಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ.

ಸೂಚನೆಗಳು: ಅನ್ಸಿಬಲ್ ಪಾತ್ರಗಳನ್ನು ಹೇಗೆ ಪರೀಕ್ಷಿಸುವುದು ಮತ್ತು ಉತ್ಪಾದನೆಯ ಮೊದಲು ಸಮಸ್ಯೆಗಳ ಬಗ್ಗೆ ಕಂಡುಹಿಡಿಯುವುದು ಹೇಗೆ

ಅಣು

ಅಣು - ಅನ್ಸಿಬಲ್ ಪಾತ್ರಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ಸಹಾಯ ಮಾಡುವ ಚೌಕಟ್ಟು.

ಸರಳೀಕೃತ ವಿವರಣೆ: ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ವೇದಿಕೆಯಲ್ಲಿ ಅಣುವು ಒಂದು ನಿದರ್ಶನವನ್ನು ರಚಿಸುತ್ತದೆ (ಮೋಡ, ವರ್ಚುವಲ್ ಯಂತ್ರ, ಕಂಟೇನರ್; ಹೆಚ್ಚಿನ ವಿವರಗಳಿಗಾಗಿ, ವಿಭಾಗವನ್ನು ನೋಡಿ ಚಾಲಕ), ಅದರ ಮೇಲೆ ನಿಮ್ಮ ಪಾತ್ರವನ್ನು ರನ್ ಮಾಡಿ, ನಂತರ ಪರೀಕ್ಷೆಗಳನ್ನು ನಡೆಸುತ್ತದೆ ಮತ್ತು ನಿದರ್ಶನವನ್ನು ಅಳಿಸುತ್ತದೆ. ಹಂತಗಳಲ್ಲಿ ಒಂದರಲ್ಲಿ ವಿಫಲವಾದಲ್ಲಿ, ಮಾಲಿಕ್ಯೂಲ್ ಅದರ ಬಗ್ಗೆ ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ.

ಇದೀಗ ಹೆಚ್ಚು.

ಸಿದ್ಧಾಂತದ ಒಂದು ಬಿಟ್

ಅಣುವಿನ ಎರಡು ಪ್ರಮುಖ ಘಟಕಗಳನ್ನು ಪರಿಗಣಿಸಿ: ಸನ್ನಿವೇಶ ಮತ್ತು ಚಾಲಕ.

ಸನ್ನಿವೇಶ

ಸ್ಕ್ರಿಪ್ಟ್ ಏನು, ಎಲ್ಲಿ, ಹೇಗೆ ಮತ್ತು ಯಾವ ಅನುಕ್ರಮದಲ್ಲಿ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತದೆ ಎಂಬುದರ ವಿವರಣೆಯನ್ನು ಒಳಗೊಂಡಿದೆ. ಒಂದು ಪಾತ್ರವು ಹಲವಾರು ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಹೊಂದಬಹುದು ಮತ್ತು ಪ್ರತಿಯೊಂದೂ ಹಾದಿಯಲ್ಲಿ ಡೈರೆಕ್ಟರಿಯಾಗಿರುತ್ತದೆ <role>/molecule/<scenario>, ಇದು ಪರೀಕ್ಷೆಗೆ ಅಗತ್ಯವಿರುವ ಕ್ರಿಯೆಗಳ ವಿವರಣೆಯನ್ನು ಒಳಗೊಂಡಿದೆ. ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಸೇರಿಸಬೇಕು default, ನೀವು ಅಣುಗಳೊಂದಿಗೆ ಪಾತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸಿದರೆ ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರಚಿಸಲಾಗುತ್ತದೆ. ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳ ಹೆಸರುಗಳು ನಿಮಗೆ ಬಿಟ್ಟದ್ದು.

ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿನ ಪರೀಕ್ಷೆಯ ಕ್ರಿಯೆಗಳ ಅನುಕ್ರಮವನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ ಮ್ಯಾಟ್ರಿಕ್ಸ್, ಮತ್ತು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಇದು:

(ಹೆಜ್ಜೆಗಳನ್ನು ಲೇಬಲ್ ಮಾಡಲಾಗಿದೆ ?, ಬಳಕೆದಾರರಿಂದ ನಿರ್ದಿಷ್ಟಪಡಿಸದಿದ್ದಲ್ಲಿ ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಸ್ಕಿಪ್ ಮಾಡಲಾಗಿದೆ)

  • lint - ಚಾಲನೆಯಲ್ಲಿರುವ ಲಿಂಟರ್ಗಳು. ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ yamllint и flake8,
  • destroy - ಅಣುವಿನ ಕೊನೆಯ ಉಡಾವಣೆಯಿಂದ ನಿದರ್ಶನಗಳನ್ನು ಅಳಿಸುವುದು (ಯಾವುದಾದರೂ ಇದ್ದರೆ),
  • dependency? - ಪರೀಕ್ಷಿತ ಪಾತ್ರದ ಅನ್ಸಿಬಲ್ ಅವಲಂಬನೆಯ ಸ್ಥಾಪನೆ,
  • syntax - ಬಳಸಿ ಪಾತ್ರದ ಸಿಂಟ್ಯಾಕ್ಸ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ ansible-playbook --syntax-check,
  • create - ಒಂದು ನಿದರ್ಶನವನ್ನು ರಚಿಸುವುದು,
  • prepare? - ನಿದರ್ಶನದ ತಯಾರಿಕೆ; ಉದಾ. python2 ಅನ್ನು ಪರಿಶೀಲಿಸಿ/ಸ್ಥಾಪಿಸಿ
  • converge - ಪ್ಲೇಬುಕ್‌ನ ಬಿಡುಗಡೆಯನ್ನು ಪರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ,
  • idempotence - ಐಡೆಂಪೊಟೆನ್ಸಿ ಪರೀಕ್ಷೆಗಾಗಿ ಪ್ಲೇಬುಕ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವುದು,
  • side_effect? - ಕ್ರಿಯೆಗಳು ನೇರವಾಗಿ ಪಾತ್ರಕ್ಕೆ ಸಂಬಂಧಿಸಿಲ್ಲ, ಆದರೆ ಪರೀಕ್ಷೆಗಳಿಗೆ ಅವಶ್ಯಕ,
  • verify - ಬಳಸಿಕೊಂಡು ಪರಿಣಾಮವಾಗಿ ಸಂರಚನೆಯ ಪರೀಕ್ಷೆಗಳನ್ನು ನಡೆಸುವುದು testinfra(ಡೀಫಾಲ್ಟ್) /goss/inspec,
  • cleanup? - (ಹೊಸ ಆವೃತ್ತಿಗಳಲ್ಲಿ) - ಸ್ಥೂಲವಾಗಿ ಹೇಳುವುದಾದರೆ, ಅಣುವಿನಿಂದ ಪ್ರಭಾವಿತವಾಗಿರುವ ಬಾಹ್ಯ ಮೂಲಸೌಕರ್ಯವನ್ನು "ಸ್ವಚ್ಛಗೊಳಿಸುವುದು",
  • destroy - ನಿದರ್ಶನವನ್ನು ಅಳಿಸಲಾಗುತ್ತಿದೆ.

ಈ ಅನುಕ್ರಮವು ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ಒಳಗೊಳ್ಳುತ್ತದೆ, ಆದರೆ ಅಗತ್ಯವಿದ್ದರೆ ಬದಲಾಯಿಸಬಹುದು.

ಮೇಲಿನ ಪ್ರತಿಯೊಂದು ಹಂತಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಚಲಾಯಿಸಬಹುದು molecule <command>. ಆದರೆ ಅಂತಹ ಪ್ರತಿಯೊಂದು ಕ್ಲೈ-ಕಮಾಂಡ್‌ಗೆ ತನ್ನದೇ ಆದ ಕ್ರಮಗಳ ಅನುಕ್ರಮ ಇರಬಹುದು ಎಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು, ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೂಲಕ ನೀವು ಕಂಡುಹಿಡಿಯಬಹುದು molecule matrix <command>. ಉದಾಹರಣೆಗೆ, ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸುವಾಗ converge (ಪರೀಕ್ಷೆಯ ಅಡಿಯಲ್ಲಿ ಪ್ಲೇಬುಕ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುವುದು), ಈ ಕೆಳಗಿನ ಕ್ರಿಯೆಗಳನ್ನು ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ:

$ molecule matrix converge
...
└── default         # название сценария
    ├── dependency  # установка зависимостей
    ├── create      # создание инстанса
    ├── prepare     # преднастройка инстанса
    └── converge    # прогон плейбука

ಈ ಕ್ರಿಯೆಗಳ ಅನುಕ್ರಮವನ್ನು ಸಂಪಾದಿಸಬಹುದು. ಪಟ್ಟಿಯಿಂದ ಏನನ್ನಾದರೂ ಈಗಾಗಲೇ ಮಾಡಿದ್ದರೆ, ಅದನ್ನು ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತದೆ. ಪ್ರಸ್ತುತ ಸ್ಥಿತಿ, ಹಾಗೆಯೇ ನಿದರ್ಶನಗಳ ಸಂರಚನೆ, ಅಣುವು ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ $TMPDIR/molecule/<role>/<scenario>.

ಇದರೊಂದಿಗೆ ಹಂತಗಳನ್ನು ಸೇರಿಸಿ ? ನೀವು ಅಪೇಕ್ಷಿತ ಕ್ರಿಯೆಗಳನ್ನು ಅನ್ಸಿಬಲ್-ಪ್ಲೇಬುಕ್ ಸ್ವರೂಪದಲ್ಲಿ ವಿವರಿಸಬಹುದು ಮತ್ತು ಹಂತಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಫೈಲ್ ಹೆಸರನ್ನು ಮಾಡಬಹುದು: prepare.yml/side_effect.yml. ಈ ಫೈಲ್‌ಗಳನ್ನು ನಿರೀಕ್ಷಿಸಿ ಅಣು ಸ್ಕ್ರಿಪ್ಟ್ ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುತ್ತದೆ.

ಚಾಲಕ

ಚಾಲಕವು ಪರೀಕ್ಷಾ ನಿದರ್ಶನಗಳನ್ನು ರಚಿಸುವ ಒಂದು ಘಟಕವಾಗಿದೆ.
ಮಾಲಿಕ್ಯೂಲ್ ಸಿದ್ಧವಾಗಿರುವ ಟೆಂಪ್ಲೇಟ್‌ಗಳನ್ನು ಹೊಂದಿರುವ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಡ್ರೈವರ್‌ಗಳ ಪಟ್ಟಿಯು ಈ ಕೆಳಗಿನಂತಿದೆ: ಅಜುರೆ, ಡಾಕರ್, ಇಸಿ2, ಜಿಸಿಇ, ಎಲ್‌ಎಕ್ಸ್‌ಸಿ, ಎಲ್‌ಎಕ್ಸ್‌ಡಿ, ಓಪನ್‌ಸ್ಟ್ಯಾಕ್, ವ್ಯಾಗ್ರಾಂಟ್, ಡೆಲಿಗೇಟೆಡ್.

ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಟೆಂಪ್ಲೇಟ್‌ಗಳು ಫೈಲ್‌ಗಳಾಗಿವೆ create.yml и destroy.yml ಸ್ಕ್ರಿಪ್ಟ್ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಅನುಕ್ರಮವಾಗಿ ನಿದರ್ಶನದ ರಚನೆ ಮತ್ತು ಅಳಿಸುವಿಕೆಯನ್ನು ವಿವರಿಸುತ್ತದೆ.
ವಿನಾಯಿತಿಗಳು ಡಾಕರ್ ಮತ್ತು ವ್ಯಾಗ್ರಾಂಟ್, ಏಕೆಂದರೆ ಅವುಗಳ ಮಾಡ್ಯೂಲ್‌ಗಳೊಂದಿಗಿನ ಸಂವಹನಗಳು ಮೇಲೆ ತಿಳಿಸಲಾದ ಫೈಲ್‌ಗಳಿಲ್ಲದೆ ಸಂಭವಿಸಬಹುದು.

ನಿಯೋಜಿತ ಚಾಲಕವನ್ನು ಹೈಲೈಟ್ ಮಾಡುವುದು ಯೋಗ್ಯವಾಗಿದೆ, ಏಕೆಂದರೆ ಅದನ್ನು ನಿದರ್ಶನವನ್ನು ರಚಿಸಲು ಮತ್ತು ಅಳಿಸಲು ಫೈಲ್‌ಗಳಲ್ಲಿ ಬಳಸಿದರೆ, ನಿದರ್ಶನಗಳ ಕಾನ್ಫಿಗರೇಶನ್‌ನೊಂದಿಗೆ ಮಾತ್ರ ಕೆಲಸವನ್ನು ವಿವರಿಸಲಾಗುತ್ತದೆ, ಉಳಿದವುಗಳನ್ನು ಎಂಜಿನಿಯರ್ ವಿವರಿಸಬೇಕು.

ಡೀಫಾಲ್ಟ್ ಡ್ರೈವರ್ ಡಾಕರ್ ಆಗಿದೆ.

ಈಗ ಅಭ್ಯಾಸಕ್ಕೆ ಹೋಗೋಣ ಮತ್ತು ಹೆಚ್ಚಿನ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರಿಗಣಿಸೋಣ.

ಆರಂಭಿಸುವಿಕೆ

"ಹಲೋ ವರ್ಲ್ಡ್" ಆಗಿ, ಸರಳವಾದ nginx ಅನುಸ್ಥಾಪನಾ ಪಾತ್ರವನ್ನು ಪರೀಕ್ಷಿಸೋಣ. ನಾವು ಡಾಕರ್ ಅನ್ನು ಡ್ರೈವರ್ ಆಗಿ ಆಯ್ಕೆ ಮಾಡುತ್ತೇವೆ - ನಿಮ್ಮಲ್ಲಿ ಹೆಚ್ಚಿನವರು ಇದನ್ನು ಸ್ಥಾಪಿಸಿದ್ದೀರಿ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ (ಮತ್ತು ಡಾಕರ್ ಡೀಫಾಲ್ಟ್ ಡ್ರೈವರ್ ಎಂದು ನೆನಪಿಡಿ).

ತಯಾರು virtualenv ಮತ್ತು ಅದರಲ್ಲಿ ಸ್ಥಾಪಿಸಿ molecule:

> pip install virtualenv
> virtualenv -p `which python2` venv
> source venv/bin/activate
> pip install molecule docker  # molecule установит ansible как зависимость; docker для драйвера

ಮುಂದಿನ ಹಂತವು ಹೊಸ ಪಾತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸುವುದು.
ಹೊಸ ಪಾತ್ರದ ಪ್ರಾರಂಭ, ಹಾಗೆಯೇ ಹೊಸ ಸ್ಕ್ರಿಪ್ಟ್, ಆಜ್ಞೆಯನ್ನು ಬಳಸಿಕೊಂಡು ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ molecule init <params>:

> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
├── README.md
├── defaults
├── handlers
├── meta
├── molecule
├── tasks
└── vars

6 directories, 1 file

ಇದು ಒಂದು ವಿಶಿಷ್ಟವಾದ ಅನ್ಸಿಬಲ್-ಪಾತ್ರವಾಗಿ ಹೊರಹೊಮ್ಮಿತು. ಇದಲ್ಲದೆ, CLI ಅಣುಗಳೊಂದಿಗಿನ ಎಲ್ಲಾ ಸಂವಹನಗಳನ್ನು ಪಾತ್ರದ ಮೂಲದಿಂದ ಮಾಡಲಾಗಿದೆ.

ಪಾತ್ರ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಏನಿದೆ ಎಂದು ನೋಡೋಣ:

> tree molecule/default/
molecule/default/
├── Dockerfile.j2  # Jinja-шаблон для Dockerfile
├── INSTALL.rst.   # Немного информации об установке зависимостей сценария
├── molecule.yml   # Файл конфигурации
├── playbook.yml   # Плейбук запуска роли
└── tests          # Директория с тестами стадии verify
    └── test_default.py

1 directory, 6 files

ಸಂರಚನೆಯನ್ನು ವಿಶ್ಲೇಷಿಸೋಣ molecule/default/molecule.yml (ಡಾಕರ್ ಚಿತ್ರವನ್ನು ಮಾತ್ರ ಬದಲಾಯಿಸಿ):

---
dependency:
  name: galaxy
driver:
  name: docker
lint:
  name: yamllint
platforms:
  - name: instance
    image: centos:7
provisioner:
  name: ansible
  lint:
    name: ansible-lint
scenario:
  name: default
verifier:
  name: testinfra
  lint:
    name: flake8

ಅವಲಂಬನೆ

ಈ ವಿಭಾಗವು ಅವಲಂಬನೆಗಳ ಮೂಲವನ್ನು ವಿವರಿಸುತ್ತದೆ.

ಸಂಭಾವ್ಯ ಆಯ್ಕೆಗಳು: ಗ್ಯಾಲಕ್ಸಿ, ಗಿಲ್ಟ್, ಶೆಲ್.

ಶೆಲ್ ಕೇವಲ ಕಮಾಂಡ್ ಶೆಲ್ ಆಗಿದ್ದು, ಗ್ಯಾಲಕ್ಸಿ ಮತ್ತು ಗಿಲ್ಟ್ ನಿಮ್ಮ ಅಗತ್ಯಗಳನ್ನು ಪೂರೈಸದಿದ್ದರೆ ಅದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.

ನಾನು ಇಲ್ಲಿ ದೀರ್ಘಕಾಲ ವಾಸಿಸುವುದಿಲ್ಲ, ಅದನ್ನು ವಿವರಿಸಿದರೆ ಸಾಕು ದಸ್ತಾವೇಜನ್ನು.

ಚಾಲಕ

ಚಾಲಕನ ಹೆಸರು. ನಮ್ಮದು ಡಾಕರ್.

ಲಿಂಟ್

ಲಿಂಟರ್ ಯಾಮ್ಲಿಂಟ್ ಆಗಿದೆ.

ಸಂರಚನೆಯ ಈ ಭಾಗದಲ್ಲಿ ಉಪಯುಕ್ತ ಆಯ್ಕೆಗಳೆಂದರೆ yamllint, ಫಾರ್ವರ್ಡ್ ಎನ್ವಿರಾನ್ಮೆಂಟ್ ವೇರಿಯೇಬಲ್‌ಗಳಿಗಾಗಿ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಸಾಮರ್ಥ್ಯ ಅಥವಾ ಲಿಂಟರ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದು:

lint:
  name: yamllint
  options:
    config-file: foo/bar
  env:
    FOO: bar
  enabled: False

ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳು

ನಿದರ್ಶನಗಳ ಸಂರಚನೆಯನ್ನು ವಿವರಿಸುತ್ತದೆ.
ಚಾಲಕನಾಗಿ ಡಾಕರ್‌ನ ಸಂದರ್ಭದಲ್ಲಿ, ಅಣುವನ್ನು ಈ ವಿಭಾಗದ ಮೇಲೆ ಪುನರಾವರ್ತಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಪಟ್ಟಿಯ ಪ್ರತಿಯೊಂದು ಅಂಶವು ಇದರಲ್ಲಿ ಲಭ್ಯವಿದೆ Dockerfile.j2 ವೇರಿಯಬಲ್ ಆಗಿ item.

ಅಗತ್ಯವಿರುವ ಚಾಲಕನ ಸಂದರ್ಭದಲ್ಲಿ create.yml и destroy.yml, ವಿಭಾಗವು ಅವುಗಳಲ್ಲಿ ಲಭ್ಯವಿದೆ molecule_yml.platforms, ಮತ್ತು ಅದರ ಮೇಲಿನ ಪುನರಾವರ್ತನೆಗಳನ್ನು ಈಗಾಗಲೇ ಈ ಫೈಲ್‌ಗಳಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ.

ಮಾಲಿಕ್ಯೂಲ್ ಅನ್ಸಿಬಲ್ ಮಾಡ್ಯೂಲ್‌ಗಳಿಗೆ ನಿದರ್ಶನಗಳ ನಿಯಂತ್ರಣವನ್ನು ಒದಗಿಸುವುದರಿಂದ, ಸಂಭವನೀಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಸಹ ಅಲ್ಲಿ ನೋಡಬೇಕು. ಡಾಕರ್ಗಾಗಿ, ಉದಾಹರಣೆಗೆ, ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಡಾಕರ್_ಕಂಟೇನರ್_ಮಾಡ್ಯೂಲ್. ಇತರ ಡ್ರೈವರ್‌ಗಳಲ್ಲಿ ಯಾವ ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಬಳಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಕಾಣಬಹುದು ದಸ್ತಾವೇಜನ್ನು.

ವಿವಿಧ ಡ್ರೈವರ್‌ಗಳ ಬಳಕೆಯ ಉದಾಹರಣೆಗಳನ್ನು ಕಾಣಬಹುದು ಅಣುವಿನ ಪರೀಕ್ಷೆಗಳಲ್ಲಿ.

ಇಲ್ಲಿ ಬದಲಾಯಿಸಿ ಸೆಂಟೋಸ್:7 ಮೇಲೆ ಉಬುಂಟು.

ಒದಗಿಸುವವರು

"ಪೂರೈಕೆದಾರ" - ನಿದರ್ಶನಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಒಂದು ಘಟಕ. ಅಣುವಿನ ಸಂದರ್ಭದಲ್ಲಿ, ಇದು ಅನ್ಸಿಬಲ್ ಆಗಿದೆ, ಇತರರಿಗೆ ಬೆಂಬಲವನ್ನು ಯೋಜಿಸಲಾಗಿಲ್ಲ, ಆದ್ದರಿಂದ ಈ ವಿಭಾಗವನ್ನು ಎಚ್ಚರಿಕೆಯೊಂದಿಗೆ ಅನ್ಸಿಬಲ್ ವಿಸ್ತೃತ ಸಂರಚನೆ ಎಂದು ಕರೆಯಬಹುದು.
ಇಲ್ಲಿ ನೀವು ಬಹಳಷ್ಟು ವಿಷಯಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು, ನನ್ನ ಅಭಿಪ್ರಾಯದಲ್ಲಿ ನಾನು ಮುಖ್ಯ ಅಂಶಗಳನ್ನು ಹೈಲೈಟ್ ಮಾಡುತ್ತೇನೆ:

  • ಆಟದ ಪುಸ್ತಕಗಳು: ನಿರ್ದಿಷ್ಟ ಹಂತಗಳಲ್ಲಿ ಯಾವ ಪ್ಲೇಬುಕ್‌ಗಳನ್ನು ಬಳಸಬೇಕೆಂದು ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು.

provisioner:
  name: ansible
  playbooks:
    create: create.yml
    destroy: ../default/destroy.yml
    converge: playbook.yml
    side_effect: side_effect.yml
    cleanup: cleanup.yml

provisioner:
  name: ansible
  config_options:
    defaults:
      fact_caching: jsonfile
    ssh_connection:
      scp_if_ssh: True

  • ಸಂಪರ್ಕ_ಆಯ್ಕೆಗಳು: ಆಯ್ಕೆಗಳು ಸಂಪರ್ಕ

provisioner:
  name: ansible  
  connection_options:
    ansible_ssh_common_args: "-o 'UserKnownHostsFile=/dev/null' -o 'ForwardAgent=yes'"

  • ಆಯ್ಕೆಗಳನ್ನು: ಅನ್ಸಿಬಲ್ ಆಯ್ಕೆಗಳು ಮತ್ತು ಪರಿಸರ ಅಸ್ಥಿರಗಳು

provisioner:
  name: ansible  
  options:
    vvv: true
    diff: true
  env:
    FOO: BAR

ಸನ್ನಿವೇಶದಲ್ಲಿ

ಸ್ಕ್ರಿಪ್ಟ್ ಅನುಕ್ರಮಗಳ ಹೆಸರು ಮತ್ತು ವಿವರಣೆ.
ಕೀಲಿಯನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ನೀವು ಯಾವುದೇ ಆಜ್ಞೆಯ ಡೀಫಾಲ್ಟ್ ಆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು <command>_sequence ಮತ್ತು ನಮಗೆ ಅಗತ್ಯವಿರುವ ಹಂತಗಳ ಪಟ್ಟಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ಮೂಲಕ ಅದರ ಮೌಲ್ಯವಾಗಿ.
ಪ್ಲೇಬುಕ್ ರನ್ ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸುವಾಗ ನಾವು ಕ್ರಮಗಳ ಅನುಕ್ರಮವನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸುತ್ತೇವೆ ಎಂದು ಹೇಳೋಣ: molecule converge

# изначально:
# - dependency
# - create
# - prepare
# - converge
scenario:
  name: default
  converge_sequence:
    - create
    - converge

ಪರಿಶೀಲಿಸಿ

ಪರೀಕ್ಷೆಗಳಿಗೆ ಚೌಕಟ್ಟನ್ನು ಹೊಂದಿಸುವುದು ಮತ್ತು ಅದಕ್ಕೆ ಒಂದು ಲಿಂಟರ್. ಡೀಫಾಲ್ಟ್ ಲಿಂಟರ್ ಆಗಿದೆ testinfra и flake8. ಸಂಭವನೀಯ ಆಯ್ಕೆಗಳು ಮೇಲಿನಂತೆಯೇ ಇರುತ್ತವೆ:

verifier:
  name: testinfra
  additional_files_or_dirs:
    - ../path/to/test_1.py
    - ../path/to/test_2.py
    - ../path/to/directory/*
  options:
    n: 1
  enabled: False
  env:
    FOO: bar
  lint:
    name: flake8
    options:
      benchmark: True
    enabled: False
    env:
      FOO: bar

ನಮ್ಮ ಪಾತ್ರಕ್ಕೆ ಹಿಂತಿರುಗಿ ನೋಡೋಣ. ಫೈಲ್ ಅನ್ನು ಸಂಪಾದಿಸೋಣ tasks/main.yml ಈ ಪ್ರಕಾರಕ್ಕೆ:

---
- name: Install nginx
  apt:
    name: nginx
    state: present

- name: Start nginx
  service:
    name: nginx
    state: started

ಮತ್ತು ಪರೀಕ್ಷೆಗಳನ್ನು ಸೇರಿಸಿ molecule/default/tests/test_default.py

def test_nginx_is_installed(host):
    nginx = host.package("nginx")
    assert nginx.is_installed

def test_nginx_running_and_enabled(host):
    nginx = host.service("nginx")
    assert nginx.is_running
    assert nginx.is_enabled

def test_nginx_config(host):
    host.run("nginx -t")

ಮುಗಿದಿದೆ, ಇದು ಓಡಲು ಮಾತ್ರ ಉಳಿದಿದೆ (ಪಾತ್ರದ ಮೂಲದಿಂದ, ನಾನು ನಿಮಗೆ ನೆನಪಿಸುತ್ತೇನೆ):

> molecule test

ಸ್ಪಾಯ್ಲರ್ ಅಡಿಯಲ್ಲಿ ದೀರ್ಘ ನಿಷ್ಕಾಸ:

--> Validating schema <path>/nginx/molecule/default/molecule.yml.
Validation completed successfully.
--> Test matrix

└── default
    ├── lint
    ├── destroy
    ├── dependency
    ├── syntax
    ├── create
    ├── prepare
    ├── converge
    ├── idempotence
    ├── side_effect
    ├── verify
    └── destroy

--> Scenario: 'default'
--> Action: 'lint'
--> Executing Yamllint on files found in <path>/nginx/...
Lint completed successfully.
--> Executing Flake8 on files found in <path>/nginx/molecule/default/tests/...
Lint completed successfully.
--> Executing Ansible Lint on <path>/nginx/molecule/default/playbook.yml...
Lint completed successfully.
--> Scenario: 'default'
--> Action: 'destroy'

    PLAY [Destroy] *****************************************************************

    TASK [Destroy molecule instance(s)] ********************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Wait for instance(s) deletion to complete] *******************************
    ok: [localhost] => (item=None)
    ok: [localhost]

    TASK [Delete docker network(s)] ************************************************

    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0

--> Scenario: 'default'
--> Action: 'dependency'
Skipping, missing the requirements file.
--> Scenario: 'default'
--> Action: 'syntax'

    playbook: <path>/nginx/molecule/default/playbook.yml

--> Scenario: 'default'
--> Action: 'create'

    PLAY [Create] ******************************************************************

    TASK [Log into a Docker registry] **********************************************
    skipping: [localhost] => (item=None)

    TASK [Create Dockerfiles from image names] *************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Discover local Docker images] ********************************************
    ok: [localhost] => (item=None)
    ok: [localhost]

    TASK [Build an Ansible compatible image] ***************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Create docker network(s)] ************************************************

    TASK [Create molecule instance(s)] *********************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Wait for instance(s) creation to complete] *******************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    PLAY RECAP *********************************************************************
    localhost                  : ok=5    changed=4    unreachable=0    failed=0

--> Scenario: 'default'
--> Action: 'prepare'
Skipping, prepare playbook not configured.
--> Scenario: 'default'
--> Action: 'converge'

    PLAY [Converge] ****************************************************************

    TASK [Gathering Facts] *********************************************************
    ok: [instance]

    TASK [nginx : Install nginx] ***************************************************
    changed: [instance]

    TASK [nginx : Start nginx] *****************************************************
    changed: [instance]

    PLAY RECAP *********************************************************************
    instance                   : ok=3    changed=2    unreachable=0    failed=0

--> Scenario: 'default'
--> Action: 'idempotence'
Idempotence completed successfully.
--> Scenario: 'default'
--> Action: 'side_effect'
Skipping, side effect playbook not configured.
--> Scenario: 'default'
--> Action: 'verify'
--> Executing Testinfra tests found in <path>/nginx/molecule/default/tests/...
    ============================= test session starts ==============================
    platform darwin -- Python 2.7.15, pytest-4.3.0, py-1.8.0, pluggy-0.9.0
    rootdir: <path>/nginx/molecule/default, inifile:
    plugins: testinfra-1.16.0
collected 4 items

    tests/test_default.py ....                                               [100%]

    ========================== 4 passed in 27.23 seconds ===========================
Verifier completed successfully.
--> Scenario: 'default'
--> Action: 'destroy'

    PLAY [Destroy] *****************************************************************

    TASK [Destroy molecule instance(s)] ********************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Wait for instance(s) deletion to complete] *******************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Delete docker network(s)] ************************************************

    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=2    unreachable=0    failed=0

ನಮ್ಮ ಸರಳ ಪಾತ್ರವನ್ನು ಸಮಸ್ಯೆಗಳಿಲ್ಲದೆ ಪರೀಕ್ಷಿಸಲಾಯಿತು.
ಕೆಲಸದ ಸಮಯದಲ್ಲಿ ಸಮಸ್ಯೆಗಳಿದ್ದರೆ ಅದನ್ನು ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊಳ್ಳುವುದು ಯೋಗ್ಯವಾಗಿದೆ molecule test, ನಂತರ ನೀವು ಡೀಫಾಲ್ಟ್ ಅನುಕ್ರಮವನ್ನು ಬದಲಾಯಿಸದಿದ್ದರೆ, ಮಾಲಿಕ್ಯೂಲ್ ನಿದರ್ಶನವನ್ನು ಅಳಿಸುತ್ತದೆ.

ಡೀಬಗ್ ಮಾಡಲು ಈ ಕೆಳಗಿನ ಆಜ್ಞೆಗಳು ಉಪಯುಕ್ತವಾಗಿವೆ:

> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge          # Оставляет инстанс после прогона тестируемой роли.
> molecule login             # Зайти в созданный инстанс.
> molecule --help            # Полный список команд.

ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪಾತ್ರ

ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪಾತ್ರಕ್ಕೆ ಹೊಸ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಸೇರಿಸುವುದು ಪಾತ್ರ ಡೈರೆಕ್ಟರಿಯಿಂದ ಕೆಳಗಿನ ಆಜ್ಞೆಗಳೊಂದಿಗೆ:

# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>

ಒಂದು ವೇಳೆ ಇದು ಪಾತ್ರದಲ್ಲಿನ ಮೊದಲ ಸನ್ನಿವೇಶವಾಗಿದ್ದರೆ, ನಂತರ ಪ್ಯಾರಾಮೀಟರ್ -s ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರಚಿಸುವುದರಿಂದ ಅದನ್ನು ಬಿಟ್ಟುಬಿಡಬಹುದು default.

ತೀರ್ಮಾನಕ್ಕೆ

ನೀವು ನೋಡುವಂತೆ, ಅಣುವು ತುಂಬಾ ಸಂಕೀರ್ಣವಾಗಿಲ್ಲ, ಮತ್ತು ನಿಮ್ಮ ಸ್ವಂತ ಟೆಂಪ್ಲೇಟ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು, ಹೊಸ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ನಿಯೋಜಿಸುವುದನ್ನು ನಿದರ್ಶನ ರಚನೆ ಮತ್ತು ಪ್ಲೇಬುಕ್‌ಗಳಲ್ಲಿ ಅಸ್ಥಿರಗಳನ್ನು ಸಂಪಾದಿಸಲು ಕಡಿಮೆ ಮಾಡಬಹುದು. ಅಣುವು CI ಸಿಸ್ಟಮ್‌ಗಳೊಂದಿಗೆ ಮನಬಂದಂತೆ ಸಂಯೋಜಿಸುತ್ತದೆ, ಇದು ಪ್ಲೇಬುಕ್‌ಗಳ ಹಸ್ತಚಾಲಿತ ಪರೀಕ್ಷೆಯ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡುವ ಮೂಲಕ ಅಭಿವೃದ್ಧಿಯ ವೇಗವನ್ನು ಹೆಚ್ಚಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.

ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಧನ್ಯವಾದಗಳು. ನೀವು ಅನ್ಸಿಬಲ್ ಪಾತ್ರಗಳನ್ನು ಪರೀಕ್ಷಿಸುವಲ್ಲಿ ಅನುಭವವನ್ನು ಹೊಂದಿದ್ದರೆ ಮತ್ತು ಅದು ಅಣುವಿಗೆ ಸಂಬಂಧಿಸದಿದ್ದರೆ, ಅದರ ಬಗ್ಗೆ ಕಾಮೆಂಟ್‌ಗಳಲ್ಲಿ ನಮಗೆ ತಿಳಿಸಿ!

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ