Version information
This version is compatible with:
- Puppet Enterprise 2019.8.x, 2019.7.x, 2019.5.x, 2019.4.x, 2019.3.x, 2019.2.x, 2019.1.x, 2019.0.x, 2018.1.x, 2017.3.x, 2017.2.x, 2017.1.x, 2016.5.x, 2016.4.x
- Puppet >= 4.0.0 < 7.0.0
- , , , , , , , , Archlinux
Start using this module
Add this module to your Puppetfile:
mod 'pcfens-filebeat', '4.0.1'Learn more about managing modules with a PuppetfileDocumentation
puppet-filebeat
Table of Contents
- Description
- Setup - The basics of getting started with filebeat
- Usage - Configuration options and additional functionality
- Reference
- Limitations - OS compatibility, etc.
- Development - Guide for contributing to the module
Description
The filebeat module installs and configures the filebeat log shipper maintained by elastic.
Setup
What filebeat affects
By default filebeat adds a software repository to your system, and installs filebeat along
with required configurations.
Upgrading to Filebeat 7.x
To upgrade to Filebeat 7.x, simply set $filebeat::major_version to 6 and $filebeat::package_ensure to latest (or whichever version of 7.x you want, just not present).
You'll also need to change instances of filebeat::prospector to filebeat::input when upgrading to version 4.x of
this module.
Setup Requirements
The filebeat module depends on puppetlabs/stdlib, and on
puppetlabs/apt on Debian based systems.
Beginning with filebeat
filebeat can be installed with puppet module install pcfens-filebeat (or with r10k, librarian-puppet, etc.)
The only required parameter, other than which files to ship, is the outputs parameter.
Usage
All of the default values in filebeat follow the upstream defaults (at the time of writing).
To ship files to elasticsearch:
class { 'filebeat':
outputs => {
'elasticsearch' => {
'hosts' => [
'http://localhost:9200',
'http://anotherserver:9200'
],
'loadbalance' => true,
'cas' => [
'/etc/pki/root/ca.pem',
],
},
},
}
To ship log files through logstash:
class { 'filebeat':
outputs => {
'logstash' => {
'hosts' => [
'localhost:5044',
'anotherserver:5044'
],
'loadbalance' => true,
},
},
}
Shipper and logging options can be configured the same way, and are documented on the elastic website.
Adding an Input
Inputs are processes that ship log files to elasticsearch or logstash. They can be defined as a hash added to the class declaration (also used for automatically creating input using hiera), or as their own defined resources.
At a minimum, the paths parameter must be set to an array of files or blobs that should
be shipped. doc_type is what logstash views as the type parameter if you'd like to
apply conditional filters.
filebeat::input { 'syslogs':
paths => [
'/var/log/auth.log',
'/var/log/syslog',
],
doc_type => 'syslog-beat',
}
Multiline Logs
Filebeat inputs can handle multiline log entries. The multiline
parameter accepts a hash containing pattern, negate, match, max_lines, and timeout
as documented in the filebeat configuration documentation.
JSON Logs
Filebeat inputs (versions >= 5.0) can natively decode JSON objects if they are stored one per line. The json
parameter accepts a hash containing message_key, keys_under_root, overwrite_keys, and add_error_key
as documented in the filebeat configuration documentation.
Inputs in Hiera
Inputs can be defined in hiera using the inputs parameter. By default, hiera will not merge
input declarations down the hiera hierarchy. That behavior can be changed by configuring the
lookup_options
flag.
Usage on Windows
When installing on Windows, this module will download the windows version of Filebeat from
elastic to C:\Temp by default. The directory
can be overridden using the tmp_dir parameter. tmp_dir is not managed by this module,
but is expected to exist as a directory that puppet can write to.
Processors
Filebeat 5.0 and greater includes a new libbeat feature for filtering and/or enhancing all exported data through processors before being sent to the configured output(s). They can be defined as a hash added to the class declaration (also used for automatically creating processors using hiera), or as their own defined resources.
To drop the offset and input_type fields from all events:
class{"filebeat":
processors => {
"drop_fields" => {
"fields" => ["input_type", "offset"],
},
},
}
To drop all events that have the http response code equal to 200: input
class{"filebeat":
processors => {
"drop_event" => {
"when" => {"equals" => {"http.code" => 200}}
},
},
}
Now to combine these examples into a single definition:
class{"filebeat":
processors => {
"drop_fields" => {
"params" => {"fields" => ["input_type", "offset"]},
"priority" => 1,
},
"drop_event" => {
"when" => {"equals" => {"http.code" => 200}},
"priority: => 2,
},
},
}
For more information please review the documentation here.
Processors in Hiera
Processors can be declared in hiera using the processors parameter. By default, hiera will not merge
processor declarations down the hiera hierarchy. That behavior can be changed by configuring the
lookup_options
flag.
Reference
Public Classes
Class: filebeat
Installs and configures filebeat.
Parameters within filebeat
package_ensure: [String] The ensure parameter for the filebeat package If set to absent, inputs and processors passed as parameters are ignored and everything managed by puppet will be removed. (default: present)manage_repo: [Boolean] Whether or not the upstream (elastic) repo should be configured or not (default: true)major_version: [Enum] The major version of Filebeat to install. Should be either'5'or'6'. The default value is'6', except for OpenBSD 6.3 and earlier, which has a default value of'5'.service_ensure: [String] The ensure parameter on the filebeat service (default: running)service_enable: [String] The enable parameter on the filebeat service (default: true)param repo_priority: [Integer] Repository priority. yum and apt supported (default: undef)service_provider: [String] The provider parameter on the filebeat service (default: on RedHat based systems use redhat, otherwise undefined)spool_size: [Integer] How large the spool should grow before being flushed to the network (default: 2048)idle_timeout: [String] How often the spooler should be flushed even if spool size isn't reached (default: 5s)publish_async: [Boolean] If set to true filebeat will publish while preparing the next batch of lines to transmit (default: false)config_file: [String] Where the configuration file managed by this module should be placed. If you think you might want to use this, read the limitations first. Defaults to the location that filebeat expects for your operating system.config_dir: [String] The directory where inputs should be defined (default: /etc/filebeat/conf.d)config_dir_mode: [String] The permissions mode set on the configuration directory (default: 0755)config_dir_owner: [String] The owner of the configuration directory (default: root). Linux only.config_dir_group: [String] The group of the configuration directory (default: root). Linux only.config_file_mode: [String] The permissions mode set on configuration files (default: 0644)config_file_owner: [String] The owner of the configuration files, including inputs (default: root). Linux only.config_file_group: [String] The group of the configuration files, including inputs (default: root). Linux only.purge_conf_dir: [Boolean] Should files in the input configuration directory not managed by puppet be automatically purgedenable_conf_modules: [Boolean] Should filebeat.config.modules be enabledmodules_dir: [String] The directory where module configurations should be defined (default: /etc/filebeat/modules.d)outputs: [Hash] Will be converted to YAML for the required outputs section of the configuration (see documentation, and above)shipper: [Hash] Will be converted to YAML to create the optional shipper section of the filebeat config (see documentation)logging: [Hash] Will be converted to YAML to create the optional logging section of the filebeat config (see documentation)modules: [Array] Will be converted to YAML to create the optional modules section of the filebeat config (see documentation)conf_template: [String] The configuration template to use to generate the main filebeat.yml config file.download_url: [String] The URL of the zip file that should be downloaded to install filebeat (windows only)install_dir: [String] Where filebeat should be installed (windows only)tmp_dir: [String] Where filebeat should be temporarily downloaded to so it can be installed (windows only)shutdown_timeout: [String] How long filebeat waits on shutdown for the publisher to finish sending eventsbeat_name: [String] The name of the beat shipper (default: hostname)tags: [Array] A list of tags that will be included with each published transactionmax_procs: [Number] The maximum number of CPUs that can be simultaneously usedfields: [Hash] Optional fields that should be added to each event outputfields_under_root: [Boolean] If set to true, custom fields are stored in the top level instead of under fieldsdisable_config_test: [Boolean] If set to true, configuration tests won't be run on config files before writing them.processors: [Hash] Processors that should be configured.inputs: [Hash] Inputs that will be created. Commonly used to create inputs using hierasetup: [Hash] Setup that will be created. Commonly used to create setup using hieraxpack: [Hash] XPack configuration to pass to filebeat
Private Classes
Class: filebeat::config
Creates the configuration files required for filebeat (but not the inputs)
Class: filebeat::install
Calls the correct installer class based on the kernel fact.
Class: filebeat::params
Sets default parameters for filebeat based on the OS and other facts.
Class: filebeat::repo
Installs the yum or apt repository for the system package manager to install filebeat.
Class: filebeat::service
Configures and manages the filebeat service.
Class: filebeat::install::linux
Install the filebeat package on Linux kernels.
Class: filebeat::install::windows
Downloads, extracts, and installs the filebeat zip file in Windows.
Public Defines
Define: filebeat::input
Installs a configuration file for a input.
Be sure to read the filebeat configuration details to fully understand what these parameters do.
Parameters for filebeat::input
ensure: The ensure parameter on the input configuration file. (default: present)paths: [Array] The paths, or blobs that should be handled by the input. (required only if inputtype is not _docker)containers_ids: [Array] If inputtype is _docker, the list of Docker container ids to read the logs from. (default: '*')containers_path: [String] If inputtype is _docker, the path from where the logs should be read from. (default: /var/log/docker/containers)containers_stream: [String] If inputtype is _docker, read from the specified stream only. (default: all)combine_partial: [Boolean] If inputtype is _docker, enable partial messages joining. (default: false)cri_parse_flags: [Boolean] If inputtype is _docker, enable CRI flags parsing from the log file. (default: false)exclude_files: [Array] Files that match any regex in the list are excluded from filebeat (default: [])encoding: [String] The file encoding. (default: plain)input_type: [String] log, docker or stdin - where filebeat reads the log from (default:log)fields: [Hash] Optional fields to add information to the output (default: {})fields_under_root: [Boolean] Should thefieldsparameter fields be stored at the top level of indexed documents.ignore_older: [String] Files older than this field will be ignored by filebeat (default: ignore nothing)close_older: [String] Files that haven't been modified sinceclose_older, they'll be closed. New modifications will be read when files are scanned again according toscan_frequency. (default: 1h)log_type: [String] (Deprecated - usedoc_type) The document_type setting (optional - default: log)doc_type: [String] The event type to used for published lines, used as type field in logstash and elasticsearch (optional - default: log)scan_frequency: [String] How often should the input check for new files (default: 10s)harvester_buffer_size: [Integer] The buffer size the harvester uses when fetching the file (default: 16384)tail_files: [Boolean] If true, filebeat starts reading new files at the end instead of the beginning (default: false)backoff: [String] How long filebeat should wait between scanning a file after reaching EOF (default: 1s)max_backoff: [String] The maximum wait time to scan a file for new lines to ship (default: 10s)backoff_factor: [Integer]backoffis multiplied by this parameter untilmax_backoffis reached to determine the actual backoff (default: 2)force_close_files: [Boolean] Should filebeat forcibly close a file when renamed (default: false)pipeline: [String] Filebeat can be configured for a different ingest pipeline for each input (default: undef)include_lines: [Array] A list of regular expressions to match the lines that you want to include. Ignored if empty (default: [])exclude_lines: [Array] A list of regular expressions to match the files that you want to exclude. Ignored if empty (default: [])max_bytes: [Integer] The maximum number of bytes that a single log message can have (default: 10485760)json: [Hash] Options that control how filebeat handles decoding of log messages in JSON format See above. (default: {})multiline: [Hash] Options that control how Filebeat handles log messages that span multiple lines. See above. (default: {})
Limitations
This module doesn't load the elasticsearch index template into elasticsearch (required when shipping directly to elasticsearch).
When installing on Windows, there's an expectation that C:\Temp already exists, or an alternative
location specified in the tmp_dir parameter exists and is writable by puppet. The temp directory
is used to store the downloaded installer only.
Generic template
By default, a generic, open ended template is used that simply converts your configuration into
a hash that is produced as YAML on the system. To use a template that is more strict, but possibly
incomplete, set conf_template to filebeat/filebeat.yml.erb.
Debian Systems
Filebeat 5.x and newer requires apt-transport-https, but this module won't install it for you.
Using config_file
There are a few very specific use cases where you don't want this module to directly manage the filebeat
configuration file, but you still want the configuration file on the system at a different location.
Setting config_file will write the filebeat configuration file to an alternate location, but it will not
update the init script. If you don't also manage the correct file (/etc/filebeat/filebeat.yml on Linux,
C:/Program Files/Filebeat/filebeat.yml on Windows) then filebeat won't be able to start.
If you're copying the alternate config file location into the real location you'll need to include some metaparameters like
file { '/etc/filebeat/filebeat.yml':
ensure => file,
source => 'file:///etc/filebeat/filebeat.special',
require => File['filebeat.yml'],
notify => Service['filebeat'],
}
to ensure that services are managed like you might expect.
Development
Pull requests and bug reports are welcome. If you're sending a pull request, please consider writing tests if applicable.
Changelog
Unreleased
v4.0.1
v4.0.0
- Switch from
filebeat::prospectortofilebeat::inputto reflect the changes in the upstream filebeat configuration. - Add support for Filebeat 7
- Remove support for
registry_fileandregistry_flushsettings (removed in 7.x) - Remove
queue_sizeparameter
v3.4.0
v3.3.3
v3.3.2
- Produce valid YAML for prospectors #193
- Upgrade to PDK 1.7.1
- Add tests for Puppet 6
- Add Puppet 6 support to metadata
v3.3.1
- Add a new
manage_aptflag for disabling the inclusion of puppetlabs/apt #185
v3.3.0
- Allow use of puppet/archive 3.x #190
- Add support for Docker inputs #191
- Support puppetlabs/stdlib 5.x
v3.2.2
- Don't add xpack configuration when it's undef #187
- Don't disallow using puppetlabs/apt 6.x (check their changelog as this release drops support for Puppet pre 4.7) #186
- Use the latest PDK
v3.2.1
- Fetch the suse repository signing key over https #176
v3.2.0
- Add support for xpack monitoring #172
- Add support for OpenBSD #173
- Set filebeat_version to false when filebeat isn't installed #175
v3.1.0
- Manage filebeat modules as an array #168
v3.0.1
- Fix array validation in prospector defined resource #166
v3.0.0
Potentially Breaking Change:
- Make filebeat 6 the default version.
Non-breaking changes:
- Allow setup entries in configuration #152, #146
- Processors should be an array of hashes #157, #156
- Validate URLs using stdlib #158
- Use external configuration setup for Filebeat 6+ #153
- Use version subcommand when determining version #159
- Add processors support to prospectors #162
- Update unsupported OS Family notice #161
- Use Puppet 4+ data types for prospectors #165
- Fix windows validation command #164, #163
v2.4.0
v2.3.0
v2.2.0
- Support pipeline configurations in prospectors #134
- Fix regex for validating download URL #135
- Overhaul testing
v2.1.0
- Change beat_name configuration parameter to name #126
- Make configuration directory/file ownership configurable #127
v2.0.0
- Drop support for Puppet 3
- Drop support for Filebeat versions before 5
- Add support for Puppet 5
- Use a generic template by default
- Remove processor defined type (create it in the config template)
- Add a flag to disable validating the configuration (
disable_config_test)
v1.0.0
- This is the last release with support for Filebeat versions prior to 5
- Last release with support for Puppet 3
- Add Logstash SSL support #121
- Add ES loadbalance support #119
The next major release will be a breaking release for anyone using processors.
v0.12.1
- Add support for SSL in Logstash #117
v0.12.0
Windows users: you may see a restart and replacement of your existing filebeat directory. There's a very brief discussion of the change in the pull request
- Support upgrades in Windows #113
- Add optional repo_priority parameter #110
- Update external dependencies, including pinning apt version
v0.11.2
- Explicitly support newer versions of the powershell modules #105
- Support kafka codec.format module #106
- The
add_localeprocessor doesnt' require parameters #104
v0.11.1
- Restore puppet 3.x compatibility regression (PUP-2523)
v0.11.0
Breaking Changes
- Processors are managed by their own defined resource (slight syntax change) #85
- The registry file has likely moved because of an upstream change. Moving this file can cause problems (duplicate or missed log entries), so you may want to point it to your existing file (check in /.filebeat on Linux systems)
Normal Enhancements/Bugfixes
- Support proxy for windows file downloads #90
- Setting
package_ensureto absent removes puppet managed files and removes the package - Add support for index conditional output to elasticsearch #97
- Add support for a conditional pipeline for elasticsearch #98
- Template should check for nil instead of undef #63
- Support for the round_robin and group_events parameters in kafka outputs #100
v0.10.4
- Add output.console support to the config template #91
- Support puppet with strict variables enabled #92
v0.10.3
- Allow non-SSL downloads of windows filebeat zipfile #82
- Basic support of processors in puppet <4.x #79 (See note above)
- Confine the filebeat_version fact in a way that works in Ruby 1.8.7 #88
v0.10.2
- Add close_older and force_close_files within prospector v5 #77
v0.10.1
v0.10.0
- Add support for JSON decoding #72
v0.9.2
- Add support for close* and clean* parameters in prospectors #70
v0.9.1
- Fix yaml syntax around filebeat processors #71
v0.9.0
- Add support for tags in prospectors #68
- Add support for filebeat processors #69
- Fix the
filebeat_versionfact in Windows #59 - Validate configuration files before notifying the filebeat service
- Update the Windows install URL to the latest version
v0.8.7
- Update windows URL to the latest 5.x release
- Remove nil values before rendering the template #65
v0.8.6
v0.8.5
- Check the kafka partition hash before checking for sub-hashes #54
v0.8.4
- Fix regression: Add the SSL label to the filebeat 5 template. #53
v0.8.3
- Don't use a possibly undefined array's length to determine if it should be iterated over #52
v0.8.2
- Correctly set document type for v5 prospectors #51
v0.8.1
- Don't manage the apt-transport-https package on Debian systems #49
- undefined values shouldn't be rendered by the filebeat5 template #50
v0.8.0
Enhancements
- Add support for Filebeat v5.
If you use this module on a system with filebeat 1.x installed, and you keep your current parameters
nothing will change. Setting major_version to '5' will modify the configuration template and update
package repositories, but won't update the package itself. To update the package set the
package_ensure parameter to at least 5.0.0.
- Add a parameter
use_generic_templatethat uses a more generic version of the configuration template. The generic template is more future proof (if types are correct), but looks very different than the example file.
v0.7.4
Version 0.7.3 was never released even though it is tagged.
- Fixed some testing issues that were caused by changes to external resources
Fixed Bugs
- Some redis configuration options were not generated as integers #38
v0.7.2
- Wrap regular expressions in single quotes #31 and #35
- Use the default Windows temporary folder (C:\Windows\Temp) by default #33
v0.7.1
- Allow the config file to be written to an alternate location. Be sure and read limitations before you use this.
Fixed Bugs
- Add elasticsearch and logstash port setting to Ruby 1.8 template #29
v0.7.0
- Setting the
prospectors_mergeparameter to true will create prospectors across multiple hiera levels usinghiera_hash()#25 - No longer manage the windows temp directory where the Filebeat download is kept. The assumption is made that the directory exists and is writable by puppet.
- Update the default windows download to Filebeat version 1.2.3
- Add redis output to the Ruby 1.8 template
- Wrap include_lines and exclude_lines array elements in quotes #28
Fixed Bugs
- SLES repository and metaparameters didn't match #25
v0.6.3
Fixed Bugs
- Spool size default should match upstream #24
- Repository names now match notification parameters Part of #25
v0.6.2
Fixed Bugs
- Fix the other certificate_key typo in Ruby 1.8 template #23
v0.6.1
Fixed Bugs
- Fix typo in Ruby 1.8 template #23
v0.6.0
- Add the
close_olderparameter to support the option of the same name in filebeat 1.2.0 - Add support for the
publish_asyncparameter.
Fixed Bugs
- Added limited, but improved support for Ruby versions pre-1.9.1 by fixing the hash sort issue #20
v0.5.8
Fixed Bugs
doc_typeis now used in the documentation instead of the deprecatedlog_type#17- RedHat based systems should be using the redhat service provider. #18
v0.5.7
Fixed Bugs
- Some configuration parameters should be rendered as integers, not strings #15
v0.5.6
Fixed Bugs
- Configuration files should use the
conf_templateparameter #14
v0.5.5
Fixed Bugs
rotate_every_kbandnumber_of_filesparameters in file outputs should be explicitly integers to keep filebeat happy. #13
v0.5.4
Fixed Bugs
- Fix template regression in v0.5.3
v0.5.2
- Use the anchor pattern instead of contain so that older versions of puppet are supported #12
v0.5.1
- Update metadata to reflect which versions of puppet are supported.
v0.5.0
- For prospectors, deprecate
log_typein favor ofdoc_typeto better match the actual configuration parameter.document_typeis not used because it causes errors when running with a puppet master.log_typewill be fully removed before module version 1.0. #9
New Features
- Add support for
exclude_files,exclude_lines,include_lines, andmultiline. Use of the new parameters requires a filebeat version >= 1.1 (#10, #11)
v0.4.1
Fixed Bugs
- Fix links in documentation to match the updated documentation
New Features
- Change repository resource names to beats (e.g. apt::source['beats'], etc.), and only declare them if they haven't already been declared. This way we only have one module for all beats modules managed through puppet.
v0.4.0
This is the first release that includes changelog. Since v0.3.1:
Fixed Bugs
- 'fields' parse error in prospector.yml template #7
New Features
- Windows support #3
- Requires the
puppetlabs/powershellandlwf/remote_filemodules.
- Requires the
- Config file and folder permissions can be managed #8
Dependencies
- puppetlabs/stdlib (>=4.13.0 < 6.0.0)
- puppetlabs/apt (>=2.0.0 < 7.0.0)
- puppetlabs/powershell (>= 1.0.1 < 3.0.0)
- puppet/archive (>= 0.5.0 < 4.0.0)
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.