[ansible] playbook met variabelen bepaald door hostname

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • 3dmaster
  • Registratie: December 2004
  • Laatst online: 24-09 10:42
Ik ben een playbook aan het maken in ansible die geautomatiseerd bepaalde software op centos servers uitrolt. Nu wil ik de activatie ook automatiseren en de verschillende keys bijhouden in de defaults file. Het probleem wat ik heb is dat ansible de juiste key als variable moet hebben bij de juiste machine.

In de defaults file heb ik nu oa dit staan:

code:
1
2
3
plicense: {
license: "xxx-xxx-xxx-xxx" }
when: ansible_hostname == "server1"


Zolang ik hier 1 server in zet is het prima. Maar ik kan niet doorgaan middels
code:
1
2
3
plicense: {
license: "yyy-yyyy-yyyy-yyy" }
when: ansible_hostname == "servert2"


want ansible pakt dan enkel de laatste license, de eerdere variable gaat hij niet pakken. Is er een manier waarop ik dit wel in de defaults file kan krijgen?

Ik kan wel

code:
1
2
3
4
5
6
7
plicense1: {
license: "xxx-xxx-xxx-xxx" }
when: ansible_hostname == "server1"

plicense2: {
license: "yyy-yyyy-yyyy-yyy" }
when: ansible_hostname == "servert2"


doen maar dan moet ik in de rest van het playbook gaan controleren op welke variabele dan bestaat, wat het weer onoverzichtelijk maakt.

In de tasks wordt de software geactiveerd middels
code:
1
2
3
4
[  shell: bin license --install "{{ plicense.license }}"
  when: 
    - plicense.license != ""
    - result2|failed


Ik hoop dat het een beetje duidelijk is wat de bedoeling is :)

[ Voor 8% gewijzigd door 3dmaster op 29-11-2016 16:57 ]

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.

Beste antwoord (via 3dmaster op 08-12-2016 23:06)


  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 07-10 10:42
Waarom gebruik je niet de inheritance van variabelen? (host/group/role/defaults etc.)
https://docs.ansible.com/...e-should-i-put-a-variable

Zo kan je een license op undefined zetten in de defaults, zet je hem op een waarde voor de hosts waar je het voor nodig hebt en doe je een basic check bij de role/playbook die die variabele moet gebruiken. Het is dan niet de verantwoordelijkheid van de playbook/role zelf om een waarde ervoor te zetten, waardoor hij reusable is.

[ Voor 47% gewijzigd door gertvdijk op 29-11-2016 17:19 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.

Alle reacties


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

En als je per machine een aparte playbook maakt, werkt het dan wel? An sich is dat natuurlijk ook niet zo raar, aangezien je bij een specifieke machine een specifieke license key wil toevoegen voor dat programma. Ik zou zoiets ook niet in een algemene playbook willen zetten.

Mooiste zou dus zijn om een generieke playbook te hebben en voor de specifieke aanpassingen een specieke ("sub")playbook. :)

[ Voor 18% gewijzigd door CH4OS op 29-11-2016 16:59 ]


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 07-10 10:42
Waarom gebruik je niet de inheritance van variabelen? (host/group/role/defaults etc.)
https://docs.ansible.com/...e-should-i-put-a-variable

Zo kan je een license op undefined zetten in de defaults, zet je hem op een waarde voor de hosts waar je het voor nodig hebt en doe je een basic check bij de role/playbook die die variabele moet gebruiken. Het is dan niet de verantwoordelijkheid van de playbook/role zelf om een waarde ervoor te zetten, waardoor hij reusable is.

[ Voor 47% gewijzigd door gertvdijk op 29-11-2016 17:19 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • 3dmaster
  • Registratie: December 2004
  • Laatst online: 24-09 10:42
Het maken van een apart playbook per machine zie ik niet echt zitten. Het zijn straks tientallen identiek servers met enkel een afwijking in de license keys (en ip adressen.). Ik zal even verder puzzelen hoe ik dit net mooist kan gaan oplossen. :)

Edit
Opgelost, simpelweg door het gebruiken van de host_vars :+

[ Voor 12% gewijzigd door 3dmaster op 30-11-2016 11:01 ]

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.


Acties:
  • 0 Henk 'm!

  • Swedish Clown
  • Registratie: November 2010
  • Laatst online: 10-04 22:41

Swedish Clown

Erlang <3

Mooi dat je het hebt opgelost maar zet license keys AUB niet in je VCS. Dergelijke keys horen daar niet thuis en horen enkel voor de dev/sysadmin aanwezig te zijn tijdens installatie. Daarna horen ze ergens veilig opgeborgen te worden buiten je VCS.

Always looking for developers wanting to work with Erlang.