.ini dosyaları için değişkenleri düzenlemenin bu yolunda çok ilginç buluyorum.
Kendim kullanmak istedim, bu yüzden bir .ini dosyasının tüm anahtarlarını inifile modülüyle tek geçişte oluşturmaya izin veren bir eklenti üzerinde çalıştım.
İyi çalışıyor ve OpenStack yapılandırma dosyalarımı yönetmek için kullanıyorum.
Gelişim konusunda uzman değilim, ancak bu eklentinin herkes için yararlı olabileceğini düşünüyorum, bu yüzden eğer birileri bunu sürdürmek ve bunu mümkün olduğu gibi entegre etmek istiyorsa, o da kabul edilir.
...
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/
...
eklenti kod:
dosya değişkenler:
eklenti aşağıdaki with_inidata ini_dosyası modülün ile kullanım için (bölüm, anahtar değeri) bir listede hiyerarşi verisini dönüştürür
# (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
Görev kodu:
- 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
Kullanmak için, eklenti kodunu /etc/ansible.cfg dosyasında tanımlanan dizinde "dataini" adıyla kopyalayın.
Bu, Ubuntu dağıtımı için/usr/share/ansible_plugins/lookup_plugins olmalıdır ve görevlerimi örneğimde olduğu gibi yazın.
Bu eklentinin ini dosya yönetiminizi basitleştirmenize izin vermesini umuyorum.
um, Ansel'de değil, jinja'da yinelemeniz gerektiği anlaşılıyor. – tedder42
Bu durumda ini dosya şablonunu kullanmayı tercih ediyorum (bkz. 'Şablon modülü'). Yapmayı planladığınız şey olsa bile, çok kafa karıştırıcı olurdu. 'ini modülü 'çoğunlukla şablon modülünün kısayoludur, bu nedenle bunu yalnızca çok basit görevler için kullanmalısınız – ProfHase85
Yorumunuz için teşekkürler tedder42 ve ProfHase85. Aslında, daha önce şablon dosyası kullanıyordum, ancak config dosyasını yükleyici tarafından kurulduğundan ve ini_file kullanarak bazı değerleri değiştirebilmeyi tercih ediyorum. Şablon dosyalarını kullandığınızda, yapılandırma dosyasının yazılımın yeni bir sürümü nedeniyle değiştiğinde ve uzak ana bilgisayara yapılandırma dosyasının önceki sürümüne koymaya devam ettiğinizde bir sorununuz olabilir. –