Python SDK-āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ API-āϕ⧇ āϏāϰāϞ⧀āĻ•āϰāĻŖ āĻ•āϰāĻž

Python SDK-āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ API-āϕ⧇ āϏāϰāϞ⧀āĻ•āϰāĻŖ āĻ•āϰāĻžAPI-āĻāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻžāϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻļāĻ•ā§āϤāĻŋ āϝāĻ–āύ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āϕ⧋āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ āϤāĻ–āύ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ, āϝāĻ–āύ API āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāĻļā§āϞ⧇āώāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻ—āϤāĻŋāĻļā§€āϞāĻ­āĻžāĻŦ⧇ API āĻ…āύ⧁āϰ⧋āϧ āĻāĻŦāĻ‚ āϏāϰāĻžā§āϜāĻžāĻŽāϗ⧁āϞāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻšāϝāĻŧāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻāϟāĻŋ āĻāĻ–āύāĻ“ āĻ…āϞāĻ•ā§āώāĻŋāϤ āĻĨ⧇āϕ⧇ āϝāĻžāϝāĻŧ āĻĒāĻžāχāĻĨāύ āϏāĻĢāϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻ•āĻŋāϟ (āĻāϰ āĻĒāϰ⧇ āĻĒāĻžāχāĻĨāύ SDK āĻšāĻŋāϏāĻžāĻŦ⧇ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇) āĻāϰ āϜāĻ¨ā§āϝ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ API āĻšā§‡āĻ• āĻ•āϰ⧁āύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāĻŋāϰāĻ°ā§āĻĨāĻ•. āĻāϟāĻŋ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀ āĻāĻŦāĻ‚ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āωāĻ¤ā§āϏāĻžāĻšā§€āĻĻ⧇āϰ āĻœā§€āĻŦāύāϕ⧇ āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤ āĻĒāĻžāχāĻĨāύ āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āĻĒā§āϰāϚ⧁āϰ āϜāύāĻĒā§āϰāĻŋāϝāĻŧāϤāĻž āĻ…āĻ°ā§āϜāύ āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āφāĻŽāĻŋ āĻļā§‚āĻ¨ā§āϝāĻ¸ā§āĻĨāĻžāύ āĻĒā§‚āϰāĻŖ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āĻĒā§āϰāϧāĻžāύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻāĻĒāĻŋāφāχ āĻĒāĻžāχāĻĨāύ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻ•āĻŋāϟ āĻšā§‡āĻ• āĻ•āϰ⧁āύ. āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ HabrÊ-āĻāϰ āωāĻĒāϰ āφāϰ⧇āĻ•āϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧ⧇ āĻāĻ•āϟāĻŋ āϚāĻŽā§ŽāĻ•āĻžāϰ āϏāĻ‚āϝ⧋āϜāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ R80.10 API āĻšā§‡āĻ• āĻ•āϰ⧁āύāĨ¤ CLI, āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻāĻŦāĻ‚ āφāϰāĻ“ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĻĒāύāĻž. āφāĻŽāϰāĻž āĻĒāĻžāχāĻĨāύ SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧ āϤāĻž āĻĻ⧇āĻ–āĻŦ āĻāĻŦāĻ‚ 1.6 āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ (R80.40 āĻĨ⧇āϕ⧇ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ) āύāϤ⧁āύ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ API āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻžāϟāĻŋ āϘāύāĻŋāĻˇā§āĻ āĻ­āĻžāĻŦ⧇ āĻĻ⧇āĻ–āĻŦāĨ¤ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻŦ⧁āĻāϤ⧇, āφāĻĒāύāĻžāϰ API āĻāĻŦāĻ‚ āĻĒāĻžāχāĻĨāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻœā§āĻžāĻžāύ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤

āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ API āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āϰāϛ⧇ āĻāĻŦāĻ‚ āĻāχ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤāϗ⧁āϞāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇:

Python SDK āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āĻāĻĒāĻŋāφāχ āĻāĻŦāĻ‚ āĻāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ Gaia API. āφāĻŽāϰāĻž āĻāχ āĻŽāĻĄāĻŋāωāϞ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•ā§āϞāĻžāϏ, āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻŦāĻ‚ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĻ⧇āĻ–āĻŦāĨ¤

Python SDK-āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ API-āϕ⧇ āϏāϰāϞ⧀āĻ•āϰāĻŖ āĻ•āϰāĻž

āĻŽāĻĄāĻŋāωāϞ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻŽāĻĄāĻŋāωāϞ cpapi āĻĨ⧇āϕ⧇ āĻĻā§āϰ⧁āϤ āĻāĻŦāĻ‚ āϏāĻšāĻœā§‡ āχāύāĻ¸ā§āϟāϞ āĻ•āϰ⧇ āĻ—āĻŋāĻĨ⧁āĻŦ⧇ āĻ…āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻŦā§€āϚāĻŋ. āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ README.md. āĻāχ āĻŽāĻĄāĻŋāωāϞāϟāĻŋ āĻĒāĻžāχāĻĨāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ 2.7 āĻāĻŦāĻ‚ 3.7 āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻ­āĻŋāϝ⧋āϜāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇, āĻĒāĻžāχāĻĨāύ 3.7 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāĻŦ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, Python SDK āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ (āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ) āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āϚāĻžāϞāĻžāύ⧋ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāϰāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ Python 2.7 āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇, āϤāĻžāχ āĻļ⧇āώ āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ 2.7 āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϕ⧋āĻĄ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻŦ⧇āĨ¤ āĻŽāĻĄāĻŋāωāϞ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇, āφāĻŽāĻŋ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϰ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋ āĻĻ⧇āĻ–āĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāχ āωāĻĻāĻžāĻšāϰāĻŖ_āĻĒāĻžāχāĻĨāύ⧍ и āωāĻĻāĻžāĻšāϰāĻŖ_āĻĒāĻžāχāĻĨāύ⧍.

āϗ⧇āϟāĻŋāĻ‚ āĻ¸ā§āϟāĻžāĻ°ā§āĻŸā§‡āĻĄ

cpapi āĻŽāĻĄāĻŋāωāϞ⧇āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāĻĄāĻŋāωāϞ āĻĨ⧇āϕ⧇ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ cpapi āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āĻĻ⧁āϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•ā§āϞāĻžāϏ:

APIClient и APIClientArgs

from cpapi import APIClient, APIClientArgs

КĐģĐ°ŅŅ APIClientArgs API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻĻāĻžāϝāĻŧā§€ APIClient API āĻāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĻāĻžāϝāĻŧā§€āĨ¤

āϏāĻ‚āϝ⧋āĻ— āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ

API āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ APIClientArgs. āύ⧀āϤāĻŋāĻ—āϤāĻ­āĻžāĻŦ⧇, āĻāϰ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāϗ⧁āϞāĻŋ āĻĒā§‚āĻ°ā§āĻŦāύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻāĻŦāĻ‚ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ, āϤāĻžāĻĻ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχāĨ¤

client_args = APIClientArgs()

āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤ⧃āϤ⧀āϝāĻŧ āĻĒāĻ•ā§āώ⧇āϰ āĻšā§‹āĻ¸ā§āĻŸā§‡ āϚāϞāĻžāĻ•āĻžāϞ⧀āύ, āφāĻĒāύāĻžāϕ⧇ āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ IP āĻ āĻŋāĻ•āĻžāύāĻž āĻŦāĻž API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻšā§‹āĻ¸ā§āϟ āύāĻžāĻŽ (āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ āύāĻžāĻŽā§‡āĻ“ āĻĒāϰāĻŋāϚāĻŋāϤ) āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āύ⧀āĻšā§‡āϰ āωāĻĻāĻžāĻšāϰāϪ⧇, āφāĻŽāϰāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻ‚āϝ⧋āĻ— āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĻĒāύāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ IP āĻ āĻŋāĻ•āĻžāύāĻž āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻŋāĨ¤

client_args = APIClientArgs(server='192.168.47.241')

āĻāĻĒāĻŋāφāχ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŽāĻžāύāϗ⧁āϞāĻŋ āĻĻ⧇āϖ⧁āύ:

APIClientArgs āĻ•ā§āϞāĻžāϏ⧇āϰ __init__ āĻĒāĻĻā§āϧāϤāĻŋāϰ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ

class APIClientArgs:
    """
    This class provides arguments for APIClient configuration.
    All the arguments are configured with their default values.
    """

    # port is set to None by default, but it gets replaced with 443 if not specified
    # context possible values - web_api (default) or gaia_api
    def __init__(self, port=None, fingerprint=None, sid=None, server="127.0.0.1", http_debug_level=0,
                 api_calls=None, debug_file="", proxy_host=None, proxy_port=8080,
                 api_version=None, unsafe=False, unsafe_auto_accept=False, context="web_api"):
        self.port = port
        # management server fingerprint
        self.fingerprint = fingerprint
        # session-id.
        self.sid = sid
        # management server name or IP-address
        self.server = server
        # debug level
        self.http_debug_level = http_debug_level
        # an array with all the api calls (for debug purposes)
        self.api_calls = api_calls if api_calls else []
        # name of debug file. If left empty, debug data will not be saved to disk.
        self.debug_file = debug_file
        # HTTP proxy server address (without "http://")
        self.proxy_host = proxy_host
        # HTTP proxy port
        self.proxy_port = proxy_port
        # Management server's API version
        self.api_version = api_version
        # Indicates that the client should not check the server's certificate
        self.unsafe = unsafe
        # Indicates that the client should automatically accept and save the server's certificate
        self.unsafe_auto_accept = unsafe_auto_accept
        # The context of using the client - defaults to web_api
        self.context = context

āφāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāĻŋ āϝ⧇ APIClientArgs āĻ•ā§āϞāĻžāϏ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āϝ⧁āĻ•ā§āϤāĻŋāϗ⧁āϞāĻŋ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύāĻŋāĻ¸ā§āĻŸā§āϰ⧇āϟāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŦāĻœā§āĻžāĻžāϤ āĻāĻŦāĻ‚ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŽāĻ¨ā§āϤāĻŦā§āϝ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ⧎

APIClient āĻāĻŦāĻ‚ āĻĒā§āϰāϏāĻ™ā§āĻ— āĻĒāϰāĻŋāϚāĻžāϞāϕ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

КĐģĐ°ŅŅ APIClient āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āωāĻĒāĻžāϝāĻŧ āĻšāϞ āĻĒā§āϰāϏāĻ™ā§āĻ— āĻĒāϰāĻŋāϚāĻžāϞāϕ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡āĨ¤ APIClient āĻ•ā§āϞāĻžāϏ⧇āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāϪ⧇ āϝāĻž āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻšāϞ āϏāĻ‚āϝ⧋āĻ— āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϝāĻž āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

with APIClient(client_args) as client:

āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻāĻ•āϟāĻŋ āϞāĻ—āχāύ āĻ•āϞ āĻ•āϰāĻŦ⧇ āύāĻž, āϤāĻŦ⧇ āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻ¸ā§āĻĨāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϞāĻ—āφāωāϟ āĻ•āϞ āĻ•āϰāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ•āĻžāϰāϪ⧇ API āĻ•āϞāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻļ⧇āώ āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āϞāĻ—āφāωāĻŸā§‡āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāϏāĻ™ā§āĻ— āĻĒāϰāĻŋāϚāĻžāϞāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰ⧇āχ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

client = APIClient(clieng_args)

āϏāĻ‚āϝ⧋āĻ— āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āϏāĻ‚āϝ⧋āĻ—āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§‡āĻ•_āφāĻ™ā§āϗ⧁āϞ⧇āϰ āĻ›āĻžāĻĒ. āϏāĻžāĻ°ā§āĻ­āĻžāϰ API āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ⧇āϰ āφāĻ™ā§āϗ⧁āϞ⧇āϰ āĻ›āĻžāĻĒ⧇āϰ āϜāĻ¨ā§āϝ sha1 āĻšā§āϝāĻžāĻļ āϏāĻŽāĻˇā§āϟāĻŋāϰ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ (āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻŽāĻŋāĻĨā§āϝāĻž), āϤāĻžāĻšāϞ⧇ āĻāϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻ‚āϝ⧋āĻ— āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ•āĻžāϰāϪ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋāϰ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ (āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻ‚āϝ⧋āĻ— āĻĄā§‡āϟāĻž āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰāĻŋ):

    if client.check_fingerprint() is False:
        print("Could not get the server's fingerprint - Check connectivity with the server.")
        exit(1)

āĻĻāϝāĻŧāĻž āĻ•āϰ⧇ āύ⧋āϟ āĻ•āϰ⧁āύ āϝ⧇ āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇ āĻ•ā§āϞāĻžāϏ APIClient āĻĒā§āϰāϤāĻŋāϟāĻŋ API āĻ•āϞ āĻšā§‡āĻ• āĻ•āϰāĻŦ⧇ (āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻĒāĻŋāφāχ_āĻ•āϞ и api_query, āφāĻŽāϰāĻž āϤāĻžāĻĻ⧇āϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻ•āĻŋāϛ⧁ āĻ•āĻĨāĻž āĻŦāϞāĻŦ) API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ sha1 āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝāĻĻāĻŋ, API āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻžāĻ°ā§āϟāĻŋāĻĢāĻŋāϕ⧇āĻŸā§‡āϰ sha1 āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻšā§‡āĻ• āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāĻž āĻšāϝāĻŧ (āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϟāĻŋ āĻ…āϜāĻžāύāĻž āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇), āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻšā§‡āĻ•_āφāĻ™ā§āϗ⧁āϞ⧇āϰ āĻ›āĻžāĻĒ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻŽā§‡āĻļāĻŋāύ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āϝ⧋āĻ—/āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻŦ⧇āĨ¤ āĻāχ āĻšā§‡āĻ•āϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ (āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻ–āύāχ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻĻāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϗ⧁āϞāĻŋ API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϚāĻžāϞāĻžāύ⧋ āĻšāϝāĻŧ, āϝāĻ–āύ 127.0.0.1-āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ), APIClientArgs āϝ⧁āĻ•ā§āϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ - unsafe_auto_accept (APIClientArgs āϏāĻŽā§āĻŦāĻ¨ā§āϧ⧇ āφāϰāĻ“ āĻĻ⧇āϖ⧁āύ āφāϗ⧇ "āϏāĻ‚āϝ⧋āϗ⧇āϰ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž" āĻ)āĨ¤

client_args = APIClientArgs(unsafe_auto_accept=True)

API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϞāĻ—āχāύ āĻ•āϰ⧁āύ

ĐŖ APIClient API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϞāĻ— āχāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ 3āϟāĻŋāϰ āĻŽāϤ⧋ āĻĒāĻĻā§āϧāϤāĻŋ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āϟāĻŋ āĻ…āĻ°ā§āĻĨ āĻŦā§‹āĻā§‡ āϏāĻŋāĻĻ(āϏ⧇āĻļāύ-āφāχāĻĄāĻŋ), āϝāĻž āĻšā§‡āĻĄāĻžāϰ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ API āĻ•āϞ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ (āĻāχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇āϰ āĻšā§‡āĻĄāĻžāϰ⧇ āύāĻžāĻŽ X-chkp-sid), āϤāĻžāχ āĻāχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϟāĻŋ āφāϰāĻ“ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻžāϰ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχāĨ¤

āϞāĻ—āχāύ āĻĒāĻĻā§āϧāϤāĻŋ

āϞāĻ—āχāύ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ 1q2w3e āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύāĻ—āϤ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇):

     login = client.login('admin', '1q2w3e')  

āϞāĻ—āχāύ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϐāĻšā§āĻ›āĻŋāĻ• āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϗ⧁āϞāĻŋāĻ“ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ; āĻāĻ–āĻžāύ⧇ āϤāĻžāĻĻ⧇āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŽāĻžāύ āϰāϝāĻŧ⧇āϛ⧇:

continue_last_session=False, domain=None, read_only=False, payload=None

āĻŽā§‡āĻĨāĻĄ āϞāĻ—āχāύ_with_api_key

āĻāĻ•āϟāĻŋ api āϕ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ (āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ R80.40/Management API v1.6 āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ, "3TsbPJ8ZKjaJGvFyoFqHFA==" āĻāϟāĻŋ API āϕ⧀ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻš āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĻĒāύāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ•āϜāύ⧇āϰ āϜāĻ¨ā§āϝ API āϕ⧀ āĻŽāĻžāύ:

     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') 

āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ api_key āĻĻāĻŋāϝāĻŧ⧇ āϞāĻ—āχāύ āĻ•āϰ⧁āύ āĻāĻ•āχ āϐāĻšā§āĻ›āĻŋāĻ• āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āωāĻĒāϞāĻŦā§āϧ āϞāĻ—āχāύ.

login_as_root āĻĒāĻĻā§āϧāϤāĻŋ

āĻāĻ•āϟāĻŋ API āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻŽā§‡āĻļāĻŋāύ⧇ āϞāĻ—āχāύ āĻ•āϰāĻžāϰ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ:

     login = client.login_as_root()

āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϜāĻ¨ā§āϝ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧁āϟāĻŋ āϐāĻšā§āĻ›āĻŋāĻ• āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āωāĻĒāϞāĻŦā§āϧ āφāϛ⧇:

domain=None, payload=None

āĻāĻŦāĻ‚ āĻ…āĻŦāĻļ⧇āώ⧇ API āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻ•āϞ

āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ API āĻ•āϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āĻĻ⧁āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻĒāĻŋāφāχ_āĻ•āϞ и api_query. āφāϏ⧁āύ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ āϤāĻž āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāĻž āϝāĻžāĻ•āĨ¤

āĻāĻĒāĻŋāφāχ_āĻ•āϞ

āĻāχ āĻĒāĻĻā§āϧāϤāĻŋ āϝ⧇āϕ⧋āύ⧋ āĻ•āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝ⧋āĻœā§āϝāĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻĒāĻŋāφāχ āĻ•āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻļ⧇āώ āĻ…āĻ‚āĻļāϟāĻŋ āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻŦāĻĄāĻŋāϤ⧇ āĻĒ⧇āϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āĻĒ⧇āϞ⧋āĻĄ āĻ–āĻžāϞāĻŋ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āĻāϟāĻŋ āĻŽā§‹āĻŸā§‡āĻ“ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻž:

api_versions = client.api_call('show-api-versions') 

āĻ•āĻžāϟāĻž āύ⧀āĻšā§‡ āĻāχ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āφāωāϟāĻĒ⧁āϟ:

In [23]: api_versions                                                           
Out[23]: 
APIResponse({
    "data": {
        "current-version": "1.6",
        "supported-versions": [
            "1",
            "1.1",
            "1.2",
            "1.3",
            "1.4",
            "1.5",
            "1.6"
        ]
    },
    "res_obj": {
        "data": {
            "current-version": "1.6",
            "supported-versions": [
                "1",
                "1.1",
                "1.2",
                "1.3",
                "1.4",
                "1.5",
                "1.6"
            ]
        },
        "status_code": 200
    },
    "status_code": 200,
    "success": true
})
show_host = client.api_call('show-host', {'name' : 'h_8.8.8.8'})

āĻ•āĻžāϟāĻž āύ⧀āĻšā§‡ āĻāχ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āφāωāϟāĻĒ⧁āϟ:

In [25]: show_host                                                              
Out[25]: 
APIResponse({
    "data": {
        "color": "black",
        "comments": "",
        "domain": {
            "domain-type": "domain",
            "name": "SMC User",
            "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
        },
        "groups": [],
        "icon": "Objects/host",
        "interfaces": [],
        "ipv4-address": "8.8.8.8",
        "meta-info": {
            "creation-time": {
                "iso-8601": "2020-05-01T21:49+0300",
                "posix": 1588358973517
            },
            "creator": "admin",
            "last-modifier": "admin",
            "last-modify-time": {
                "iso-8601": "2020-05-01T21:49+0300",
                "posix": 1588358973517
            },
            "lock": "unlocked",
            "validation-state": "ok"
        },
        "name": "h_8.8.8.8",
        "nat-settings": {
            "auto-rule": false
        },
        "read-only": false,
        "tags": [],
        "type": "host",
        "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
    },
    "res_obj": {
        "data": {
            "color": "black",
            "comments": "",
            "domain": {
                "domain-type": "domain",
                "name": "SMC User",
                "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
            },
            "groups": [],
            "icon": "Objects/host",
            "interfaces": [],
            "ipv4-address": "8.8.8.8",
            "meta-info": {
                "creation-time": {
                    "iso-8601": "2020-05-01T21:49+0300",
                    "posix": 1588358973517
                },
                "creator": "admin",
                "last-modifier": "admin",
                "last-modify-time": {
                    "iso-8601": "2020-05-01T21:49+0300",
                    "posix": 1588358973517
                },
                "lock": "unlocked",
                "validation-state": "ok"
            },
            "name": "h_8.8.8.8",
            "nat-settings": {
                "auto-rule": false
            },
            "read-only": false,
            "tags": [],
            "type": "host",
            "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
        },
        "status_code": 200
    },
    "status_code": 200,
    "success": true
})

api_query

āφāĻŽāĻžāϕ⧇ āĻāĻ–āύāχ āĻāĻ•āϟāĻŋ āϰāĻŋāϜāĻžāĻ°ā§āϭ⧇āĻļāύ āĻ•āϰāϤ⧇ āĻĻāĻŋāύ āϝ⧇ āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏ⧇āχ āĻ•āϞāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝ⧋āĻœā§āϝ āϝāĻžāϰ āφāωāϟāĻĒ⧁āϟ āĻ…āĻĢāϏ⧇āϟ āϜāĻĄāĻŧāĻŋāϤāĨ¤ āĻāχ āϧāϰāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āĻŽāĻžāύ āϘāĻŸā§‡ āϝāĻ–āύ āĻāϤ⧇ āĻĒā§āϰāϚ⧁āϰ āĻĒāϰāĻŋāĻŽāĻžāϪ⧇ āϤāĻĨā§āϝ āĻĨāĻžāϕ⧇ āĻŦāĻž āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāϟāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϏāĻŽāĻ¸ā§āϤ āϤ⧈āϰāĻŋ āĻšā§‹āĻ¸ā§āϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āϧāϰāύ⧇āϰ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ, API āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇ 50āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ (āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϤ⧇ 500 āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āϏ⧀āĻŽāĻž āĻŦāĻžāĻĄāĻŧāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύ)āĨ¤ āĻāĻŦāĻ‚ API āĻ…āύ⧁āϰ⧋āϧ⧇ āĻ…āĻĢāϏ⧇āϟ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āϤāĻĨā§āϝ āϟāĻžāύ āύāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ api_query āĻĒāĻĻā§āϧāϤāĻŋ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻ•āϞ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āϝ⧇āĻ–āĻžāύ⧇ āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ: āĻļā§‹-āϏ⧇āĻļāύ, āĻļā§‹-āĻšā§‹āĻ¸ā§āϟ, āĻļā§‹-āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•, āĻļā§‹-āĻ“āϝāĻŧāĻžāχāĻ˛ā§āĻĄāĻ•āĻžāĻ°ā§āĻĄ, āĻļā§‹-āĻ—ā§āϰ⧁āĻĒ, āĻļā§‹-āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ-āϰ⧇āĻžā§āϜ, āĻļā§‹-āϏāĻŋāĻŽā§āĻĒāϞ-āϗ⧇āϟāĻ“āϝāĻŧ⧇, āĻļā§‹-āϏāĻŋāĻŽā§āĻĒāϞ-āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ, āĻļā§‹-āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ-āϰ⧋āϞāϏ, āĻļā§‹-āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āϤ-āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ, āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ-āĻĒā§āϝāĻžāϕ⧇āϜ. āφāϏāϞ⧇, āφāĻŽāϰāĻž āĻāχ API āĻ•āϞāϗ⧁āϞāĻŋāϰ āύāĻžāĻŽā§‡ āĻŦāĻšā§āĻŦāϚāύ āĻļāĻŦā§āĻĻ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāχ, āϤāĻžāχ āĻāχ āĻ•āϞāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻž āϏāĻšāϜ āĻšāĻŦ⧇ api_query

show_hosts = client.api_query('show-hosts') 

āĻ•āĻžāϟāĻž āύ⧀āĻšā§‡ āĻāχ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āφāωāϟāĻĒ⧁āϟ:

In [21]: show_hosts                                                             
Out[21]: 
APIResponse({
    "data": [
        {
            "domain": {
                "domain-type": "domain",
                "name": "SMC User",
                "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
            },
            "ipv4-address": "192.168.47.1",
            "name": "h_192.168.47.1",
            "type": "host",
            "uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
        },
        {
            "domain": {
                "domain-type": "domain",
                "name": "SMC User",
                "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
            },
            "ipv4-address": "8.8.8.8",
            "name": "h_8.8.8.8",
            "type": "host",
            "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
        }
    ],
    "res_obj": {
        "data": {
            "from": 1,
            "objects": [
                {
                    "domain": {
                        "domain-type": "domain",
                        "name": "SMC User",
                        "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
                    },
                    "ipv4-address": "192.168.47.1",
                    "name": "h_192.168.47.1",
                    "type": "host",
                    "uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
                },
                {
                    "domain": {
                        "domain-type": "domain",
                        "name": "SMC User",
                        "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
                    },
                    "ipv4-address": "8.8.8.8",
                    "name": "h_8.8.8.8",
                    "type": "host",
                    "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
                }
            ],
            "to": 2,
            "total": 2
        },
        "status_code": 200
    },
    "status_code": 200,
    "success": true
})

API āĻ•āϞ⧇āϰ āĻĢāϞāĻžāĻĢāϞ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻāϰ āĻĒāϰ⧇ āφāĻĒāύāĻŋ āĻ•ā§āϞāĻžāϏ⧇āϰ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻāĻŦāĻ‚ āĻĒāĻĻā§āϧāϤāĻŋāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ API āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž(āĻĒā§āϰāϏāĻ™ā§āĻ— āĻĒāϰāĻŋāϚāĻžāϞāϕ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāχāϰ⧇ āωāĻ­āϝāĻŧāχ)āĨ¤ āĻ•ā§āϞāĻžāϏ⧇ API āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž 4āϟāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻŦāĻ‚ 5āϟāĻŋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĒā§‚āĻ°ā§āĻŦāύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ; āφāĻŽāϰāĻž āφāϰāĻ“ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤāĻ­āĻžāĻŦ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻŦāĨ¤

Python SDK-āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ API-āϕ⧇ āϏāϰāϞ⧀āĻ•āϰāĻŖ āĻ•āϰāĻž

āϏāĻžāĻĢāĻ˛ā§āϝ

āĻļ⧁āϰ⧁āϤ⧇, API āĻ•āϞāϟāĻŋ āϏāĻĢāϞ āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻĢāϞāĻžāĻĢāϞ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇ āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āϧāĻžāϰāĻŖāĻž āĻšāĻŦ⧇āĨ¤ āĻāχ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āφāϛ⧇ āϏāĻžāĻĢāĻ˛ā§āϝ:

In [49]: api_versions.success                                                   
Out[49]: True

API āĻ•āϞ āϏāĻĢāϞ āĻšāϞ⧇ āϏāĻ¤ā§āϝ (āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄ - 200) āĻāĻŦāĻ‚ āϏāĻĢāϞ āύāĻž āĻšāϞ⧇ āĻŽāĻŋāĻĨā§āϝāĻž (āĻ…āĻ¨ā§āϝ āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄ) āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϤāĻĨā§āϝ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ API āĻ•āϞ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ•āĨ¤

if api_ver.success: 
    print(api_versions.data) 
else: 
    print(api_versions.err_message) 

āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏāϕ⧋āĻĄ

āĻāĻ•āϟāĻŋ API āĻ•āϞ āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤

In [62]: api_versions.status_code                                               
Out[62]: 400

āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄ: 200,400,401,403,404,409,500,501.

set_success_status

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āϏāĻžāĻĢāĻ˛ā§āϝ⧇āϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋāϰ āĻŽāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāĻ—āϤāĻ­āĻžāĻŦ⧇, āφāĻĒāύāĻŋ āϏ⧇āĻ–āĻžāύ⧇ āĻ•āĻŋāϛ⧁ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻāĻŽāύāĻ•āĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āωāĻĻāĻžāĻšāϰāĻŖ āĻšāϞ āĻāχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϟāĻŋāϕ⧇ False-āĻ āϰāĻŋāϏ⧇āϟ āĻ•āϰāĻž āĻšāĻŦ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻŋāϛ⧁ āĻļāĻ°ā§āϤ⧇āϰ āĻ…āϧ⧀āύ⧇āĨ¤ āύ⧀āĻšā§‡, āϝāĻ–āύ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻ•āĻžāϜāϗ⧁āϞāĻŋ āϚāϞāĻŽāĻžāύ āĻĨāĻžāϕ⧇ āϤāĻ–āύ āωāĻĻāĻžāĻšāϰāϪ⧇āϰ āĻĻāĻŋāϕ⧇ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āĻāχ āĻ…āύ⧁āϰ⧋āϧāϟāĻŋāϕ⧇ āĻ…āϏāĻĢāϞ āĻŦāϞ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻŦ (āφāĻŽāϰāĻž āϏāĻĢāϞāϤāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āϏ⧇āϟ āĻ•āϰāĻŦ āĻŽāĻŋāĻĨā§āϝāĻž, āĻāĻĒāĻŋāφāχ āĻ•āϞ āϏāĻĢāϞ āĻšāĻ“āϝāĻŧāĻž āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“ āĻāĻŦāĻ‚ āϕ⧋āĻĄ 200 āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇)āĨ¤

for task in task_result.data["tasks"]:
    if task["status"] == "failed" or task["status"] == "partially succeeded":
        task_result.set_success_status(False)
        break

āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž()

āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒāĻĻā§āϧāϤāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄ (āĻ¸ā§āĻĨāĻŋāϤāĻŋ_āϕ⧋āĻĄ) āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻĄāĻŋ (āĻŦāĻĄāĻŋ) āϏāĻš āĻ…āĻ­āĻŋāϧāĻžāύāϟāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤

In [94]: api_versions.response()                                                
Out[94]: 
{'status_code': 200,
 'data': {'current-version': '1.6',
  'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}}

āωāĻĒāĻžāĻ¤ā§āϤ

āφāĻĒāύāĻžāϕ⧇ āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϤāĻĨā§āϝ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž (āĻļāϰ⧀āϰ) āĻĻ⧇āĻ–āϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤

In [93]: api_versions.data                                                      
Out[93]: 
{'current-version': '1.6',
 'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}

āϭ⧁āϞ āĻŦāĻžāĻ°ā§āϤāĻž

āĻāχ āϤāĻĨā§āϝāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻ–āύāχ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ āϝāĻ–āύ API āĻ…āύ⧁āϰ⧋āϧ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡ (āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϕ⧋āĻĄ āύāĻž 200)āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ āφāωāϟāĻĒ⧁āϟ

In [107]: api_versions.error_message                                            
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'

āĻĻāϰāĻ•āĻžāϰ⧀ āωāĻĻāĻžāĻšāϰāĻŖ

āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĻĒāύāĻž API 1.6-āĻ āϝ⧋āĻ— āĻ•āϰāĻž API āĻ•āϞāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻŽāύ āωāĻĻāĻžāĻšāϰāĻŖ āύāĻŋāĻšā§‡ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϞāĨ¤

āĻĒā§āϰāĻĨāĻŽāϤ, āϚāϞ⧁āύ āĻĻ⧇āĻ–āĻŋ āĻ•āϞ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻ…ā§āϝāĻžāĻĄ-āĻšā§‹āĻ¸ā§āϟ и āϝ⧋āĻ—-āĻ āĻŋāĻ•āĻžāύāĻž-āĻĒāϰāĻŋāϏ⧀āĻŽāĻž. āϧāϰāĻž āϝāĻžāĻ• āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻŦāύ⧇āϟ 192.168.0.0/24-āĻāϰ āϏāĻŽāĻ¸ā§āϤ āφāχāĻĒāĻŋ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āϝāĻžāϰ āĻļ⧇āώ āĻ…āĻ•ā§āĻŸā§‡āϟ āĻšāϞ 5, āĻšā§‹āĻ¸ā§āϟ āϟāĻžāχāĻĒ⧇āϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇, āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϤ āφāχāĻĒāĻŋ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏāϕ⧇ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ āϰ⧇āĻžā§āϜ āϟāĻžāχāĻĒ⧇āϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āϏāĻžāĻŦāύ⧇āϟ āĻ āĻŋāĻ•āĻžāύāĻž āĻāĻŦāĻ‚ āϏāĻŽā§āĻĒā§āϰāϚāĻžāϰ āĻ āĻŋāĻ•āĻžāύāĻž āĻŦāĻžāĻĻ āĻĻāĻŋāύāĨ¤

āϏ⧁āϤāϰāĻžāĻ‚, āύ⧀āĻšā§‡ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻšā§‹āĻ¸ā§āϟ āϟāĻžāχāĻĒ⧇āϰ 50āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ āϰ⧇āĻžā§āϜ āϟāĻžāχāĻĒ⧇āϰ 51āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ, 101āϟāĻŋ API āĻ•āϞ āĻĒā§āϰāϝāĻŧā§‹āϜāύ (āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϞ āĻ—āĻŖāύāĻž āύāĻž)āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, timeit āĻŽāĻĄāĻŋāωāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āφāĻŽāϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāϤ⧇ āϝ⧇ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇ āϤāĻž āĻ—āĻŖāύāĻž āĻ•āϰāĻŋāĨ¤

āĻ…ā§āϝāĻžāĻĄ-āĻšā§‹āĻ¸ā§āϟ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĄ-āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ-āϰ⧇āĻžā§āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ

import timeit
from cpapi import APIClient, APIClientArgs

start = timeit.default_timer()

first_ip = 1
last_ip = 4

client_args = APIClientArgs(server="192.168.47.240")

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     for ip in range(5,255,5):
         add_host = client.api_call("add-host", {"name" : f"h_192.168.0.{ip}", "ip-address": f'192.168.0.{ip}'})
     while last_ip < 255:
         add_range = client.api_call("add-address-range", {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"})
         first_ip+=5
         last_ip+=5
     stop = timeit.default_timer() 
     publish = client.api_call("publish")
     
print(f'Time to execute batch request: {stop - start} seconds')

āφāĻŽāĻžāϰ āĻ˛ā§āϝāĻžāĻŦ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇, āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϞ⧋āĻĄā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āĻāχ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāϤ⧇ 30 āĻĨ⧇āϕ⧇ 50 āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āϏāĻŽāϝāĻŧ āύ⧇āϝāĻŧāĨ¤

āĻāĻ–āύ āĻĻ⧇āĻ–āĻž āϝāĻžāĻ• āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ API āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āχ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āϝ⧋āĻ—-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻŦā§āϝāĻžāϚ, āϏāĻŽāĻ°ā§āĻĨāύ āϝāĻžāϰ āϜāĻ¨ā§āϝ API āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ 1.6 āĻ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āĻ•āϞāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ API āĻ…āύ⧁āϰ⧋āϧ⧇ āĻāĻ•āϏāĻžāĻĨ⧇ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āϤāĻĻ⧁āĻĒāϰāĻŋ, āĻāϗ⧁āϞāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϧāϰāϪ⧇āϰ āĻŦāĻ¸ā§āϤ⧁ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻšā§‹āĻ¸ā§āϟ, āϏāĻžāĻŦāύ⧇āϟ āĻāĻŦāĻ‚ āĻ āĻŋāĻ•āĻžāύāĻž āĻĒāϰāĻŋāϏ⧀āĻŽāĻž)āĨ¤ āϏ⧁āϤāϰāĻžāĻ‚, āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϜāϟāĻŋ āĻāĻ•āϟāĻŋ API āĻ•āϞ⧇āϰ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ…ā§āϝāĻžāĻĄ-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻŦā§āϝāĻžāϚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ

import timeit
from cpapi import APIClient, APIClientArgs

start = timeit.default_timer()

client_args = APIClientArgs(server="192.168.47.240")

objects_list_ip = []
objects_list_range = []

for ip in range(5,255,5):
    data = {"name": f'h_192.168.0.{ip}', "ip-address": f'192.168.0.{ip}'}
    objects_list_ip.append(data)
    
first_ip = 1
last_ip = 4


while last_ip < 255:
    data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"}
    objects_list_range.append(data)
    first_ip+=5
    last_ip+=5

data_for_batch = {
  "objects" : [ {
    "type" : "host",
    "list" : objects_list_ip
}, {
    "type" : "address-range",
    "list" : objects_list_range
  }]
}


with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     add_objects_batch = client.api_call("add-objects-batch", data_for_batch)
     stop = timeit.default_timer() 
     publish = client.api_call("publish")
     
print(f'Time to execute batch request: {stop - start} seconds')

āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϞ⧋āĻĄā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āφāĻŽāĻžāϰ āĻ˛ā§āϝāĻžāĻŦ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāχ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āϚāĻžāϞāĻžāϤ⧇ 3 āĻĨ⧇āϕ⧇ 7 āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ—āĻĄāĻŧ⧇, 101āϟāĻŋ API āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡, āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāϚ āϟāĻžāχāĻĒ āĻ•āϞ 10 āϗ⧁āĻŖ āĻĻā§āϰ⧁āϤ āϚāϞ⧇āĨ¤ āĻŦ⧃āĻšāĻ¤ā§āϤāϰ āϏāĻ‚āĻ–ā§āϝāĻ• āĻŦāĻ¸ā§āϤ⧁āϤ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝāϟāĻŋ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āϚāĻŋāĻ¤ā§āϤāĻžāĻ•āĻ°ā§āώāĻ• āĻšāĻŦ⧇āĨ¤

āĻāĻ–āύ āĻĻ⧇āĻ–āĻž āϝāĻžāĻ• āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ āϏ⧇āϟ-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻŦā§āϝāĻžāϚ. āĻāχ API āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āφāĻŽāϰāĻž āϝ⧇āϕ⧋āύ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻŦāĻžāĻ˛ā§āĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āφāϗ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻĨ⧇āϕ⧇ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āĻ…āĻ°ā§āϧ⧇āĻ• āϏ⧇āϟ āĻ•āϰāĻž āϝāĻžāĻ• (.124 āĻšā§‹āĻ¸ā§āϟ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ, āĻāĻŦāĻ‚ āϰ⧇āĻžā§āϜāĻ“) āĻ•āĻžāϞāĻžāϰ āϏāĻŋāϝāĻŧ⧇āύāĻžāϤ⧇, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ⧇āϰ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāĻžāĻ°ā§āϧ⧇ āĻ•āĻžāϞāĻžāϰ āĻ–āĻžāĻ•āĻŋ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻŋāĨ¤

āφāϗ⧇āϰ āωāĻĻāĻžāĻšāϰāϪ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻŦāĻ¸ā§āϤ⧁āϰ āϰāĻ™ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž

from cpapi import APIClient, APIClientArgs

client_args = APIClientArgs(server="192.168.47.240")

objects_list_ip_first = []
objects_list_range_first = []
objects_list_ip_second = []
objects_list_range_second = []

for ip in range(5,125,5):
    data = {"name": f'h_192.168.0.{ip}', "color": "sienna"}
    objects_list_ip_first.append(data)
    
for ip in range(125,255,5):
    data = {"name": f'h_192.168.0.{ip}', "color": "khaki"}
    objects_list_ip_second.append(data)
    
first_ip = 1
last_ip = 4
while last_ip < 125:
    data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "sienna"}
    objects_list_range_first.append(data)
    first_ip+=5
    last_ip+=5
    
while last_ip < 255:
    data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "khaki"}
    objects_list_range_second.append(data)
    first_ip+=5
    last_ip+=5

data_for_batch_first  = {
  "objects" : [ {
    "type" : "host",
    "list" : objects_list_ip_first
}, {
    "type" : "address-range",
    "list" : objects_list_range_first
  }]
}

data_for_batch_second  = {
  "objects" : [ {
    "type" : "host",
    "list" : objects_list_ip_second
}, {
    "type" : "address-range",
    "list" : objects_list_range_second
  }]
}

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') 
     set_objects_batch_first = client.api_call("set-objects-batch", data_for_batch_first)
     set_objects_batch_second = client.api_call("set-objects-batch", data_for_batch_second)
     publish = client.api_call("publish")

āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ API āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻŦāĻ¸ā§āϤ⧁ āĻŽā§āϛ⧇ āĻĢ⧇āϞāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻĄāĻŋāϞāĻŋāϟ-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻŦā§āϝāĻžāϚ. āĻāĻ–āύ āφāϏ⧁āύ āĻāĻ•āϟāĻŋ āϕ⧋āĻĄ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻŋ āϝāĻž āĻĒā§‚āĻ°ā§āĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϏāĻŽāĻ¸ā§āϤ āĻšā§‹āĻ¸ā§āϟ āĻŽā§āϛ⧇ āĻĻ⧇āϝāĻŧ āϝ⧋āĻ—-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻŦā§āϝāĻžāϚ.

āĻĄāĻŋāϞāĻŋāϟ-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻŦā§āϝāĻžāϚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻ¸ā§āϤ⧁ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāĻšā§āϛ⧇

from cpapi import APIClient, APIClientArgs

client_args = APIClientArgs(server="192.168.47.240")

objects_list_ip = []
objects_list_range = []

for ip in range(5,255,5):
    data = {"name": f'h_192.168.0.{ip}'}
    objects_list_ip.append(data)

first_ip = 1
last_ip = 4
while last_ip < 255:
    data = {"name": f"r_192.168.0.{first_ip}-{last_ip}"}
    objects_list_range.append(data)
    first_ip+=5
    last_ip+=5

data_for_batch = {
  "objects" : [ {
    "type" : "host",
    "list" : objects_list_ip
}, {
    "type" : "address-range",
    "list" : objects_list_range
  }]
}

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     delete_objects_batch = client.api_call("delete-objects-batch", data_for_batch)
     publish = client.api_call("publish")

print(delete_objects_batch.data)

āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ⧇āϰ āύāϤ⧁āύ āϰāĻŋāϞāĻŋāĻœā§‡ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āϏāĻŽāĻ¸ā§āϤ āĻĢāĻžāĻ‚āĻļāύ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ API āĻ•āϞāϗ⧁āϞāĻŋ āĻ…āĻ°ā§āϜāύ āĻ•āϰ⧇āĨ¤ āĻāχāĻ­āĻžāĻŦ⧇, R80.40-āĻ āϰāĻŋāĻ­āĻžāĻ°ā§āϟ āϟ⧁ āϰāĻŋāĻ­āĻŋāĻļāύ āĻāĻŦāĻ‚ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϟāĻžāĻ¸ā§āϕ⧇āϰ āĻŽāϤ⧋ "āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ" āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ API āĻ•āϞāϗ⧁āϞāĻŋ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āϤāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻ…āϧāĻŋāĻ•āĻ¨ā§āϤ⧁, āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ āĻ•āύāϏ⧋āϞ āĻĨ⧇āϕ⧇ āχāωāύāĻŋāĻĢāĻžāχāĻĄ āĻĒāϞāĻŋāϏāĻŋ āĻŽā§‹āĻĄā§‡ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻžāĻ“ API āϏāĻŽāĻ°ā§āĻĨāύ āĻ…āĻ°ā§āϜāύ āĻ•āϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ R80.40-āĻāϰ āĻĻā§€āĻ°ā§āϘ-āĻĒā§āϰāϤ⧀āĻ•ā§āώāĻŋāϤ āφāĻĒāĻĄā§‡āϟāϟāĻŋ āĻšāϞ āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ āĻŽā§‹āĻĄ āĻĨ⧇āϕ⧇ āχāωāύāĻŋāĻĢāĻžāχāĻĄ āĻĒāϞāĻŋāϏāĻŋ āĻŽā§‹āĻĄā§‡ HTTPS āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ āύ⧀āϤāĻŋāϰ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ, āĻāĻŦāĻ‚ āĻāχ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ API āĻ•āϞāϗ⧁āϞāĻŋ āĻĒ⧇āϝāĻŧ⧇āϛ⧇⧎ āĻāĻ–āĻžāύ⧇ āϕ⧋āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž HTTPS āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ āύ⧀āϤāĻŋāϰ āĻļā§€āĻ°ā§āώ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽ āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āϝāĻž āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ āĻĨ⧇āϕ⧇ 3āϟāĻŋ āĻŦāĻŋāĻ­āĻžāĻ— āĻŦāĻžāĻĻ āĻĻ⧇āϝāĻŧ (āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ, āĻ…āĻ°ā§āĻĨ, āϏāϰāĻ•āĻžāϰ⧀ āĻĒāϰāĻŋāώ⧇āĻŦāĻž), āϝāĻž āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĻ⧇āĻļ⧇ āφāχāύ āĻ…āύ⧁āϏāĻžāϰ⧇ āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ āĻĨ⧇āϕ⧇ āύāĻŋāώāĻŋāĻĻā§āϧāĨ¤

HTTPS āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ āύ⧀āϤāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽ āϝ⧋āĻ— āĻ•āϰ⧁āύ

from cpapi import APIClient, APIClientArgs

client_args = APIClientArgs(server="192.168.47.240")

data = {
  "layer" : "Default Layer",
  "position" : "top",
  "name" : "Legal Requirements",
  "action": "bypass",
  "site-category": ["Health", "Government / Military", "Financial Services"]
}

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     add_https_rule = client.api_call("add-https-rule", data)
     publish = client.api_call("publish")

āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāχāĻĨāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋ āĻšāĻšā§āϛ⧇

āϏāĻŦāχ āĻāĻ•āϰāĻ•āĻŽ README.md āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻĒāĻžāχāĻĨāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋āϰ āϤāĻĨā§āϝ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ āĻ…āĻ¨ā§āϝ āĻŽā§‡āĻļāĻŋāύ āĻĨ⧇āϕ⧇ API āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻ…āĻ•ā§āώāĻŽ āĻšāύ āϤāĻ–āύ āĻāϟāĻŋ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāĻŽāĻŋ āĻāĻ•āϟāĻŋ āĻ›āϝāĻŧ āĻŽāĻŋāύāĻŋāĻŸā§‡āϰ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧇āĻ›āĻŋ āϝāĻžāϤ⧇ āφāĻŽāĻŋ āĻŽāĻĄāĻŋāωāϞāϟāĻŋ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ āĻĻ⧇āĻ–āĻŋ cpapi āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāχāĻĨāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ āĻšāĻŋāϏ⧇āĻŦ⧇, āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋ āĻšāϝāĻŧ āϝāĻž āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻ…āĻĄāĻŋāϟāĻŋāĻ‚āϝāĻŧ⧇āϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϗ⧇āϟāĻ“āϝāĻŧ⧇āϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧇āĨ¤ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻšā§‡āĻ•āφāĻĒ. āφāĻŽāĻžāϕ⧇ āϝ⧇ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āĻŽā§‹āĻ•āĻžāĻŦ⧇āϞāĻž āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϤāĻžāϰ āĻŽāĻ§ā§āϝ⧇: āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻāĻ–āύāĻ“ āĻĒāĻžāχāĻĨāύ 2.7 āĻ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāϝāĻŧāύāĻŋ āχāύāĻĒ⧁āϟ, āϤāĻžāχ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻž āϤāĻĨā§āϝ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ āĻ•āĻžāρāϚāĻž āύāĻŋāĻŦ⧇āĻļ. āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ, āϕ⧋āĻĄāϟāĻŋ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻŽā§‡āĻļāĻŋāύ āĻĨ⧇āϕ⧇ āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āĻŽāϤ⧋āχ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āφāϰāĻ“ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• login_as_root, āϝāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ, āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ IP āĻ āĻŋāĻ•āĻžāύāĻž āφāĻŦāĻžāϰ āωāĻ˛ā§āϞ⧇āĻ– āύāĻž āĻ•āϰ⧇āĨ¤

āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĻ⧇āĻ–āĻžāĻ“

āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻšā§‡āĻ•āφāĻĒ⧇āϰ āĻĻā§āϰ⧁āϤ āϏ⧇āϟāφāĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ

from __future__ import print_function
import getpass
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from cpapi import APIClient, APIClientArgs

def main():
    with APIClient() as client:
       # if client.check_fingerprint() is False:
       #     print("Could not get the server's fingerprint - Check connectivity with the server.")
       #     exit(1)
        login_res = client.login_as_root()

        if login_res.success is False:
            print("Login failed:n{}".format(login_res.error_message))
            exit(1)

        gw_name = raw_input("Enter the gateway name:")
        gw_ip = raw_input("Enter the gateway IP address:")
        if sys.stdin.isatty():
            sic = getpass.getpass("Enter one-time password for the gateway(SIC): ")
        else:
            print("Attention! Your password will be shown on the screen!")
            sic = raw_input("Enter one-time password for the gateway(SIC): ")
        version = raw_input("Enter the gateway version(like RXX.YY):")
        add_gw = client.api_call("add-simple-gateway", {'name' : gw_name, 'ipv4-address' : gw_ip, 'one-time-password' : sic, 'version': version.capitalize(), 'application-control' : 'true', 'url-filtering' : 'true', 'ips' : 'true', 'anti-bot' : 'true', 'anti-virus' : 'true', 'threat-emulation' : 'true'})
        if add_gw.success and add_gw.data['sic-state'] != "communicating":
            print("Secure connection with the gateway hasn't established!")
            exit(1)
        elif add_gw.success:
            print("The gateway was added successfully.")
            gw_uid = add_gw.data['uid']
            gw_name = add_gw.data['name']
        else:
            print("Failed to add the gateway - {}".format(add_gw.error_message))
            exit(1)

        change_policy = client.api_call("set-access-layer", {"name" : "Network", "applications-and-url-filtering": "true", "content-awareness": "true"})
        if change_policy.success:
            print("The policy has been changed successfully")
        else:
            print("Failed to change the policy- {}".format(change_policy.error_message))
        change_rule = client.api_call("set-access-rule", {"name" : "Cleanup rule", "layer" : "Network", "action": "Accept", "track": {"type": "Detailed Log", "accounting": "true"}})
        if change_rule.success:
            print("The cleanup rule has been changed successfully")
        else:
            print("Failed to change the cleanup rule- {}".format(change_rule.error_message))

        # publish the result
        publish_res = client.api_call("publish", {})
        if publish_res.success:
            print("The changes were published successfully.")
        else:
                print("Failed to publish the changes - {}".format(install_tp_policy.error_message))

        install_access_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'true',  "threat-prevention" : 'false', "targets" : gw_uid})
        if install_access_policy.success:
            print("The access policy has been installed")
        else:
                print("Failed to install access policy - {}".format(install_tp_policy.error_message))

        install_tp_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'false',  "threat-prevention" : 'true', "targets" : gw_uid})
        if install_tp_policy.success:
            print("The threat prevention policy has been installed")
        else:
            print("Failed to install threat prevention policy - {}".format(install_tp_policy.error_message))
        
        # add passwords and passphrases to dictionary
        with open('additional_pass.conf') as f:
            line_num = 0
            for line in f:
                line_num += 1
                add_password_dictionary = client.api_call("run-script", {"script-name" : "Add passwords and passphrases", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
                if add_password_dictionary.success:
                    print("The password dictionary line {} was added successfully".format(line_num))
                else:
                    print("Failed to add the dictionary - {}".format(add_password_dictionary.error_message))

main()

āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ…āĻ­āĻŋāϧāĻžāύ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ_pass.conf āϏāĻš āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻĢāĻžāχāϞ
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","ĐŋĐ°Ņ€ĐžĐģҌ","ĐŸĐ°Ņ€ĐžĐģҌ","КĐģŅŽŅ‡","ĐēĐģŅŽŅ‡","ŅˆĐ¸Ņ„Ņ€","Đ¨Đ¸Ņ„Ņ€"]
}

āωāĻĒāϏāĻ‚āĻšāĻžāϰ

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ•āĻžāĻœā§‡āϰ āĻŽā§ŒāϞāĻŋāĻ• āϏāĻŽā§āĻ­āĻžāĻŦāύāĻžāϗ⧁āϞāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĒāĻžāχāĻĨāύ āĻāϏāĻĄāĻŋāϕ⧇ āĻāĻŦāĻ‚ āĻŽāĻĄāĻŋāωāϞ cpapi(āϝ⧇āĻŽāύ āφāĻĒāύāĻŋ āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧇āϛ⧇āύ, āĻāϗ⧁āϞāĻŋ āφāϏāϞ⧇ āĻĒā§āϰāϤāĻŋāĻļāĻŦā§āĻĻ), āĻāĻŦāĻ‚ āĻāχ āĻŽāĻĄāĻŋāωāϞ⧇āϰ āϕ⧋āĻĄ āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ•āϰ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻŦ⧇āύāĨ¤ āĻāϟāĻž āϏāĻŽā§āĻ­āĻŦ āϝ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋāϕ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ•ā§āϞāĻžāϏ, āĻĢāĻžāĻ‚āĻļāύ, āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻŦāĻ‚ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻŽā§āĻĒā§‚āϰāĻ• āĻ•āϰāϤ⧇ āϚāĻžāχāĻŦ⧇āύāĨ¤ āφāĻĒāύāĻŋ āϏāĻŦāϏāĻŽāϝāĻŧ āφāĻĒāύāĻžāϰ āĻ•āĻžāϜ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻšā§‡āĻ• āĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ āϕ⧋āĻĄāĻšāĻžāĻŦ āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻšā§‡āĻ•āĻŽā§‡āϟāϏ, āϝāĻž āĻĒāĻŖā§āϝ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āωāĻ­āϝāĻŧāϕ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰ⧇āĨ¤

āĻļ⧁āĻ­ āϕ⧋āĻĄāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒāĻĄāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ!

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster