I would be tempted to keep it as a dictionary, but just to render the INI
file using the template module.

That way additional lookup plugins can be avoided.

On Mon, Jan 5, 2015 at 7:37 AM, adéaime cetout <[email protected]> wrote:

> hello,
> I find very interesting this way of organizing variables for .ini files.
>
> I wanted to use it myself, so I worked on a plugin that allows to generate
> all the keys of an .ini file in one pass with the inifile module.
> It works fine and I use to manage my OpenStack configuration files.
>
> I am not a specialist in development, but I think this plugin can be
> useful for everyone, so if someone wants to take over to maintain and
> integrate it into ansible, he is welcome.
>
> The plugin transforms the hierarchy data in a list (section, key, value)
> for use directly with the inifile module with_inidata as below:
>
> vars file :
> ...
> glanceapi_conf:
>   DEFAULT:
>     verbose: "{{ image_log_verbose }}"
>     rabbit_host: "{{ amqp_host }}"
>     rabbit_port: "{{ amqp_port }}"
>     rabbit_userid: "{{ amqp_userid }}"
>     rabbit_password: "{{ amqp_password }}"
>     rabbit_ha_queues: "{{ amqp_ha_queues }}"
>   database:
>     connection: "mysql://{{ image_db_user }}:{{ image_db_password }}@{{
> db_host }}/{{ image_db }}"
>   keystone_authtoken:
>     auth_uri: "http://{{ identity_admin_host }}:{{ identity_api_port
> }}/v2.0"
>     identity_uri: "http://{{ identity_admin_host }}:{{
> identity_admin_port }}"
>     admin_tenant_name: "{{ image_ks_tenant }}"
>     admin_user: "{{ image_ks_user }}"
>     admin_password: "{{ image_ks_password }}"
>   paste_deploy:
>     flavor: keystone
>   glance_store:
>     default_store: file
>     filesystem_store_datadir: /var/lib/glance/images/
> ...
>
>
>
> plugin code :
>
> # (c) 2014, Pierre-Yves KERVIEL <[email protected]>
> #
> # Ansible is free software: you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation, either version 3 of the License, or
> # (at your option) any later version.
> #
> # Ansible is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
>
> # inidata is used to manage ini
>
> import ansible.utils as utils
> import ansible.errors as errors
>
> class LookupModule(object):
>
>     def __init__(self, basedir=None, **kwargs):
>         self.basedir = basedir
>
>
>     def run(self, terms, inject=None, **kwargs):
>         terms = utils.listify_lookup_plugin_terms(terms, self.basedir,
> inject)
>
>         if not isinstance(terms, dict):
>             raise errors.AnsibleError("inidata lookup expects a
> dictionnary , got '%s'" %terms)
>
>         ret = []
>         for item0 in terms:
>             if not isinstance(terms[item0], dict):
>                 raise errors.AnsibleError("inidata lookup expects a
> dictionary, got '%s'" %terms[item0])
>             for item1 in terms[item0]:
>                 ret.append((item0, item1, terms[item0][item1]))
>
>         return ret
>
>
>
>
>
> Task code :
>
> - name: configuration.modify_glance-api_conf_file / modify glance-api.conf
> ini file
>   ini_file:
>     section: "{{ item.0 }}"
>     dest: /etc/glance/glance-api.conf
>     option: "{{ item.1 }}"
>     value: "{{ item.2 }}"
>     backup: yes
>   with_inidata: glanceapi_conf
>
>
>
>
> To use it, simply copy the plugin code with the name "dataini" in the
> directory defined in /etc/ansible.cfg. This should be
> /usr/share/ansible_plugins/lookup_plugins
> for the Ubuntu distribution and write your tasks as in my example. That's
> all.
>
> I hope that this plugin will allow you to simplify your ini files
> management.
>
> Best Regards
>
>  --
> 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 post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/608eaab9-eba1-4d99-b8ee-ab3a21f98c16%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/608eaab9-eba1-4d99-b8ee-ab3a21f98c16%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxnpqd7Uqhm2ZNAajw2cXQY4XmcaLyVEjgypb5WpjbBmw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to