Skip to content
Snippets Groups Projects
install.yml 6.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • Florence Blanc-Renaud's avatar
    Florence Blanc-Renaud committed
    ---
    # tasks file for ipaclient
    
    
    - name: Install - Install IPA client package
      package:
        name: "{{ ipaclient_package }}"
        state: present
    
    
    - name: Install - IPA discovery
      ipadiscovery:
        domain: "{{ ipaclient_domain | default(omit) }}"
        servers: "{{ groups.ipaservers | default(omit) }}"
        realm: "{{ ipaclient_realm | default(omit) }}"
        hostname: "{{ ansible_fqdn }}"
    
        #ca_cert_file: "{{ ipaclient_ca_cert_file | default(omit) }}"
    
    - name: Install - Set default principal if no keytab is given
    
      set_fact:
        ipaclient_principal: admin
    
      when: ipaclient_principal is undefined and ipaclient_keytab is undefined
    
    # The following block is executed when using OTP to enroll IPA client
    
    # ie when ipaclient_use_otp is set.
    
    # It connects to ipaserver and add the host with --random option in order
    # to create a OneTime Password
    
    # If a keytab is specified in the hostent, then the hostent will be disabled
    # if ipaclient_use_otp is set.
    
    - block:
      - name: Install - Get a One-Time Password for client enrollment
        ipahost:
          state: present
    
          principal: "{{ ipaclient_principal | default('admin') }}"
          password: "{{ ipaclient_password | default(omit) }}"
    
          keytab: "{{ ipaadmin_keytab | default(omit) }}"
    
          lifetime: "{{ ipaclient_lifetime | default(omit) }}"
    
          random: True
        register: ipahost_output
        # If the host is already enrolled, this command will exit on error
        # The error can be ignored
        failed_when: ipahost_output|failed and "Password cannot be set on enrolled host" not in ipahost_output.msg
    
        delegate_to: "{{ ipadiscovery.servers[0] }}"
    
    
      - name: Install - Store the previously obtained OTP
        set_fact:
    
          ipaclient_password: "{{ ipahost_output.host.randompassword if ipahost_output.host is defined }}"
    
    - name: Install - Check if principal and keytab are set
      fail: msg="Principal and keytab cannot be used together"
      when: ipaclient_principal is defined and ipaclient_keytab is defined
    
    - name: Install - Check if one of password and keytab are set
      fail: msg="At least one of password or keytab must be specified"
    
      when: (ipaclient_password is undefined or ipaclient_password == "") and (ipaclient_keytab is undefined or ipaclient_keytab == "")
    
    - name: Install - Purge {{ ipadiscovery.realm }} from host keytab
      command: /usr/sbin/ipa-rmkeytab -k /etc/krb5.keytab -r "{{ ipadiscovery.realm }}"
      register: iparmkeytab
      # Do not fail on error codes 3 and 5:
      #   3 - Unable to open keytab
      #   5 - Principal name or realm not found in keytab
      failed_when: iparmkeytab.rc != 0 and iparmkeytab.rc != 3 and iparmkeytab.rc != 5
      when: ipaclient_use_otp | bool or ipaclient_force_join | bool
    
    
    - name: Install - Join IPA
      ipajoin:
    
        servers: "{{ ipadiscovery.servers }}"
        domain: "{{ ipadiscovery.domain }}"
        realm: "{{ ipadiscovery.realm }}"
        kdc: "{{ ipadiscovery.kdc }}"
        basedn: "{{ ipadiscovery.basedn }}"
    
        hostname: "{{ ipadiscovery.hostname }}"
        force_join: "{{ ipaclient_force_join | default(omit) }}"
    
        principal: "{{ ipaclient_principal if not ipaclient_use_otp | bool and not ipaclient_keytab else '' }}"
    
        password: "{{ ipaclient_password | default(omit) }}"
        keytab: "{{ ipaclient_keytab | default(omit) }}"
    
        #ca_cert_file: "{{ ipaclient_ca_cert_file | default(omit) }}"
    
        kinit_attempts: "{{ ipaclient_kinit_attempts | default(omit) }}"
    
    - name: Install - Configure IPA default.conf
      include_role:
        name: ipaconf
      vars:
        ipaconf_server: "{{ ipadiscovery.servers[0] }}"
        ipaconf_domain: "{{ ipadiscovery.domain }}"
        ipaconf_realm: "{{ ipadiscovery.realm }}"
        ipaconf_hostname: "{{ ipadiscovery.hostname }}"
        ipaconf_basedn: "{{ ipadiscovery.basedn }}"
    
    - name: Install - Configure SSSD
    
        servers: "{{ ipadiscovery.servers }}"
        domain: "{{ ipadiscovery.domain }}"
        realm: "{{ ipadiscovery.realm }}"
        hostname: "{{ ipadiscovery.hostname }}"
        services: ["ssh", "sudo"]
        krb5_offline_passwords: yes
        #on_master: no
        #primary: no
        #permit: no
        #dns_updates: no
        #all_ip_addresses: no
    
    - name: Install - Configure krb5 for IPA realm "{{ ipadiscovery.realm }} <= 4.4"
    
      include_role:
        name: krb5
      vars:
        krb5_servers: "{{ [ ] if ipadiscovery.dnsok else ipadiscovery.servers }}"
        krb5_realm: "{{ ipadiscovery.realm }}"
        krb5_dns_lookup_realm: "{{ 'true' if ipadiscovery.dnsok else 'false' }}"
        krb5_dns_lookup_kdc: "{{ 'true' if ipadiscovery.dnsok else 'false' }}"
        krb5_no_default_domain: "{{ 'true' if ipadiscovery.domain != ipadiscovery.client_domain else 'false' }}"
    
        krb5_pkinit_anchors: "FILE:/etc/ipa/ca.crt"
      when: ipadiscovery.ipa_python_version <= 40400
    
    - name: Install - Configure krb5 for IPA realm "{{ ipadiscovery.realm }} > 4.4"
      include_role:
        name: krb5
      vars:
        krb5_servers: "{{ [ ] if ipadiscovery.dnsok else ipadiscovery.servers }}"
        krb5_realm: "{{ ipadiscovery.realm }}"
        krb5_dns_lookup_realm: "{{ 'true' if ipadiscovery.dnsok else 'false' }}"
        krb5_dns_lookup_kdc: "{{ 'true' if ipadiscovery.dnsok else 'false' }}"
        krb5_no_default_domain: "{{ 'true' if ipadiscovery.domain != ipadiscovery.client_domain else 'false' }}"
        krb5_dns_canonicalize_hostname: "false"
        krb5_pkinit_pool: "FILE:/var/lib/ipa-client/pki/ca-bundle.pem"
        krb5_pkinit_anchors: "FILE:/var/lib/ipa-client/pki/pki-ca-bundle.pem"
      when: ipadiscovery.ipa_python_version > 40400
    
    
    - name: Install - IPA API calls for remaining enrollment parts
      ipaapi:
        servers: "{{ ipadiscovery.servers }}"
        realm: "{{ ipadiscovery.realm }}"
        hostname: "{{ ipadiscovery.hostname }}"
        #debug: yes
      register: ipaapi
    
    - name: Install - Create IPA NSS database
      ipanss:
        servers: "{{ ipadiscovery.servers }}"
        domain: "{{ ipadiscovery.domain }}"
        realm: "{{ ipadiscovery.realm }}"
        basedn: "{{ ipadiscovery.basedn }}"
        hostname: "{{ ipadiscovery.hostname }}"
        subject_base: "{{ ipadiscovery.subject_base }}"
    
        principal: "{{ ipaclient_principal | default(omit) }}"
    
        mkhomedir: "{{ ipaclient_mkhomedir | default(omit) }}"
    
        ca_enabled: "{{ ipaapi.ca_enabled | default(omit) }}"
        #on_master: no
    
    - name: Install - IPA extras configuration
      ipaextras:
        servers: "{{ ipadiscovery.servers }}"
        domain: "{{ ipadiscovery.domain }}"
        ntp_servers: "{{ ipadiscovery.ntp_servers }}"
        ntp: "{{ ipaclient_ntp | default(omit) }}"
        #force_ntpd: no
        #sssd: yes
    
        #trust_sshfp: yes
        #sshd: yes
        #automount_location:
        #firefox: no
        #firefox_dir:
        #no_nisdomain: no
        #nisdomain:
        #on_master: no