Blame README-dnsrecord.md

Packit Service 0a38ef
DNSRecord module
Packit Service 0a38ef
================
Packit Service 0a38ef
Packit Service 0a38ef
Description
Packit Service 0a38ef
-----------
Packit Service 0a38ef
Packit Service 0a38ef
The dnsrecord module allows management of DNS records and is as compatible as possible with the Ansible upstream `ipa_dnsrecord` module, but provide some other features like multiple record management in one execution and support for more DNS record types.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Features
Packit Service 0a38ef
--------
Packit Service 0a38ef
* DNS record management.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Supported FreeIPA Versions
Packit Service 0a38ef
--------------------------
Packit Service 0a38ef
Packit Service 0a38ef
FreeIPA versions 4.4.0 and up are supported by the ipadnsrecord module.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Requirements
Packit Service 0a38ef
------------
Packit Service 0a38ef
Packit Service 0a38ef
**Controller**
Packit Service 0a38ef
* Ansible version: 2.8+
Packit Service 0a38ef
Packit Service 0a38ef
**Node**
Packit Service 0a38ef
* Supported FreeIPA version (see above)
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Usage
Packit Service 0a38ef
=====
Packit Service 0a38ef
Packit Service 0a38ef
Example inventory file
Packit Service 0a38ef
Packit Service 0a38ef
```ini
Packit Service 0a38ef
[ipaserver]
Packit Service 0a38ef
ipaserver.example.com
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure an AAAA record is present:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    name: host01
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    record_type: 'AAAA'
Packit Service 0a38ef
    record_value: '::1'
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure an AAAA record is present, with a TTL of 300:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    name: host01
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    record_type: 'AAAA'
Packit Service 0a38ef
    record_value: '::1'
Packit Service 0a38ef
    record_ttl: 300
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure an AAAA record is present, with a reverse PTR record:
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    name: host02
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    record_type: 'AAAA'
Packit Service 0a38ef
    record_value: 'fd00::0002'
Packit Service 0a38ef
    create_reverse: yes
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure a LOC record is present, given its individual attributes:
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    name: host03
Packit Service 0a38ef
    loc_lat_deg: 52
Packit Service 0a38ef
    loc_lat_min: 22
Packit Service 0a38ef
    loc_lat_sec: 23.000
Packit Service 0a38ef
    loc_lat_dir: N
Packit Service 0a38ef
    loc_lon_deg: 4
Packit Service 0a38ef
    loc_lon_min: 53
Packit Service 0a38ef
    loc_lon_sec: 32.00
Packit Service 0a38ef
    loc_lon_dir: E
Packit Service 0a38ef
    loc_altitude: -2.00
Packit Service 0a38ef
    loc_size: 1.00
Packit Service 0a38ef
    loc_h_precision: 10000
Packit Service 0a38ef
    loc_v_precision: 10
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure multiple DNS records are present:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
ipadnsrecord:
Packit Service 0a38ef
  ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
  records:
Packit Service 0a38ef
    - name: host02
Packit Service 0a38ef
      zone_name: example.com
Packit Service 0a38ef
      record_type: A
Packit Service 0a38ef
      record_value:
Packit Service 0a38ef
        - "{{ ipv4_prefix }}.112"
Packit Service 0a38ef
        - "{{ ipv4_prefix }}.122"
Packit Service 0a38ef
    - name: host02
Packit Service 0a38ef
      zone_name: example.com
Packit Service 0a38ef
      record_type: AAAA
Packit Service 0a38ef
      record_value: ::1
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure multiple CNAME records are present:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Ensure that 'host03' and 'host04' have CNAME records.
Packit Service 0a38ef
  ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    records:
Packit Service 0a38ef
    - name: host03
Packit Service 0a38ef
      cname_hostname: host03.example.com
Packit Service 0a38ef
    - name: host04
Packit Service 0a38ef
      cname_hostname: host04.example.com
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure NS record is absent:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    name: host04
Packit Service 0a38ef
    ns_hostname: host04
Packit Service 0a38ef
    state: absent
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure LOC record is present, with fields:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    name: host04
Packit Service 0a38ef
    loc_lat_deg: 52
Packit Service 0a38ef
    loc_lat_min: 22
Packit Service 0a38ef
    loc_lat_sec: 23.000
Packit Service 0a38ef
    loc_lat_dir: N
Packit Service 0a38ef
    loc_lon_deg: 4
Packit Service 0a38ef
    loc_lon_min: 53
Packit Service 0a38ef
    loc_lon_sec: 32.000
Packit Service 0a38ef
    loc_lon_dir: E
Packit Service 0a38ef
    loc_altitude: -2.00
Packit Service 0a38ef
    loc_size: 0.00
Packit Service 0a38ef
    loc_h_precision: 10000
Packit Service 0a38ef
    loc_v_precision: 10
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Change value of an existing LOC record:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
  ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
  zone_name: example.com
Packit Service 0a38ef
  name: host04
Packit Service 0a38ef
  loc_size: 1.00
Packit Service 0a38ef
  loc_rec: 52 22 23 N 4 53 32 E -2 0 10000 10
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure multiple A records are present:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    name: host04
Packit Service 0a38ef
    a_rec:
Packit Service 0a38ef
      - 192.168.122.221
Packit Service 0a38ef
      - 192.168.122.222
Packit Service 0a38ef
      - 192.168.122.223
Packit Service 0a38ef
      - 192.168.122.224
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure A and AAAA records are present, with reverse records (PTR):
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    name: host01
Packit Service 0a38ef
    a_rec:
Packit Service 0a38ef
      - 192.168.122.221
Packit Service 0a38ef
      - 192.168.122.222
Packit Service 0a38ef
    aaaa_rec:
Packit Service 0a38ef
      - fd00:;0001
Packit Service 0a38ef
      - fd00::0002
Packit Service 0a38ef
    create_reverse: yes
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure multiple A and AAAA records are present, but only A records have reverse records:
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    name: host01
Packit Service 0a38ef
    a_ip_address: 192.168.122.221
Packit Service 0a38ef
    aaaa_ip_address: fd00::0001
Packit Service 0a38ef
    a_create_reverse: yes
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure multiple DNS records are absent:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- ipadnsrecord:
Packit Service 0a38ef
    ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
    zone_name: example.com
Packit Service 0a38ef
    records:
Packit Service 0a38ef
    - name: host01
Packit Service 0a38ef
      del_all: yes
Packit Service 0a38ef
    - name: host02
Packit Service 0a38ef
      del_all: yes
Packit Service 0a38ef
    - name: host03
Packit Service 0a38ef
      del_all: yes
Packit Service 0a38ef
    - name: host04
Packit Service 0a38ef
      del_all: yes
Packit Service 0a38ef
    - name: _ftp._tcp
Packit Service 0a38ef
      del_all: yes
Packit Service 0a38ef
    - name: _sip._udp
Packit Service 0a38ef
      del_all: yes
Packit Service 0a38ef
    state: absent
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Variables
Packit Service 0a38ef
=========
Packit Service 0a38ef
Packit Service 0a38ef
ipadnsrecord
Packit Service 0a38ef
------------
Packit Service 0a38ef
Packit Service 0a38ef
Variable | Description | Required
Packit Service 0a38ef
-------- | ----------- | --------
Packit Service 0a38ef
`ipaadmin_principal` | The admin principal is a string and defaults to `admin` | no
Packit Service 0a38ef
`ipaadmin_password` | The admin password is a string and is required if there is no admin ticket available on the node | no
Packit Service 0a38ef
`zone_name` \| `dnszone` | The DNS zone name to which DNS record needs to be managed. You can use one global zone name for multiple records. | no
Packit Service 0a38ef
  required: true
Packit Service 0a38ef
`records` | The list of dns records dicts. Each `records` dict entry can contain **record variables**. | no
Packit Service 0a38ef
  | **Record variables** | no
Packit Service 0a38ef
**Record variables** | Used when defining a single record. | no
Packit Service 0a38ef
`state` | The state to ensure. It can be one of `present` or `absent`, and defaults to `present`. | yes
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
**Record Variables:**
Packit Service 0a38ef
Packit Service 0a38ef
Variable | Description | Required
Packit Service 0a38ef
-------- | ----------- | --------
Packit Service 0a38ef
`zone_name` \| `dnszone` | The DNS zone name to which DNS record needs to be managed. You can use one global zone name for multiple records. When used on a `records` dict, overrides the global `zone_name`. | yes
Packit Service 0a38ef
`name` \| `record_name` | The DNS record name to manage. | yes
Packit Service 0a38ef
`record_type` | The type of DNS record. Supported values are  `A`, `AAAA`, `A6`, `AFSDB`, `CERT`, `CNAME`, `DLV`, `DNAME`, `DS`, `KX`, `LOC`, `MX`, `NAPTR`, `NS`, `PTR`, `SRV`, `SSHFP`, `TLSA`, `TXT`, `URI`, and defaults to `A`. | no
Packit Service 0a38ef
`record_value` | Manage DNS record name with this values. | no
Packit Service 0a38ef
`record_ttl` | Set the TTL for the record. (int) | no
Packit Service 0a38ef
`del_all` | Delete all associated records. (bool) | no
Packit Service 0a38ef
`a_rec` \| `a_record` | Raw A record. | no
Packit Service 0a38ef
`aaaa_rec` \| `aaaa_record` |  Raw AAAA record. | no
Packit Service 0a38ef
`a6_rec` \| `a6_record` | Raw A6 record data. | no
Packit Service 0a38ef
`afsdb_rec` \| `afsdb_record` | Raw AFSDB record. | no
Packit Service 0a38ef
`cert_rec` \| `cert_record` | Raw CERT record. | no
Packit Service 0a38ef
`cname_rec` \| `cname_record` | Raw CNAME record. | no
Packit Service 0a38ef
`dlv_rec` \| `dlv_record` |  Raw DLV record. | no
Packit Service 0a38ef
`dname_rec` \| `dname_record` | Raw DNAM record. | no
Packit Service 0a38ef
`ds_rec` \| `ds_record` | Raw DS record. | no
Packit Service 0a38ef
`kx_rec` \| `kx_record` |  Raw KX record. | no
Packit Service 0a38ef
`loc_rec` \| `loc_record` | Raw LOC record. | no
Packit Service 0a38ef
`mx_rec` \| `mx_record` | Raw MX record. | no
Packit Service 0a38ef
`naptr_rec` \| `naptr_record` | Raw NAPTR record. | no
Packit Service 0a38ef
`ns_rec` \| `ns_record` | Raw NS record. | no
Packit Service 0a38ef
`ptr_rec` \| `ptr_record` | Raw PTR record. | no
Packit Service 0a38ef
`srv_rec` \| `srv_record` | Raw SRV record. | no
Packit Service 0a38ef
`sshfp_rec` \| `sshfp_record` | Raw SSHFP record. | no
Packit Service 0a38ef
`tlsa_rec` \| `tlsa_record` | Raw TLSA record. | no
Packit Service 0a38ef
`txt_rec` \| `txt_record` | Raw TXT record. | no
Packit Service 0a38ef
`uri_rec` \| `uri_record` | Raw URI record. | no
Packit Service 0a38ef
`ip_address` | IP adress for A or AAAA records. Set `record_type` to `A` or `AAAA`. | no
Packit Service 0a38ef
`create_reverse` \| `reverse` | Create reverse records for `A` and `AAAA` record types. There is no equivalent to remove reverse records. (bool) | no
Packit Service 0a38ef
`a_ip_address` | IP adress for A records. Set `record_type` to `A`. | no
Packit Service 0a38ef
`a_create_reverse` | Create reverse records only for `A` records. There is no equivalent to remove reverse records. (bool) | no
Packit Service 0a38ef
`aaaa_ip_address` | IP adress for AAAA records. Set `record_type` `AAAA`. | no
Packit Service 0a38ef
`aaaa_create_reverse` | Create reverse records only for `AAAA` record types. There is no equivalent to remove reverse records. (bool) | no
Packit Service 0a38ef
`a6_data` | A6 record. Set `record_type` to `A6`. | no
Packit Service 0a38ef
`afsdb_subtype` | AFSDB Subtype. Set `record_type` to `AFSDB`. (int) | no
Packit Service 0a38ef
`afsdb_hostname` | AFSDB Hostname. Set `record_type` to `AFSDB`. | no
Packit Service 0a38ef
`cert_type` | CERT Certificate Type. Set `record_type` to `CERT`. (int) | no
Packit Service 0a38ef
`cert_key_tag` | CERT Key Tag. Set `record_type` to `CERT`. (int) | no
Packit Service 0a38ef
`cert_algorithm` | CERT Algorithm. Set `record_type` to `CERT`. (int) | no
Packit Service 0a38ef
`cert_certificate_or_crl` | CERT Certificate or  Certificate Revocation List (CRL). Set `record_type` to `CERT`. | no
Packit Service 0a38ef
`cname_hostname` | A hostname which this alias hostname points to. Set `record_type` to `CNAME`. | no
Packit Service 0a38ef
`dlv_key_tag` | DS Key Tag. Set `record_type` to `DLV`. (int) | no
Packit Service 0a38ef
`dlv_algorithm` | DLV Algorithm. Set `record_type` to `DLV`. (int) | no
Packit Service 0a38ef
`dlv_digest_type` | DLV Digest Type. Set `record_type` to `DLV`. (int) | no
Packit Service 0a38ef
`dlv_digest` | DLV Digest. Set `record_type` to `DLV`. | no
Packit Service 0a38ef
`dname_target` | DNAME Target. Set `record_type` to `DNAME`. | no
Packit Service 0a38ef
`ds_key_tag` | DS Key Tag. Set `record_type` to `DS`. (int) | no
Packit Service 0a38ef
`ds_algorithm` | DS Algorithm. Set `record_type` to `DS`. (int) | no
Packit Service 0a38ef
`ds_digest_type` | DS Digest Type. Set `record_type` to `DS`. (int) | no
Packit Service 0a38ef
`ds_digest` | DS Digest. Set `record_type` to `DS`. | no
Packit Service 0a38ef
`kx_preference` | Preference given to this exchanger. Lower values are more preferred. Set `record_type` to `KX`. (int) | no
Packit Service 0a38ef
`kx_exchanger` | A host willing to act as a key exchanger.  Set `record_type` to `KX`. | no
Packit Service 0a38ef
`loc_lat_deg` | LOC Degrees Latitude. Set `record_type` to `LOC`. (int) | no
Packit Service 0a38ef
`loc_lat_min` | LOC Minutes Latitude. Set `record_type` to `LOC`. (int) | no
Packit Service 0a38ef
`loc_lat_sec` | LOC Seconds Latitude. Set `record_type` to `LOC`. (float) | no
Packit Service 0a38ef
`loc_lat_dir` | LOC Direction Latitude. Valid values are `N` or `S`. Set `record_type` to `LOC`. (int) | no
Packit Service 0a38ef
`loc_lon_deg` | LOC Degrees Longitude. Set `record_type` to `LOC`. (int) | no
Packit Service 0a38ef
`loc_lon_min` | LOC Minutes Longitude. Set `record_type` to `LOC`. (int) | no
Packit Service 0a38ef
`loc_lon_sec` | LOC Seconds Longitude. Set `record_type` to `LOC`. (float) | no
Packit Service 0a38ef
`loc_lon_dir` | LOC Direction Longitude. Valid values are `E` or `W`. Set `record_type` to `LOC`. (int) | no
Packit Service 0a38ef
`loc_altitude` | LOC Altitude. Set `record_type` to `LOC`. (float) | no
Packit Service 0a38ef
`loc_size` | LOC Size. Set `record_type` to `LOC`. (float) | no
Packit Service 0a38ef
`loc_h_precision` | LOC Horizontal Precision. Set `record_type` to `LOC`. (float) | no
Packit Service 0a38ef
`loc_v_precision` | LOC Vertical Precision. Set `record_type` to `LOC`. (float) | no
Packit Service 0a38ef
`mx_preference` | Preference given to this exchanger. Lower values are more preferred. Set `record_type` to `MX`. (int) | no
Packit Service 0a38ef
`mx_exchanger` | A host willing to act as a mail exchanger.  Set `record_type` to `LOC`. | no
Packit Service 0a38ef
`naptr_order` | NAPTR Order. Set `record_type` to `NAPTR`. (int) | no
Packit Service 0a38ef
`naptr_preference` | NAPTR Preference. Set `record_type` to `NAPTR`. (int) | no
Packit Service 0a38ef
`naptr_flags` | NAPTR Flags. Set `record_type` to `NAPTR`. | no
Packit Service 0a38ef
`naptr_service` | NAPTR Service. Set `record_type` to `NAPTR`. | no
Packit Service 0a38ef
`naptr_regexp` | NAPTR Regular Expression. Set `record_type` to `NAPTR`. | no
Packit Service 0a38ef
`naptr_replacement` | NAPTR Replacement. Set `record_type` to `NAPTR`. | no
Packit Service 0a38ef
`ns_hostname` | NS Hostname. Set `record_type` to `NS`. | no
Packit Service 0a38ef
`ptr_hostname` | The hostname this reverse record points to. . Set `record_type` to `PTR`. | no
Packit Service 0a38ef
`srv_priority` | Lower number means higher priority. Clients will attempt to contact the server with the lowest-numbered priority they can reach. Set `record_type` to `SRV`. (int) | no
Packit Service 0a38ef
`srv_weight` | Relative weight for entries with the same priority. Set `record_type` to `SRV`. (int) | no
Packit Service 0a38ef
`srv_port` | SRV Port. Set `record_type` to `SRV`. (int) | no
Packit Service 0a38ef
`srv_target` | The domain name of the target host or '.' if the service is decidedly not available at this domain. Set `record_type` to `SRV`. | no
Packit Service 0a38ef
`sshfp_algorithm` | SSHFP Algorithm. Set `record_type` to `SSHFP`. (int) | no
Packit Service 0a38ef
`sshfp_fp_type` | SSHFP Fingerprint Type. Set `record_type` to `SSHFP`. (int) | no
Packit Service 0a38ef
`sshfp_fingerprint`| SSHFP Fingerprint. Set `record_type` to `SSHFP`. (int) | no
Packit Service 0a38ef
`txt_data` | TXT Text Data. Set `record_type` to `TXT`. | no
Packit Service 0a38ef
`tlsa_cert_usage` | TLSA Certificate Usage. Set `record_type` to `TLSA`. (int) | no
Packit Service 0a38ef
`tlsa_selector` | TLSA Selector. Set `record_type` to `TLSA`. (int) | no
Packit Service 0a38ef
`tlsa_matching_type` | TLSA Matching Type. Set `record_type` to `TLSA`. (int) | no
Packit Service 0a38ef
`tlsa_cert_association_data` | TLSA Certificate Association Data. Set `record_type` to `TLSA`. | no
Packit Service 0a38ef
`uri_target` | Target Uniform Resource Identifier according to RFC 3986. Set `record_type` to `URI`. | no
Packit Service 0a38ef
`uri_priority` | Lower number means higher priority. Clients will attempt to contact the URI with the lowest-numbered priority they can reach. Set `record_type` to `URI`. (int) | no
Packit Service 0a38ef
`uri_weight` | Relative weight for entries with the same priority. Set `record_type` to `URI`. (int) | no
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Authors
Packit Service 0a38ef
=======
Packit Service 0a38ef
Packit Service 0a38ef
Rafael Guterres Jeffman