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.
