I'm trying to come up with some roles for configuring hashicorp vault 
agent.  In the end I'd like to build up then agent's config file to pull 
different secrets from a vault and then call scripts in response.  

I have a role,, for example, that creates a perforce authentication token 
using a vault secret and has a cron job to keep it up to date every hour.  
I might have another role that pulls down a password and updates a kerberos 
keytab on a system. 

So far I've broken this up into something like these roles:

   - vault-agent-init
      - clears the fragments assemble directory
      - makes misc directories
   - vault-agent-perforce-auth
      - parms: user, secret path, ...
      - drops a fragment into the fragments directory to add to config
      - adds a cron job that creates and keeps up to date a perforce 
      ticket/token file for a specific user
   - vault-agent-keytab-auth 
      - parms: user, secret path, ...
      - drops a fragment into the fragments directory to add to config 
      - adds a cron job that updates keytab for a specific user
   - vault-agent
      - assembles fragments, finishes configuring the agent.
   
Right now I put these together within a machine's role by placing these in 
order using include_role -- not using dependency roles.  Roles that depend 
on the the init role causes the fragments dir to be cleared for each parent 
role because init runs more than once.

Here's an example of what is included in a machine/service's role:

-  include_role:
    name: vault_agent_init
 
- include_role:
    name: vault_agent_keytab_auth
  vars:
    vault_approle: "xxx"
    vault_agent_keytab_user: "yyy"
    vault_agent_secret_path: "secret/user/yyy"

-  include_role:
    name: vault_agent_perforce_auth
  vars:
    vault_approle: "xxxx"
    [...]
    vault_agent_secret_path: "yyyy"

- include_role:   # assemble final config
    name: vault_agent
  
The idea is that I can build up the fragments, and then when done, include 
the final role to build up the fragments.

Is there a better way to pattern this?  I could try parameterizing 
everything into a single vault agent role.. but... I'd like other roles to 
be able to add other fragments without having to keep parameterizing the 
agent's role.   It feels like keeping these as smaller components would be 
better -- more maintainable.

One of the challenges I'm having with this now is I would like apply a role 
to all machines that is dependent on one of these secrets - the 
vault-agent-perforce-auth role... This role would use the perforce 
authentication to pull down a repository and sync it every hour.  But now 
I've designed myself into a corner where I have to add these includes 
manually to every machine's role list and can't just apply it to my list of 
common roles applied to all machines.

I learned puppet first long ago, but have been using ansible now for quite 
a few years -- but I fear that I am only seeing this design problem through 
a puppet "lens."

Thanks!
Rich

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/f783c756-5736-4312-b4ba-e04eac92a0cbn%40googlegroups.com.

Reply via email to