source: | fortios_user_domain_controller.py |
---|---|
orphan: |
fortios_user_domain_controller -- Configure domain controller entries in Fortinet's FortiOS and FortiGate.
.. versionadded:: 2.0.0
- This module is able to configure a FortiGate or FortiOS (FOS) device by allowing the user to set and modify user feature and domain_controller category. Examples include all parameters and values need to be adjusted to datasources before usage. Tested with FOS v6.0.0
The below requirements are needed on the host that executes this module.
- ansible>=2.9
Using member operation to add an element to an existing object.
v6.0.0 |
v6.0.5 |
v6.0.11 |
v6.2.0 |
v6.2.3 |
v6.2.5 |
v6.2.7 |
v6.4.0 |
v6.4.1 |
v6.4.4 |
v7.0.0 |
v7.0.1 |
v7.0.2 |
v7.0.3 |
v7.0.4 |
v7.0.5 |
v7.0.6 |
v7.0.7 |
v7.0.8 |
v7.0.12 |
v7.2.0 |
v7.2.1 |
v7.2.2 |
v7.2.4 |
v7.4.0 |
|
fortios_user_domain_controller | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
- access_token - Token-based authentication. Generated from GUI of Fortigate. type: str required: false
- enable_log - Enable/Disable logging for task. type: bool required: false default: False
- vdom - Virtual domain, among those defined previously. A vdom is a virtual instance of the FortiGate that can be configured and used as a different unit. type: str default: root
- member_path - Member attribute path to operate on. type: str
- member_state - Add or delete a member under specified attribute path. type: str choices: present, absent
- state - Indicates whether to create or remove the object. type: str required: true choices: present, absent
- user_domain_controller - Configure domain controller entries. type: dict
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
user_domain_controller yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - ad_mode - Set Active Directory mode. type: str choices: none, ds, lds
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
ad_mode no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [none] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [ds] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [lds] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - adlds_dn - AD LDS distinguished name. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
adlds_dn no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - adlds_ip_address - AD LDS IPv4 address. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
adlds_ip_address no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - adlds_ip6 - AD LDS IPv6 address. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
adlds_ip6 no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - adlds_port - Port number of AD LDS service . type: int
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
adlds_port no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - change_detection - Enable/disable detection of a configuration change in the Active Directory server. type: str choices: enable, disable
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
change_detection no no no no no no no no no no no no no no no no no no no no no no no no yes [enable] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes [disable] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes - change_detection_period - Minutes to detect a configuration change in the Active Directory server (5 - 10080 minutes (7 days)). type: int
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
change_detection_period no no no no no no no no no no no no no no no no no no no no no no no no yes - dns_srv_lookup - Enable/disable DNS service lookup. type: str choices: enable, disable
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
dns_srv_lookup no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [enable] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [disable] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - domain_name - Domain DNS name. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
domain_name yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - extra_server - Extra servers. type: list member_path: extra_server:id
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
extra_server no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - id - Server ID. type: int required: true
more...
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
id yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - ip_address - Domain controller IP address. type: str
more...
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
ip_address yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - port - Port to be used for communication with the domain controller . type: int
more...
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
port yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - source_ip_address - FortiGate IPv4 address to be used for communication with the domain controller. type: str
more...
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
source_ip_address no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - source_port - Source port to be used for communication with the domain controller. type: int
more...
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
source_port no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - hostname - Hostname of the server to connect to. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
hostname no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - interface - Specify outgoing interface to reach server. Source system.interface.name. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
interface no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - interface_select_method - Specify how to select outgoing interface to reach server. type: str choices: auto, sdwan, specify
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
interface_select_method no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [auto] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [sdwan] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes [specify] n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - ip_address - Domain controller IPv4 address. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
ip_address yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - ip6 - Domain controller IPv6 address. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
ip6 no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - ldap_server - LDAP server name(s). Source user.ldap.name. type: list member_path: ldap_server:name
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
ldap_server yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - name - LDAP server name. Source user.ldap.name. type: str required: true
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
name no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - name - Domain controller entry name. type: str required: true
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
name yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - password - Password for specified username. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
password no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - port - Port to be used for communication with the domain controller . type: int
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
port yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - replication_port - Port to be used for communication with the domain controller for replication service. Port number 0 indicates automatic discovery. type: int
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
replication_port no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - source_ip_address - FortiGate IPv4 address to be used for communication with the domain controller. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
source_ip_address no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - source_ip6 - FortiGate IPv6 address to be used for communication with the domain controller. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
source_ip6 no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - source_port - Source port to be used for communication with the domain controller. type: int
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
source_port no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes - username - User name to sign in with. Must have proper permissions for service. type: str
more...
v6.0.0
v6.0.5
v6.0.11
v6.2.0
v6.2.3
v6.2.5
v6.2.7
v6.4.0
v6.4.1
v6.4.4
v7.0.0
v7.0.1
v7.0.2
v7.0.3
v7.0.4
v7.0.5
v7.0.6
v7.0.7
v7.0.8
v7.0.12
v7.2.0
v7.2.1
v7.2.2
v7.2.4
v7.4.0
username no no no no no no no no no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
Note
- Legacy fortiosapi has been deprecated, httpapi is the preferred way to run playbooks
- hosts: fortigates
collections:
- fortinet.fortios
connection: httpapi
vars:
vdom: "root"
ansible_httpapi_use_ssl: yes
ansible_httpapi_validate_certs: no
ansible_httpapi_port: 443
tasks:
- name: Configure domain controller entries.
fortios_user_domain_controller:
vdom: "{{ vdom }}"
state: "present"
access_token: "<your_own_value>"
user_domain_controller:
ad_mode: "none"
adlds_dn: "<your_own_value>"
adlds_ip_address: "<your_own_value>"
adlds_ip6: "<your_own_value>"
adlds_port: "389"
change_detection: "enable"
change_detection_period: "60"
dns_srv_lookup: "enable"
domain_name: "<your_own_value>"
extra_server:
-
id: "13"
ip_address: "<your_own_value>"
port: "445"
source_ip_address: "<your_own_value>"
source_port: "0"
hostname: "myhostname"
interface: "<your_own_value> (source system.interface.name)"
interface_select_method: "auto"
ip_address: "<your_own_value>"
ip6: "<your_own_value>"
ldap_server:
-
name: "default_name_24 (source user.ldap.name)"
name: "default_name_25"
password: "<your_own_value>"
port: "445"
replication_port: "0"
source_ip_address: "<your_own_value>"
source_ip6: "<your_own_value>"
source_port: "0"
username: "<your_own_value>"
Common return values are documented: https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values, the following are the fields unique to this module:
- build - Build number of the fortigate image returned: always type: str sample: 1547
- http_method - Last method used to provision the content into FortiGate returned: always type: str sample: PUT
- http_status - Last result given by FortiGate on last operation applied returned: always type: str sample: 200
- mkey - Master key (id) used in the last call to FortiGate returned: success type: str sample: id
- name - Name of the table used to fulfill the request returned: always type: str sample: urlfilter
- path - Path of the table used to fulfill the request returned: always type: str sample: webfilter
- revision - Internal revision number returned: always type: str sample: 17.0.2.10658
- serial - Serial number of the unit returned: always type: str sample: FGVMEVYYQT3AB5352
- status - Indication of the operation's result returned: always type: str sample: success
- vdom - Virtual domain used returned: always type: str sample: root
- version - Version of the FortiGate returned: always type: str sample: v5.6.3
- This module is not guaranteed to have a backwards compatible interface.
- Link Zheng (@chillancezen)
- Jie Xue (@JieX19)
- Hongbin Lu (@fgtdev-hblu)
- Frank Shen (@frankshen01)
- Miguel Angel Munoz (@mamunozgonzalez)
- Nicolas Thomas (@thomnico)
Hint
If you notice any issues in this documentation, you can create a pull request to improve it.