Repository: bigtop Updated Branches: refs/heads/BIGTOP-2320 568e0bce0 -> 22b8d7656
BIGTOP-2325. Deployment recipes for HAWQ Initial draft for puppet recipes Project: http://git-wip-us.apache.org/repos/asf/bigtop/repo Commit: http://git-wip-us.apache.org/repos/asf/bigtop/commit/22b8d765 Tree: http://git-wip-us.apache.org/repos/asf/bigtop/tree/22b8d765 Diff: http://git-wip-us.apache.org/repos/asf/bigtop/diff/22b8d765 Branch: refs/heads/BIGTOP-2320 Commit: 22b8d765611e50ec2d7cfc6e099e100373ce5bd9 Parents: 568e0bc Author: Konstantin Boudnik <[email protected]> Authored: Tue Feb 16 21:27:27 2016 +0300 Committer: Konstantin Boudnik <[email protected]> Committed: Tue Feb 16 22:00:46 2016 +0300 ---------------------------------------------------------------------- .../puppet/modules/hawq/manifests/init.pp | 72 ++++ .../puppet/modules/hawq/templates/gpcheck.cnf | 58 ++++ .../puppet/modules/hawq/templates/hawq-site.xml | 152 +++++++++ .../modules/hawq/templates/hdfs-client.xml | 331 +++++++++++++++++++ .../modules/hawq/templates/yarn-client.xml | 123 +++++++ bigtop-deploy/puppet/modules/hawq/tests/init.pp | 16 + 6 files changed, 752 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bigtop/blob/22b8d765/bigtop-deploy/puppet/modules/hawq/manifests/init.pp ---------------------------------------------------------------------- diff --git a/bigtop-deploy/puppet/modules/hawq/manifests/init.pp b/bigtop-deploy/puppet/modules/hawq/manifests/init.pp new file mode 100644 index 0000000..6aef9de --- /dev/null +++ b/bigtop-deploy/puppet/modules/hawq/manifests/init.pp @@ -0,0 +1,72 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +class hawq { + class deploy ($roles) { + if ("hawq" in $roles) { + ignite_hadoop::node { "hawq-node": } + } + } + + define node() { + $hadoop_head_node = hiera("bigtop::hadoop_head_node") + $hadoop_namenode_port = hiera("hadoop::common_hdfs::hadoop_namenode_port", "8020") + + package { "hawq": + ensure => latest, + } + + file { "/etc/default/hawq": + content => template("hawq/hawq"), + require => Package["hawq"], + } + + file { "/etc/hawq/conf": + ensure => directory, + owner => 'root', + group => 'root', + mode => '0755', + require => Package["hawq"], + } + file { "/etc/hawq/conf/hawq-site.xml": + content => template('hawq/hawq-site.xml'), + require => [File["/etc/hawq/conf"]], + } + file { "/etc/hawq/conf/gpcheck.cnf": + content => template('hawq/gpcheck.cnf'), + require => [File["/etc/hawq/conf"]], + } + file { "/etc/hawq/conf/hdfs-client.xml": + content => template('hawq/hdfs-client.xml'), + require => [File["/etc/hawq/conf"]], + } + file { "/etc/hawq/conf/yarn-client.xml": + content => template('hawq/yarn-client.xml'), + require => [File["/etc/hawq/conf"]], + } +## let's make sure that hawq libs are linked properly + file {'/usr/lib/hadoop/lib/hawq.jar': + ensure => link, + target => '/usr/lib/hawq/libs/hawq/hawq.jar', + require => [Package["hawq-service"]], + } + + service { "hawq": + ensure => running, + require => [ Package["hawq"], File["/etc/default/hawq"] ], + subscribe => [ Package["hawq"], File["/etc/default/hawq", "/etc/hawq/conf/hawq-site.xml"] ] + } + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/22b8d765/bigtop-deploy/puppet/modules/hawq/templates/gpcheck.cnf ---------------------------------------------------------------------- diff --git a/bigtop-deploy/puppet/modules/hawq/templates/gpcheck.cnf b/bigtop-deploy/puppet/modules/hawq/templates/gpcheck.cnf new file mode 100644 index 0000000..11ae02f --- /dev/null +++ b/bigtop-deploy/puppet/modules/hawq/templates/gpcheck.cnf @@ -0,0 +1,58 @@ +[global] +configfile_version = 4 + +[linux.mount] +mount.points = / + +[linux.sysctl] +sysctl.kernel.shmmax = 500000000 +sysctl.kernel.shmmni = 4096 +sysctl.kernel.shmall = 4000000000 +sysctl.kernel.sem = 250 512000 100 2048 +sysctl.kernel.sysrq = 1 +sysctl.kernel.core_uses_pid = 1 +sysctl.kernel.msgmnb = 65536 +sysctl.kernel.msgmax = 65536 +sysctl.kernel.msgmni = 2048 +sysctl.net.ipv4.tcp_syncookies = 0 +sysctl.net.ipv4.ip_forward = 0 +sysctl.net.ipv4.conf.default.accept_source_route = 0 +sysctl.net.ipv4.tcp_tw_recycle = 1 +sysctl.net.ipv4.tcp_max_syn_backlog = 200000 +sysctl.net.ipv4.conf.all.arp_filter = 1 +sysctl.net.ipv4.ip_local_port_range = 1281 65535 +sysctl.net.core.netdev_max_backlog = 200000 +sysctl.vm.overcommit_memory = 2 +sysctl.fs.nr_open = 3000000 +sysctl.kernel.threads-max = 798720 +sysctl.kernel.pid_max = 798720 +# increase network +sysctl.net.core.rmem_max = 2097152 +sysctl.net.core.wmem_max = 2097152 + +[linux.limits] +soft.nofile = 2900000 +hard.nofile = 2900000 +soft.nproc = 131072 +hard.nproc = 131072 + +[linux.diskusage] +diskusage.monitor.mounts = / +diskusage.monitor.usagemax = 90% + +[hdfs] +dfs.mem.namenode.heap = 40960 +dfs.mem.datanode.heap = 6144 +# in hdfs-site.xml +dfs.support.append = true +dfs.client.enable.read.from.local = true +dfs.block.local-path-access.user = gpadmin +dfs.datanode.max.transfer.threads = 40960 +dfs.client.socket-timeout = 300000000 +dfs.datanode.socket.write.timeout = 7200000 +dfs.namenode.handler.count = 60 +ipc.server.handler.queue.size = 3300 +dfs.datanode.handler.count = 60 +ipc.client.connection.maxidletime = 3600000 +dfs.namenode.accesstime.precision = -1 + http://git-wip-us.apache.org/repos/asf/bigtop/blob/22b8d765/bigtop-deploy/puppet/modules/hawq/templates/hawq-site.xml ---------------------------------------------------------------------- diff --git a/bigtop-deploy/puppet/modules/hawq/templates/hawq-site.xml b/bigtop-deploy/puppet/modules/hawq/templates/hawq-site.xml new file mode 100644 index 0000000..f3620b6 --- /dev/null +++ b/bigtop-deploy/puppet/modules/hawq/templates/hawq-site.xml @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> + +<configuration> + <property> + <name>hawq_master_address_host</name> + <value>localhost</value> + <description>The host name of hawq master.</description> + </property> + + <property> + <name>hawq_master_address_port</name> + <value>5432</value> + <description>The port of hawq master.</description> + </property> + + <property> + <name>hawq_standby_address_host</name> + <value>none</value> + <description>The host name of hawq standby master.</description> + </property> + + <property> + <name>hawq_segment_address_port</name> + <value>40000</value> + <description>The port of hawq segment.</description> + </property> + + <property> + <name>hawq_dfs_url</name> + <value>localhost:8020/hawq_default</value> + <description>URL for accessing HDFS.</description> + </property> + + <property> + <name>hawq_master_directory</name> + <value>~/hawq-data-directory/masterdd</value> + <description>The directory of hawq master.</description> + </property> + + <property> + <name>hawq_segment_directory</name> + <value>~/hawq-data-directory/segmentdd</value> + <description>The directory of hawq segment.</description> + </property> + + <property> + <name>hawq_master_temp_directory</name> + <value>/tmp</value> + <description>The temporary directory reserved for hawq master.</description> + </property> + + <property> + <name>hawq_segment_temp_directory</name> + <value>/tmp</value> + <description>The temporary directory reserved for hawq segment.</description> + </property> + + <!-- HAWQ resource manager parameters --> + <property> + <name>hawq_global_rm_type</name> + <value>none</value> + <description>The resource manager type to start for allocating resource. + 'none' means hawq resource manager exclusively uses whole + cluster; 'yarn' means hawq resource manager contacts YARN + resource manager to negotiate resource. + </description> + </property> + + <property> + <name>hawq_rm_memory_limit_perseg</name> + <value>64GB</value> + <description>The limit of memory usage in a hawq segment when + hawq_global_rm_type is set 'none'. + </description> + </property> + + <property> + <name>hawq_rm_nvcore_limit_perseg</name> + <value>16</value> + <description>The limit of virtual core usage in a hawq segment when + hawq_global_rm_type is set 'none'. + </description> + </property> + + <property> + <name>hawq_rm_yarn_address</name> + <value>localhost:8032</value> + <description>The address of YARN resource manager server.</description> + </property> + + <property> + <name>hawq_rm_yarn_scheduler_address</name> + <value>localhost:8030</value> + <description>The address of YARN scheduler server.</description> + </property> + + <property> + <name>hawq_rm_yarn_queue_name</name> + <value>default</value> + <description>The YARN queue name to register hawq resource manager.</description> + </property> + + <property> + <name>hawq_rm_yarn_app_name</name> + <value>hawq</value> + <description>The application name to register hawq resource manager in YARN.</description> + </property> + <!-- HAWQ resource manager parameters end here. --> + + <!-- HAWQ resource enforcement parameters --> + <property> + <name>hawq_re_cpu_enable</name> + <value>false</value> + <description>The control to enable/disable CPU resource enforcement.</description> + </property> + + <property> + <name>hawq_re_cgroup_mount_point</name> + <value>/sys/fs/cgroup</value> + <description>The mount point of CGroup file system for resource enforcement. + For example, /sys/fs/cgroup/cpu/hawq for CPU sub-system. + </description> + </property> + + <property> + <name>hawq_re_cgroup_hierarchy_name</name> + <value>hawq</value> + <description>The name of the hierarchy to accomodate CGroup directories/files for resource enforcement. + For example, /sys/fs/cgroup/cpu/hawq for CPU sub-system. + </description> + </property> + <!-- HAWQ resource enforcement parameters end here. --> +</configuration> http://git-wip-us.apache.org/repos/asf/bigtop/blob/22b8d765/bigtop-deploy/puppet/modules/hawq/templates/hdfs-client.xml ---------------------------------------------------------------------- diff --git a/bigtop-deploy/puppet/modules/hawq/templates/hdfs-client.xml b/bigtop-deploy/puppet/modules/hawq/templates/hdfs-client.xml new file mode 100644 index 0000000..3f08696 --- /dev/null +++ b/bigtop-deploy/puppet/modules/hawq/templates/hdfs-client.xml @@ -0,0 +1,331 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> + + +<configuration> + + <!-- KDC + <property> + <name>hadoop.security.authentication</name> + <value>kerberos</value> + </property> + KDC --> + + <!-- HA + <property> + <name>dfs.nameservices</name> + <value>phdcluster</value> + </property> + + <property> + <name>dfs.ha.namenodes.phdcluster</name> + <value>nn1,nn2</value> + </property> + + <property> + <name>dfs.namenode.rpc-address.phdcluster.nn1</name> + <value>mdw:9000</value> + </property> + + <property> + <name>dfs.namenode.rpc-address.phdcluster.nn2</name> + <value>smdw:9000</value> + </property> + +<property> +<name>dfs.namenode.http-address.phdcluster.nn1</name> +<value>mdw:50070</value> +</property> + +<property> +<name>dfs.namenode.http-address.phdcluster.nn2</name> +<value>smdw:50070</value> +</property> + +HA --> + + <!-- RPC client configuration --> + <property> + <name>rpc.client.timeout</name> + <value>3600000</value> + <description> + timeout interval of a RPC invocation in millisecond. default is 3600000. + </description> + </property> + <property> + <name>rpc.client.connect.tcpnodelay</name> + <value>true</value> + <description> + whether set socket TCP_NODELAY to true when connect to RPC server. default is true. + </description> + </property> + + <property> + <name>rpc.client.max.idle</name> + <value>10000</value> + <description> + the max idle time of a RPC connection in millisecond. default is 10000. + </description> + </property> + + <property> + <name>rpc.client.ping.interval</name> + <value>10000</value> + <description> + the interval which the RPC client send a heart beat to server. 0 means disable, default is 10000. + </description> + </property> + + <property> + <name>rpc.client.connect.timeout</name> + <value>600000</value> + <description> + the timeout interval in millisecond when the RPC client is trying to setup the connection. default is 600000. + </description> + </property> + + <property> + <name>rpc.client.connect.retry</name> + <value>10</value> + <description> + the max retry times if the RPC client fail to setup the connection to server. default is 10. + </description> + </property> + + <property> + <name>rpc.client.read.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the RPC client is trying to read from server. default is 3600000. + </description> + </property> + + <property> + <name>rpc.client.write.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the RPC client is trying to write to server. default is 3600000. + </description> + </property> + + <property> + <name>rpc.client.socket.linger.timeout</name> + <value>-1</value> + <description> + set value to socket SO_LINGER when connect to RPC server. -1 means default OS value. default is -1. + </description> + </property> + + <!-- dfs client configuration --> + <property> + <name>dfs.client.read.shortcircuit</name> + <value>true</value> + <description> + whether reading block file bypass datanode if the block and the client are on the same node. default is true. + </description> + </property> + + <property> + <name>dfs.default.replica</name> + <value>3</value> + <description> + the default number of replica. default is 3. + </description> + </property> + + <property> + <name>dfs.prefetchsize</name> + <value>10</value> + <description> + the default number of blocks which information will be prefetched. default is 10. + </description> + </property> + + <property> + <name>dfs.client.failover.max.attempts</name> + <value>15</value> + <description> + if multiply namenodes are configured, it is the max retry times when the dfs client try to issue a RPC call. default is 15. + </description> + </property> + + <property> + <name>dfs.default.blocksize</name> + <value>134217728</value> + <description> + default block size. default is 134217728. + </description> + </property> + + <property> + <name>dfs.client.log.severity</name> + <value>INFO</value> + <description> + the minimal log severity level, valid values include FATAL, ERROR, INFO, DEBUG1, DEBUG2, DEBUG3. default is INFO. + </description> + </property> + + <!-- input client configuration --> + <property> + <name>input.connect.timeout</name> + <value>600000</value> + <description> + the timeout interval in millisecond when the input stream is trying to setup the connection to datanode. default is 600000. + </description> + </property> + + <property> + <name>input.read.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the input stream is trying to read from datanode. default is 3600000. + </description> + </property> + + <property> + <name>input.write.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the input stream is trying to write to datanode. default is 3600000. + </description> + </property> + + <property> + <name>input.localread.default.buffersize</name> + <value>2097152</value> + <description> + number of bytes of the buffer which is used to hold the data from block file and verify checksum. + it is only used when "dfs.client.read.shortcircuit" is set to true. default is 1048576. + </description> + </property> + + <property> + <name>input.localread.blockinfo.cachesize</name> + <value>1000</value> + <description> + the size of block file path information cache. default is 1000. + </description> + </property> + + <property> + <name>input.read.getblockinfo.retry</name> + <value>3</value> + <description> + the max retry times when the client fail to get block information from namenode. default is 3. + </description> + </property> + + <!-- output client configuration --> + <property> + <name>output.replace-datanode-on-failure</name> + <value>false</value> + <description> + whether the client add new datanode into pipeline if the number of nodes in pipeline is less the specified number of replicas. default is true. + </description> + </property> + + <property> + <name>output.default.chunksize</name> + <value>512</value> + <description> + the number of bytes of a chunk in pipeline. default is 512. + </description> + </property> + + <property> + <name>output.default.packetsize</name> + <value>65536</value> + <description> + the number of bytes of a packet in pipeline. default is 65536. + </description> + </property> + + <property> + <name>output.default.write.retry</name> + <value>10</value> + <description> + the max retry times when the client fail to setup the pipeline. default is 10. + </description> + </property> + + <property> + <name>output.connect.timeout</name> + <value>600000</value> + <description> + the timeout interval in millisecond when the output stream is trying to setup the connection to datanode. default is 600000. + </description> + </property> + + <property> + <name>output.read.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the output stream is trying to read from datanode. default is 3600000. + </description> + </property> + + <property> + <name>output.write.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the output stream is trying to write to datanode. default is 3600000. + </description> + </property> + + <property> + <name>output.packetpool.size</name> + <value>1024</value> + <description> + the max number of packets in a file's packet pool. default is 1024. + </description> + </property> + + <property> + <name>output.close.timeout</name> + <value>900000</value> + <description> + the timeout interval in millisecond when close an output stream. default is 900000. + </description> + </property> + + <property> + <name>dfs.domain.socket.path</name> + <value>/var/lib/hadoop-hdfs/dn_socket</value> + <description> + Optional. This is a path to a UNIX domain socket that will be used for + communication between the DataNode and local HDFS clients. + If the string "_PORT" is present in this path, it will be replaced by the + TCP port of the DataNode. + </description> + </property> + + <property> + <name>dfs.client.use.legacy.blockreader.local</name> + <value>false</value> + <description> + Legacy short-circuit reader implementation based on HDFS-2246 is used + if this configuration parameter is true. + This is for the platforms other than Linux + where the new implementation based on HDFS-347 is not available. + </description> + </property> + +</configuration> http://git-wip-us.apache.org/repos/asf/bigtop/blob/22b8d765/bigtop-deploy/puppet/modules/hawq/templates/yarn-client.xml ---------------------------------------------------------------------- diff --git a/bigtop-deploy/puppet/modules/hawq/templates/yarn-client.xml b/bigtop-deploy/puppet/modules/hawq/templates/yarn-client.xml new file mode 100644 index 0000000..a5f9df7 --- /dev/null +++ b/bigtop-deploy/puppet/modules/hawq/templates/yarn-client.xml @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> + + +<configuration> + + <!-- KDC + <property> + <name>hadoop.security.authentication</name> + <value>kerberos</value> + </property> + KDC --> + + <!-- HA + <property> + <name>yarn.resourcemanager.ha</name> + <value>%RESOURCEMANAGER%:8032,%RESOURCEMANAGER2%:8032</value> + </property> + <property> + <name>yarn.resourcemanager.scheduler.ha</name> + <value>%RESOURCEMANAGER%:8030,%RESOURCEMANAGER2%:8030</value> + </property> + HA --> + + <!-- RPC client configuration --> + <property> + <name>rpc.client.timeout</name> + <value>3600000</value> + <description> + timeout interval of a RPC invocation in millisecond. default is 3600000. + </description> + </property> + + <property> + <name>rpc.client.connect.tcpnodelay</name> + <value>true</value> + <description> + whether set socket TCP_NODELAY to true when connect to RPC server. default is true. + </description> + </property> + + <property> + <name>rpc.client.max.idle</name> + <value>10000</value> + <description> + the max idle time of a RPC connection in millisecond. default is 10000. + </description> + </property> + + <property> + <name>rpc.client.ping.interval</name> + <value>10000</value> + <description> + the interval which the RPC client send a heart beat to server. 0 means disable, default is 10000. + </description> + </property> + + <property> + <name>rpc.client.connect.timeout</name> + <value>600000</value> + <description> + the timeout interval in millisecond when the RPC client is trying to setup the connection. default is 600000. + </description> + </property> + + <property> + <name>rpc.client.connect.retry</name> + <value>10</value> + <description> + the max retry times if the RPC client fail to setup the connection to server. default is 10. + </description> + </property> + + <property> + <name>rpc.client.read.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the RPC client is trying to read from server. default is 3600000. + </description> + </property> + + <property> + <name>rpc.client.write.timeout</name> + <value>3600000</value> + <description> + the timeout interval in millisecond when the RPC client is trying to write to server. default is 3600000. + </description> + </property> + + <property> + <name>rpc.client.socket.linger.timeout</name> + <value>-1</value> + <description> + set value to socket SO_LINGER when connect to RPC server. -1 means default OS value. default is -1. + </description> + </property> + + <property> + <name>yarn.client.failover.max.attempts</name> + <value>15</value> + <description> + if multiply resource managers are configured, it is the max retry times when the yarn client try to issue a RPC call. default is 15. + </description> + </property> +</configuration> http://git-wip-us.apache.org/repos/asf/bigtop/blob/22b8d765/bigtop-deploy/puppet/modules/hawq/tests/init.pp ---------------------------------------------------------------------- diff --git a/bigtop-deploy/puppet/modules/hawq/tests/init.pp b/bigtop-deploy/puppet/modules/hawq/tests/init.pp new file mode 100644 index 0000000..9f3840f --- /dev/null +++ b/bigtop-deploy/puppet/modules/hawq/tests/init.pp @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +hawq::node { "test-hawq-node": }
