From 90eb73ca0749e4476850444b117da2bf01bb9646 Mon Sep 17 00:00:00 2001 From: Colleen Murphy Date: Wed, 18 Apr 2018 00:20:13 +0200 Subject: [PATCH] Don't hardcode puppet-3-specific config paths This patch ensures that hiera data and puppet modules, and puppet config are copied to the right directory depending on the current puppet version. Since it's possible for the ansible management server and the managed nodes to have different puppet versions, we need to account for the possibility that the source and destination paths might be different. We also don't need to hardcode the various config paths in config or manage environments since we're using the defaults and hardcoding them would make them incorrect for one or the other puppet versions. Change-Id: I164f91f9a7942e8c5f059652634ec1078ae41aae --- defaults/main.yml | 4 -- library/puppet_get_hiera_file_list | 2 +- tasks/config.yml | 31 ++++++--------- tasks/main.yml | 61 +++++++++++++++++++++++++++--- templates/environment.conf.j2 | 1 - templates/puppet.conf.j2 | 2 - 6 files changed, 67 insertions(+), 34 deletions(-) delete mode 100644 templates/environment.conf.j2 diff --git a/defaults/main.yml b/defaults/main.yml index 9411169..5b5061f 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -2,7 +2,6 @@ # defaults file for ansible-puppet copy_hieradata: false copy_puppet: false -hieradata: /etc/puppet/hieradata # manage_config: False @@ -10,9 +9,6 @@ puppet_server: puppet certname: "{{ ansible_fqdn }}" puppet_data_binding_terminus: hiera puppet_reports: store -puppet_basemodulepath: '$confdir/modules' -puppet_environmentpath: '$confdir/environments' puppet_hiera_datadir: '/opt/system-config/' -puppet_environment_basedir: '/opt/system-config/' puppet_environment: production puppet_timeout: 30m diff --git a/library/puppet_get_hiera_file_list b/library/puppet_get_hiera_file_list index d00cff3..79dbe54 100644 --- a/library/puppet_get_hiera_file_list +++ b/library/puppet_get_hiera_file_list @@ -59,7 +59,7 @@ def main(): for path in paths: full_path = os.path.join(p['location'], path) if os.path.exists(full_path): - good_paths.append(full_path) + good_paths.append(path) module.exit_json(paths=good_paths) diff --git a/tasks/config.yml b/tasks/config.yml index 5e6f272..962fc3b 100644 --- a/tasks/config.yml +++ b/tasks/config.yml @@ -1,9 +1,17 @@ --- +- name: Set puppet conf dir + set_fact: + puppet_confdir: "{{ '/etc/puppet' if puppet_version == '3' else '/etc/puppetlabs/puppet' }}" + +- name: Set puppet code dir + set_fact: + puppet_codedir: "{{ '/etc/puppet' if puppet_version == '3' else '/etc/puppetlabs/code' }}" + # Create our config - name: Create puppet.conf from template template: src: "puppet.conf.j2" - dest: "/etc/puppet/puppet.conf" + dest: "{{ puppet_confdir }}/puppet.conf" owner: root group: root mode: 0644 @@ -11,7 +19,7 @@ - name: Create hiera.yaml from template template: src: "hiera.yaml.j2" - dest: "/etc/puppet/hiera.yaml" + dest: "{{ puppet_confdir }}/hiera.yaml" owner: root group: root mode: 0644 @@ -24,21 +32,4 @@ group: root state: link force: yes - -- name: create environment directory - file: - path: "/etc/puppet/environments/{{ puppet_environment }}" - state: directory - owner: root - group: root - mode: 0755 - when: puppet_environment is defined - -- name: create environment.conf from template - template: - src: "environment.conf.j2" - dest: "/etc/puppet/environments/{{ puppet_environment }}/environment.conf" - owner: root - group: root - mode: 0644 - when: puppet_environment is defined + when: puppet_version == '3' diff --git a/tasks/main.yml b/tasks/main.yml index 3041cb0..06966ba 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,9 +1,49 @@ --- +- name: Get management server puppet version + shell: + cmd: "puppet --version | cut -d '.' -f 1" + delegate_to: localhost + register: mgmt_puppet_version + +- name: Set management server puppet version fact + set_fact: + mgmt_puppet_version: "{{ mgmt_puppet_version.stdout }}" + +- debug: var=mgmt_puppet_version + +- name: Sanity check management server puppet version + fail: "Unsupported puppet version {{ mgmt_puppet_version }}" + when: (mgmt_puppet_version != '3' and mgmt_puppet_version != '4') + +- name: Get puppet version + shell: + cmd: "puppet --version | cut -d '.' -f 1" + register: puppet_version + +- name: Set puppet version fact + set_fact: + puppet_version: "{{ puppet_version.stdout }}" + +- debug: var=mgmt_puppet_version + +- name: Sanity check puppet version + fail: "Unsupported puppet version {{ puppet_version }}" + when: (puppet_version != '3' and puppet_version != '4') + - block: + - name: Set management server hieradata var + set_fact: + mgmt_hieradata: "{{ '/etc/puppet/hieradata' + puppet_environment if mgmt_puppet_version == '3' else '/etc/puppetlabs/code/environments/' + puppet_environment + '/hieradata' }}" + delegate_to: localhost + + - name: Set hieradata var + set_fact: + hieradata: "{{ '/etc/puppet/hieradata' + puppet_environment if puppet_version == '3' else '/etc/puppetlabs/code/environments/' + puppet_environment + '/hieradata' }}" + - name: ensure hiera directory file: state: directory - path: "{{ hieradata }}/{{ puppet_environment }}/{{ item }}" + path: "{{ hieradata }}//{{ item }}" owner: root group: root mode: 0700 @@ -15,14 +55,14 @@ puppet_get_hiera_file_list: fqdn: "{{ ansible_fqdn }}" groups: "{{ hostvars[inventory_hostname].group_names }}" - location: "{{ hieradata }}/{{ puppet_environment }}" + location: "{{ hieradata }}" delegate_to: localhost register: hiera_file_paths - name: copy hiera files copy: - src: "{{ item }}" - dest: "{{ item }}" + src: "{{ mgmt_hieradata + '/' + item }}" + dest: "{{ hieradata + '/' item }}" mode: 0600 with_items: "{{ hiera_file_paths.paths|default() }}" @@ -41,10 +81,19 @@ state: link when: copy_hieradata + - name: Set management server puppet module dir + set_fact: + mgmt_puppet_module_dir: "{{ '/etc/puppet/modules' if mgmt_puppet_version == '3' else '/etc/puppetlabs/code/modules' }}" + delegate_to: localhost + + - name: Set puppet module dir + set_fact: + puppet_module_dir: "{{ '/etc/puppet' if puppet_version == '3' else '/etc/puppetlabs/code' }}" + - name: copy system puppet modules synchronize: - src: /etc/puppet/modules - dest: /etc/puppet + src: "{{ mgmt_puppet_module_dir }}" + dest: "{{ puppet_module_dir }}" when: - copy_puppet diff --git a/templates/environment.conf.j2 b/templates/environment.conf.j2 deleted file mode 100644 index 7726473..0000000 --- a/templates/environment.conf.j2 +++ /dev/null @@ -1 +0,0 @@ -modulepath = '{{ puppet_basemodulepath }}:{{ puppet_environment_basedir }}{{ puppet_environment }}/modules' diff --git a/templates/puppet.conf.j2 b/templates/puppet.conf.j2 index 4e48051..ba246cf 100644 --- a/templates/puppet.conf.j2 +++ b/templates/puppet.conf.j2 @@ -8,8 +8,6 @@ certname={{ certname }} pluginsync=true data_binding_terminus={{ puppet_data_binding_terminus }} reports={{ puppet_reports }} -basemodulepath = {{ puppet_basemodulepath }} -environmentpath={{ puppet_environmentpath }} environmenttimeout=0 [master]