Luo mukautettu moduuli Ansible-Pythonilla

Ansiblen moduulit

Ansiblen mukana toimitetaan joukko moduuleja (joita kutsutaan ”moduulikirjastoksi”), joita voidaan suorittaa suoraan etä-isännillä tai Playbookien kautta.

Käyttäjät voivat myös kirjoittaa omia moduulejaan. Nämä moduulit voivat hallita järjestelmän resursseja, kuten palveluita, paketteja tai tiedostoja (oikeastaan mitä tahansa), tai käsitellä järjestelmäkomentojen suorittamista.

Miksi luoda omia moduuleja?

Kuten aiemmin sanottiin, ansiblessa on paljon moduuleja, joilla voidaan suorittaa erilaisia tehtäviä. Mutta eri ympäristöillä voi olla erilaisia vaatimuksia, jolloin haluaisit mieluummin oman moduulin, jolla voit käsitellä järjestelmää tai ympäristöä tai projektia omalla tavallasi.

Ymmärretään, miten voimme luoda oman moduulin helposti.

Kansiorakenne

On tärkeää tuntea kansio- ja tiedostorakenne, ennen kuin alamme luoda omaa moduulia. Tarkista alla oleva kuva viitteeksi. Se, mitä meidän täytyy työstää, on main.yaml ja testing.py kirjastokansiossa.

root@ubuntu:~/ANSIBLEtesting# tree
.
└└── playbooks
├── library
│ └── testing.py
└── main.yaml

2 hakemistoa, 2 tiedostoa

Kirjoita ensimmäinen python-ohjelmasi

Kirjoittaaksemme ansiblea pragmaattisesti meidän on ymmärrettävä moduulien apuohjelmia. Ansible tarjoaa useita moduuli-apuohjelmia, jotka tarjoavat aputoimintoja, joita voit käyttää kehittäessäsi omia moduulejasi. testing.py-moduuliapuohjelma tarjoaa tärkeimmän pääsyn Ansible-kirjastoon, ja kaikkien Ansible-moduulien on vähintäänkin importoitava osoitteesta testing.py.

from ansible.module_utils.basic import *

Tällöin tuodaan kaikki module_utils-tiedostot oman moduulin luomista varten. Python-tiedoston tulostusmuoto on vain JSON. Kun siis tulostat python-tiedoston tulosteen, sen on oltava JSON-muodossa.

Keskeisiin osiin kuuluu, että tuot aina boilerplate-koodin ansible.module_utils.basic:stä näin:

from ansible.module_utils.basic import AnsibleModule
if __name__ == '__main__':
main()

Nyt instantioi main-luokka tai voit kirjoittaa suoraan main-luokkaan.

if __name__ == '__main__':
fields = {
"yourName": {"required": True, "type": "str"}
}
module = AnsibleModule(argument_spec=fields)
yourName = os.path.expanduser(module.params)
newName = firstProg(yourName)
module.exit_json(msg=newName)

AnsibleModuuli tarjoaa paljon yhteistä koodia paluiden käsittelyyn, jäsennellä argumentit puolestasi ja sallia syötteiden tarkistamisen. Tässä yourName on python-tiedostoon annettu syöte. Tämä syöttö otetaan ansible-pelikirjasta.

Eronnistuneet palautukset tehdään näin:

module.exit_json(changed=True, something_else=12345)

Ja epäonnistumiset ovat yhtä yksinkertaisia (jossa msg on vaadittu parametri, joka selittää virheen):

module.fail_json(msg="Something fatal happened")

Viimeinen python-ohjelma näyttää tältä

#!/bin/env python
from ansible.module_utils.basic import *
import os, json
import re, sysdef firstProg(text):
text1 = "Hello " + text
return text1if __name__ == '__main__':
fields = {
"yourName": {"required": True, "type": "str"}
}
module = AnsibleModule(argument_spec=fields)
yourName = os.path.expanduser(module.params)
newName = firstProg(yourName)
module.exit_json(msg=newName)

Valmistele pelikirjasi valmiiksi

Tiedäthän, että käytämme mukautetun moduulin nimeä samalla tavalla kuin python-tiedoston nimi.

- hosts: all
remote_user: root
gather_facts: yes vars_prompt:
- name: giveName
prompt: "Please provide your name"
private: no
failed_when: giveName is undefined tasks:
- name: Python Execution
testing: yourName={{ giveName }}
register: result
- debug: var=result

Tässä vars_prompt kysyy nimeä ja tehtävän alla oleva testausmoduuli välittää tämän nimen python-skriptille. Osaatko arvata, mikä tuloste tulee olemaan ? Lets check.

ansible-playbook main.yaml

Conclusions

You can check more in detail about the custom modules in Ansible Documentation. Mukautetuilla moduuleilla voi tehdä paljon muutakin.

Tämä artikkeli on otettu suoraan osoitteesta www.9tocloud.com

.