Soy un nuevo usuario de Ansible y estoy cambiando de una colección de scripts de shell a guías de Ansible. Mi sistema de administración de usuarios actual permite agregar un usuario a un sistema solo si a ese usuario se le ha otorgado acceso a esa clase de servidor, ubicación y entorno (o si alguno de ellos está configurado como comodín/cualquiera).
La clase, la ubicación y el entorno del servidor se almacenan localmente en el propio servidor cliente, en forma de un archivo (solo legible/escribible desde la raíz) que tiene este aspecto:
LD_CLASS="app"
LD_LOC="dfw"
LD_ENV="prod"
Encontré algunos ejemplos que creo que son similares a lo que quiero, todavía no estoy seguro de cómo obtener las variables del cliente ansible y también de cómo asegurarme de que se cumplan los 3 requisitos de clase, ubicación y entorno antes de agregar. el usuario. Me imagino un archivo variable como este:
users:
-name: user1
uid: 60001
gid: 60001
class: app
location: any
env: dev
-name: user2
uid: 60002
gid: 60002
class: app
location: dfw
env: prod
Con una entrada de módulo de usuario que se parece a esta según las variables recopiladas del cliente ansible que estoy configurando (tenga en cuenta el pseudocódigo porque no estoy seguro de cómo lograría esto):
- user:
name: '{{ item.name }}'
state: '{ (If $LD_LOC matches location variable, or is set to any) & ($LD_ENV matches env variable, or is set to any) & ($LD_CLASS matches class variable, or is set to any) } present{% else %}absent{% endif %}'
uid: '{{ item.uid }}'
with_items: users
Preferiría no depender de los roles de ansible, sino obtener los datos de clase, ubicación y entorno del propio cliente de ansible, al menos parcialmente porque este es el sistema que tenemos actualmente y nos ayuda a realizar una transición fácil a ansible mientras mantenemos algunos herramientas existentes y familiares. ¿Es posible lo que estoy buscando?
Respuesta1
Hay una característica llamadahechos localesen Ansible:
Modifique su archivo de "propiedades" para que se vea como el siguiente, guárdelo en
/etc/ansible/facts.d/server_meta.fact
y aplique los permisos que desee:[settings] ld_class=app ld_loc=dfw ld_env=prod
Luego ejecute su libro de jugadas y consulte esos datos en el
state
parámetro:state: "{{ (ansible_local.server_meta.settings.ld_loc == 'dfw' and ansible_local.server_meta.settings.ld_class == 'app' and ansible_local.server_meta.settings.ld_env == 'prod' ) | ternary('present', 'absent') }}"