~ibmcharmers/xenial/ibm-was-nd-dm-0

Owner: rajith-pv
Status: Needs Fixing
Vote: -1 (+2 needed for approval)

CPP?: No
OIL?: No

Here is a new Charm for IBM WebSphere Application Server Network Deployment DM (WAS ND DM) 9.0.0.0 for review

The IBM WAS ND DM has to be deployed on Ubuntu on Z (s390x)

1)Run the below juju command to agree IBM WAS ND License:
juju agree ibm-im/1 ibm-was-nd/1

Follow the below steps to deploy:
2) Run the following command to deploy
juju deploy ibm-was-nd-dm --series xenial

3)Attach IBM WAS ND packages by running the below specific commands.
juju attach ibm-was-nd-dm ibm_im_installer=</path/to/ibm_im_installer.zip>
juju attach ibm-was-nd-dm ibm_was_nd_installer=</path/to/ibm_was_nd_installer.zip>
juju attach ibm-was-nd-dm ibm_java_sdk_installer=</path/to/ibm_java_sdk_installer.zip>
juju attach ibm-was-nd-dm ibm_was_nd_fp=</path/to/ibm_java_sdk_installer.zip>

Source code can be found in below repository
Repo: https://code.launchpad.net/~ibmcharmers/charms/xenial/layer-ibm-was-nd-dm/trunk
Repo: https://code.launchpad.net/~ibmcharmers/charms/xenial/layer-ibm-was-nd-dm/trunk

The Charm has been pushed into charm store as well
branch:cs:~ibmcharmers/xenial/ibm-was-nd-dm-0


Tests

Substrate Status Results Last Updated
aws PENDING 19 days ago
gce PENDING 19 days ago
lxc PENDING 19 days ago

Voted: -1
kwmonroe wrote 2 months ago
Thanks for the work on the WAS ND suite of charms!

I was able to review the charm code, but I could not find WAS ND v9 installer resources. Please upload those files to our shared brickftp account, and we can verify deployment and tests. Thanks again for the work on this charm -- I'll set this review to "Needs Fixing" while we wait for access to the necessary files.

Also, I noticed the repo key in layer.yaml was pointing to the trusty repo. I've submitted the following merge proposal to fix that:

https://code.launchpad.net/~kwmonroe/charms/xenial/layer-ibm-was-nd-dm/repo-key/+merge/322541

Add Comment

Login to comment/vote on this review.


Policy Checklist

Description Unreviewed Pass Fail

General

Must verify that any software installed or utilized is verified as coming from the intended source. kwmonroe
  • Any software installed from the Ubuntu or CentOS default archives satisfies this due to the apt and yum sources including cryptographic signing information.
  • Third party repositories must be listed as a configuration option that can be overridden by the user and not hard coded in the charm itself.
  • Launchpad PPAs are acceptable as the add-apt-repository command retrieves the keys securely.
  • Other third party repositories are acceptable if the signing key is embedded in the charm.
Must provide a means to protect users from known security vulnerabilities in a way consistent with best practices as defined by either operating system policies or upstream documentation. kwmonroe
Basically, this means there must be instructions on how to apply updates if you use software not from distribution channels.
Must have hooks that are idempotent.
Should be built using charm layers. kwmonroe
Should use Juju Resources to deliver required payloads. kwmonroe

Testing and Quality

charm proof must pass without errors or warnings. kwmonroe
Must include passing unit, functional, or integration tests.
Tests must exercise all relations. kwmonroe
Tests must exercise config.
set-config, unset-config, and re-set must be tested as a minimum
Must not use anything infrastructure-provider specific (i.e. querying EC2 metadata service). kwmonroe
Must be self contained unless the charm is a proxy for an existing cloud service, e.g. ec2-elb charm.
Must not use symlinks. kwmonroe
Bundles must only use promulgated charms, they cannot reference charms in personal namespaces.
Must call Juju hook tools (relation-*, unit-*, config-*, etc) without a hard coded path. kwmonroe
Should include a tests.yaml for all integration tests. kwmonroe

Metadata

Must include a full description of what the software does. kwmonroe
Must include a maintainer email address for a team or individual who will be responsive to contact. kwmonroe
Must include a license. Call the file 'copyright' and make sure all files' licenses are specified clearly. kwmonroe
Must be under a Free license. kwmonroe
Must have a well documented and valid README.md. kwmonroe
Must describe the service. kwmonroe
Must describe how it interacts with other services, if applicable. kwmonroe
Must document the interfaces. kwmonroe
Must show how to deploy the charm. kwmonroe
Must define external dependencies, if applicable. kwmonroe
Should link to a recommend production usage bundle and recommended configuration if this differs from the default. kwmonroe
Should reference and link to upstream documentation and best practices. kwmonroe

Security

Must not run any network services using default passwords. kwmonroe
Must verify and validate any external payload kwmonroe
  • Known and understood packaging systems that verify packages like apt, pip, and yum are ok.
  • wget | sh style is not ok.
Should make use of whatever Mandatory Access Control system is provided by the distribution. kwmonroe
Should avoid running services as root.

Source Diff

Inline diff comments 0

No comments yet.

Back to file index

README.md

  1
--- 
  2
+++ README.md
  3
@@ -0,0 +1,208 @@
  4
+Charm for IBM WebSphere Application Server ND DM (WAS ND DM) 9.0.0.0
  5
+
  6
+## Overview
  7
+
  8
+IBM WebSphere Application Server Network Deployment provides an advanced, flexible runtime environment for large-scale application deployments. It offers near-continuous availability with advanced performance and management capabilities for mission-critical applications. For details on IBM Websphere Application Server Network Deployment,  as well as information on purchasing, please visit [Product Page][WAS-ND-product-page] and at the [Passport Advantage Site] [Passport-Advantage]. More information available at the [IBM Knowledge Center] [WAS-ND-Infocenter].
  9
+
 10
+`IBM WebSphere Application Server ND DM`
 11
+
 12
+This charm is using IBM WAS ND charm as a basic layer to install IBM WAS ND Software. After WAS ND installation, this charm will creates deployment manager profile to configure dynamic cluster setup.
 13
+
 14
+**Please note that the WAS ND charms (WAS ND, WAS ND DM and WAS ND Node) will create IBM WAS ND dynamic cluster.
 15
+
 16
+`IBM SDK, Java Technology Edition`
 17
+
 18
+WebSphere Application Server now uses a separately packaged, IBM Java SDK. It requires Java SDK version 8.
 19
+
 20
+## Prerequisites
 21
+
 22
+This charm makes use of resources, a feature only available in Juju 2.0. During deploy or upgrade, you will need to specify the installable package(s) required by this charm. Download your licensed IBM WebSphere Application Server ND packages from the [Product Page][WAS-ND-9.0.0.0-download].
 23
+
 24
+### Packages for Ubuntu on Z (s390x):
 25
+
 26
+BM Installation Manager 1.8 (`agent.installer.linux.gtk.s390x_1.8.5000.20160506_1125.zip`)
 27
+
 28
+IBM WAS ND 9.0.0(WAS_ND_V9.0_MP_ML.zip)
 29
+
 30
+IBM JAVA SDK 8 (sdk.repo.8030.java8.linux.zip)
 31
+
 32
+## Usage
 33
+
 34
+To use this charm, you must agree to the Terms of Use. You can view the full license for `IBM Installation Manager` and `IBM WebSphere Application Server Network Deployment` products by visiting the [im-license-info](http://www-03.ibm.com/software/sla/sladb.nsf/displaylis/39AFC1C1D485C4E085257E7300548B05?OpenDocument) and [was-nd-license-info] [license-info] page.
 35
+
 36
+Search for "IBM WebSphere Application Server Network Deployment" and choose the license that applies to the version you are using.
 37
+
 38
+
 39
+## Memory and Disk Requirements
 40
+
 41
+Minimum 2.0 GB of disk space for installed image and Minimum 1 GB of physical memory recommended. 
 42
+
 43
+WebSphere Application Server ND Charm requires 15 GB of root disk to download packages and install the IBM WebSphere Application Server ND Software. By default available root disk space is 8GB.
 44
+
 45
+To request a larger root disk, run the following command:
 46
+
 47
+		juju set-constraints root-disk=15G
 48
+
 49
+### Deploy
 50
+
 51
+1. Run the following commands to deploy this charm:
 52
+
 53
+
 54
+		juju deploy ibm-was-nd-dm --resource ibm_im_installer=</path/to/ibm_im_installer.zip> --resource ibm_was_nd_installer=</path/to/ibm_was_nd_installer.zip> --resource ibm_java_sdk_installer=</path/to/ibm_java_sdk_installer.zip> --resource ibm_was_nd_fp=</path/to/ibm_java_sdk_installer.zip> --series xenial 
 55
+
 56
+
 57
+**Note**: This charm requires acceptance of Terms of Use. When deploying from the Charm Store, these terms will be presented to you for your consideration.
 58
+
 59
+To accept the terms:
 60
+
 61
+		juju agree ibm-im/1 ibm-was-nd/1
 62
+		juju deploy ibm-was-nd-dm
 63
+
 64
+
 65
+2. To create deployment manager profile, `manageprofiles` command needs values for username and password. To provide these run the following command:
 66
+
 67
+		juju config ibm-was-nd-dm dm_admin_user=<user_name>
 68
+		juju config ibm-was-nd-dm dm_admin_pw=<password>
 69
+
 70
+	For eg:
 71
+
 72
+		juju config ibm-was-nd-dm was_admin_user="admin1"
 73
+		juju config ibm-was-nd-dm was_admin_pw="admin123"
 74
+
 75
+
 76
+**Note**: If any relation established between WAS ND DM and other charms, Please remove the relation before changing these config options.
 77
+
 78
+If any of these values is not set, then the charm will use default values for username/password. Once WAS ND DM charm is deployed successfully, user can also delete existing profile and create new DM profile by setting new values for these configuration options.
 79
+
 80
+
 81
+3. To Expose the IBM WAS ND DM Service to public, run the following command:
 82
+
 83
+		juju expose ibm-was-nd-dm
 84
+
 85
+
 86
+### Upgrade
 87
+
 88
+Once deployed, user can upgrade the existing installation by installing fixpacks:
 89
+
 90
+If user wants to upgrade existing installation of Installtion Manger, run the following command:
 91
+
 92
+		juju attach ibm-was-nd-dm ibm_im_fixpack=</path/to/fixpack.zip>
 93
+
 94
+To upgrade WAS ND DM installation:
 95
+	
 96
+		juju attach ibm-was-nd-dm ibm_was_nd_fp=</path/to/ibm_was_nd_fp.zip>
 97
+		
 98
+
 99
+**Note**: WAS ND DM and WAS ND Node installation should be in same level(If you want to upgrade WAS ND DM installation after cluster setup, make sure that WAS ND Node also upgraded with same fixpack version).
100
+
101
+
102
+### Verification
103
+
104
+After installing IBM WebSphere Application Server ND DM, use your web browser to see the WebSphere Application Server ND DM console. The URLs for WAS ND DM console are:
105
+
106
+		http://was-nd-dm-host:9060/ibm/console
107
+
108
+									OR
109
+
110
+		https://was-nd-dm-host:9043/ibm/console
111
+
112
+Here was-nd-dm-host represents the public ip address of your machine, where WAS ND DM is installed. 
113
+
114
+To login WAS ND DM console use user name and password created in step 2 in `Deploy` section.
115
+
116
+
117
+## Relating with IBM WAS ND Node charm
118
+
119
+When `IBM WAS ND DM` charm is related to `IBM WAS ND Node` charm, WAS ND DM charm will create dynamic cluster and WAS ND Node charm will federate the nodes to deployment manager(DM). Once all nodes federated to DM, cluster will be started.
120
+
121
+To add a relation, run the following command:
122
+
123
+		juju add-relation ibm-was-nd-dm ibm-was-nd-node
124
+
125
+To remove the relation, run the following command:
126
+
127
+		juju remove-relation ibm-was-nd-dm ibm-was-nd-node
128
+
129
+## Relating with IBM HTTP Server charm
130
+
131
+Install a web server, such as IBM Http Server in the machine where IBM WebSphere Application Server Base installed. It provides the more configuration options, additional layer of security and load balancing for applications deployed on WAS ND cluster. Installing a web server plug-in enables the web server to communicate with the application server.
132
+
133
+Here IBM WAS ND DM charm is related to IBM HTTP Server(IHS) subordinate charm. To add a relation, run the following command:
134
+
135
+		juju add-relation ibm-was-nd-dm ibm-http
136
+
137
+When IBM WAS ND DM charm is related to IBM HTTP Server charm, `IBM Http Server`, `Web Server Plug-ins for WebSphere Application Server` and `WebSphere Customization Toolbox` will be installed and configured. The web server definition is automatically created and configured during the configuration of the plug-in. Once IHS configured and admin server started, server status will be sent to the WAS ND DM charm to automatically propagate the plugin.xml file to IHS server. This plugin.xml file contains the WAS ND cluster details to redirect incoming requests to the cluster members.
138
+
139
+### Verification
140
+
141
+After establishing relation between IBM WAS ND DM and IBM Http Server charm, you can verify by accessing the sample servlet available in WAS ND using IHS URL and IHS running port 80:
142
+
143
+		http://ihs-host-name:80/snoop
144
+
145
+Here ihs-host-name represents the public ip address of your machine, where WAS Base and IHS deployed(IHS is subordinate charm so WAS Base and IHS charms will be deployed on same machine). 'snoop' is the sample servlet on WAS Base server to test the connection between WAS Base and IHS.
146
+
147
+To remove the relation, run the following command:
148
+
149
+		juju remove-relation ibm-was-nd-dm ibm-http
150
+
151
+## Relating with other consumer charms
152
+
153
+IBM WAS ND DM charm can be related to other consumer charms using the following command.
154
+
155
+		juju add-relation ibm-was-nd-dm <consumer-charm>
156
+
157
+When IBM WAS ND DM charm is related to any consumer charm such as IBM WXS, it provides WAS ND DM installation path, profile name, username and password to start/stop the deployment manager.
158
+
159
+
160
+## Configuration
161
+
162
+`was_admin_user`
163
+
164
+User name to login WAS ND deployment manager console
165
+
166
+`was_admin_pw`
167
+
168
+The password used to login WAS ND deployment manager console.
169
+
170
+
171
+## IBM WebSphere Application Server Network Deployment Information
172
+
173
+(1) General Information 
174
+
175
+1. Details about IBM WAS ND software available at [IBM Knowledge Center] [WAS-ND-Infocenter].
176
+
177
+2. Information on procuring WAS ND product is available at the [Passport Advantage site] [Passport-Advantage]
178
+
179
+(2) Download Information
180
+
181
+1. Details about WAS 9.0.0.0 download available [here] [[WAS-ND-9.0.0.0-download]
182
+
183
+2. Information about installation of WAS ND on 's390x' based machine available [here] [WAS-ND-for-s390x]  
184
+
185
+3. More information about IBM IM Downloadable file and WAS ND downloadable files available [here] [IBM-IM-more-info]
186
+
187
+## Contact Information
188
+
189
+For issues with this charm, please contact IBM Juju Support team <jujusupp@us.ibm.com>
190
+
191
+<!-- Links -->
192
+
193
+[WAS-ND-Infocenter]: http://www.ibm.com/support/knowledgecenter/SSAW57_9.0.0/as_ditamaps/was900_welcome_ndmp.html
194
+
195
+[WAS-ND-product-page]: http://www-03.ibm.com/software/products/en/appserv-wasnd
196
+
197
+[WAS-ND-9.0.0.0-download]: http://www-01.ibm.com/support/docview.wss?uid=swg27048323
198
+
199
+[Passport-Advantage]: http://www-01.ibm.com/software/passportadvantage/
200
+ 
201
+[WAS-ND-product-page]: http://www-03.ibm.com/software/products/en/appserv-wasnd
202
+
203
+[WAS-ND-9.0.0.0-download]: http://www-01.ibm.com/support/docview.wss?uid=swg27048323
204
+
205
+[IBM-IM-more-info]: http://www-01.ibm.com/support/docview.wss?uid=swg24038380
206
+
207
+[WAS-ND-for-s390x]: https://www.ibm.com/support/knowledgecenter/SSEQTP_9.0.0/as_ditamaps/was900_welcome_base.html
208
+
209
+[WAS-s390x-fixpack-info]: http://www-01.ibm.com/support/docview.wss?uid=swg24040035
210
+
211
+[license-info]:  http://www-03.ibm.com/software/sla/sladb.nsf/lilookup/6CCA78CD870DCA5985257D90005A5351?OpenDocument
Back to file index

config.yaml

 1
--- 
 2
+++ config.yaml
 3
@@ -0,0 +1,11 @@
 4
+options:
 5
+  dm_admin_user:
 6
+    type: string
 7
+    default: "wsadmin"
 8
+    description: |
 9
+        Admin user name to log in WAS DM console.
10
+  dm_admin_pw:
11
+    type: string
12
+    default: "wsadmin"
13
+    description: |
14
+        The password used to log in WAS DM console.
Back to file index

copyright

 1
--- 
 2
+++ copyright
 3
@@ -0,0 +1,13 @@
 4
+Copyright 2015 IBM Corporation
 5
+
 6
+This Charm is licensed under the Apache License, Version 2.0 (the "License");
 7
+you may not use this file except in compliance with the License.
 8
+You may obtain a copy of the License at
 9
+
10
+    http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+Unless required by applicable law or agreed to in writing, software
13
+distributed under the License is distributed on an "AS IS" BASIS,
14
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+See the License for the specific language governing permissions and
16
+limitations under the License.
Back to file index

icon.svg

 1
--- 
 2
+++ icon.svg
 3
@@ -0,0 +1,53 @@
 4
+<?xml version="1.0" encoding="UTF-8"?>
 5
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 6
+<!-- Creator: CorelDRAW X6 -->
 7
+<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="1in" height="0.999996in" version="1.1" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
 8
+viewBox="0 0 1116 1116"
 9
+ xmlns:xlink="http://www.w3.org/1999/xlink">
10
+ <defs>
11
+   <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="558.139" y1="0" x2="558.139" y2="1116.27">
12
+    <stop offset="0" stop-color="#BFA6E6"/>
13
+    <stop offset="1" stop-color="#6C5393"/>
14
+   </linearGradient>
15
+   <mask id="id1">
16
+     <linearGradient id="id2" gradientUnits="userSpaceOnUse" x1="558.139" y1="65.2803" x2="558.139" y2="342.715">
17
+      <stop offset="0" stop-opacity="1" stop-color="white"/>
18
+      <stop offset="0.141176" stop-opacity="-10.5451" stop-color="white"/>
19
+      <stop offset="1" stop-opacity="0" stop-color="white"/>
20
+     </linearGradient>
21
+    <rect fill="url(#id2)" width="1116" height="408"/>
22
+   </mask>
23
+ </defs>
24
+ <g id="Layer_x0020_1">
25
+  <metadata id="CorelCorpID_0Corel-Layer"/>
26
+  <path id="Background" fill="url(#id0)" d="M0 754l0 -392c0,-317 45,-362 362,-362l393 0c316,0 361,45 361,362l0 392c0,317 -45,362 -361,362l-393 0c-317,0 -362,-45 -362,-362z"/>
27
+  <path fill="#999999" mask="url(#id1)" d="M0 408l0 -46c0,-317 45,-362 362,-362l393 0c316,0 361,45 361,362l0 46c0,-317 -45,-362 -361,-362l-393 0c-317,0 -362,45 -362,362z"/>
28
+  <g id="_195711952">
29
+   <path fill="#CCCCCC" fill-rule="nonzero" d="M426 711l-54 0 -54 -195 -55 195 -53 0 -71 -249 -29 0 0 -47 120 0 0 47 -32 0 41 156 54 -203 48 0 57 201 39 -154 -33 0 0 -47 121 0 0 47 -33 0 -66 249zm210 -231l-1 0 -37 102 75 0 -37 -102zm36 190l33 0 -18 -44 -104 0 -17 44 32 0 0 41 -121 0 0 -47 32 0 86 -202 -33 0 0 -47 100 0 103 249 32 0 0 47 -125 0 0 -41zm201 -47c0,7 1,12 3,18 2,5 5,10 8,14 4,5 9,8 14,10 5,3 12,4 19,4 12,0 22,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-14 -5,-18 -3,-5 -7,-9 -12,-13 -5,-3 -10,-5 -16,-7 -6,-2 -12,-4 -18,-6 -10,-3 -20,-6 -30,-9 -9,-4 -19,-9 -28,-16 -21,-16 -32,-38 -32,-65 0,-12 2,-23 7,-34 5,-10 12,-19 20,-27 8,-8 18,-13 29,-18 10,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18l0 -17 44 0 0 80 -51 0c0,-11 -4,-21 -11,-28 -8,-7 -17,-11 -28,-11 -11,0 -20,3 -28,10 -8,6 -12,15 -12,27 0,7 1,13 4,18 3,5 7,9 12,12 4,3 10,5 15,7 6,2 12,3 18,5 11,3 22,7 33,10 10,4 20,10 30,17 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -8,37 -4,12 -11,21 -19,30 -8,8 -18,14 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -10,-4 -18,-10 -25,-19l0 19 -45 0 0 -88 52 0z"/>
30
+   <g>
31
+    <path fill="#C8C8C8" d="M425 711c-17,0 -35,0 -53,0 -18,-65 -37,-130 -55,-196 -18,66 -36,131 -55,196 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -10,0 -21,0 -32,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 15,0 31,0 47,0 19,67 38,134 57,201 13,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -25,68 -38,101 25,0 51,0 76,0 -13,-33 -25,-67 -38,-101zm37 189c10,0 21,0 32,0 -5,-14 -11,-29 -17,-44 -35,0 -70,0 -104,0 -6,15 -12,30 -17,44 10,0 21,0 32,0 0,14 0,28 0,42 -41,0 -81,0 -121,0 0,-16 0,-32 0,-47 10,0 21,0 31,0 29,-68 58,-135 87,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 10,0 21,0 31,0 0,15 0,31 0,47 -41,0 -83,0 -124,0 0,-14 0,-28 0,-42zm200 -46c0,6 1,12 3,17 2,6 5,11 9,15 4,4 8,7 14,10 5,2 11,3 18,3 12,0 23,-3 31,-11 8,-7 13,-17 13,-29 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-2 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -33,-38 -33,-65 0,-12 3,-24 8,-34 5,-11 11,-20 19,-27 9,-8 18,-14 29,-18 11,-4 22,-7 34,-7 10,0 20,2 29,6 10,3 18,9 24,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,9 -8,7 -11,16 -11,28 0,7 1,13 4,17 3,5 7,9 11,12 5,3 10,6 16,7 6,2 11,4 17,6 12,3 23,6 33,10 11,4 21,9 31,17 9,7 17,16 22,27 5,11 7,22 7,35 0,13 -2,25 -7,37 -5,11 -11,21 -19,29 -9,9 -19,15 -30,20 -12,4 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-11 -26,-20 0,7 0,13 0,20 -15,0 -29,0 -44,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
32
+    <path fill="#C5C5C5" d="M425 710c-18,0 -36,0 -54,0 -18,-65 -36,-130 -54,-195 -19,65 -37,130 -55,195 -18,0 -35,0 -53,0 -24,-83 -47,-166 -71,-249 -10,0 -20,0 -29,0 0,-15 0,-31 0,-47 40,0 80,0 120,0 0,16 0,32 0,47 -11,0 -22,0 -32,0 14,52 28,104 42,156 17,-68 35,-135 53,-203 16,0 32,0 48,0 19,67 38,134 57,201 13,-51 26,-102 40,-154 -12,0 -23,0 -34,0 0,-15 0,-31 0,-47 40,0 81,0 121,0 0,16 0,32 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -26,68 -38,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-44 -34,0 -69,0 -104,0 -5,14 -11,29 -17,44 11,0 22,0 32,0 0,14 0,28 0,41 -40,0 -80,0 -121,0 0,-15 0,-31 0,-47 11,0 21,0 32,0 29,-67 57,-134 86,-202 -11,0 -22,0 -33,0 0,-15 0,-31 0,-47 34,0 67,0 100,0 34,83 69,166 103,249 11,0 22,0 32,0 0,16 0,32 0,47 -42,0 -83,0 -125,0 0,-13 0,-27 0,-41zm201 -46c0,6 1,11 3,17 2,5 5,10 8,14 4,5 9,8 14,10 5,3 12,4 19,4 12,0 22,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-14 -5,-18 -3,-5 -7,-9 -12,-12 -4,-4 -10,-6 -16,-8 -6,-2 -12,-4 -17,-6 -11,-3 -21,-6 -31,-9 -9,-4 -18,-9 -28,-16 -21,-16 -32,-37 -32,-65 0,-12 2,-23 7,-34 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 10,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18 0,-6 0,-11 0,-17 15,0 29,0 44,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -17,-11 -28,-11 -11,0 -20,3 -28,10 -8,6 -12,16 -12,27 0,7 2,13 4,18 3,5 7,9 12,12 5,3 10,5 15,7 6,2 12,3 18,5 11,3 22,7 33,10 10,4 20,10 30,17 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,21 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-58 0,-87 17,0 34,0 52,0z"/>
33
+    <path fill="#C1C1C1" d="M424 710c-17,0 -35,0 -53,0 -18,-65 -37,-130 -55,-195 -18,65 -36,130 -55,195 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-32 0,-47 40,0 80,0 121,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 16,0 31,0 47,0 19,67 38,134 57,201 14,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -25,68 -38,102 25,0 51,0 76,0 -13,-34 -25,-68 -38,-102zm37 190c11,0 21,0 32,0 -5,-15 -11,-30 -17,-45 -35,0 -69,0 -104,0 -6,15 -12,30 -17,45 10,0 21,0 32,0 0,13 0,27 0,41 -41,0 -81,0 -121,0 0,-16 0,-32 0,-47 10,0 21,0 31,0 29,-68 58,-135 87,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 11,0 21,0 32,0 0,15 0,31 0,47 -42,0 -84,0 -125,0 0,-14 0,-28 0,-41zm200 -47c0,6 1,12 3,17 2,6 5,11 9,15 4,4 8,7 14,10 5,2 11,3 18,3 13,0 23,-3 31,-11 9,-7 13,-17 13,-29 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-2 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -32,-38 -32,-65 0,-12 2,-24 7,-34 5,-11 11,-20 20,-27 8,-8 17,-14 28,-18 11,-4 22,-7 34,-7 10,0 20,2 29,6 10,3 18,9 24,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,9 -7,7 -11,16 -11,28 0,7 1,13 4,18 3,4 7,8 11,11 5,3 10,6 16,7 6,2 11,4 17,6 12,3 23,6 33,10 11,4 21,9 31,17 9,7 17,17 22,27 5,11 7,22 7,35 0,13 -2,25 -7,37 -5,11 -11,21 -19,29 -9,9 -19,15 -30,20 -12,4 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-11 -26,-19 0,6 0,13 0,19 -14,0 -29,0 -44,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
34
+    <path fill="#BEBEBE" d="M424 710c-18,0 -36,0 -54,0 -18,-66 -36,-131 -54,-196 -19,65 -37,130 -55,196 -18,0 -35,0 -53,0 -24,-83 -47,-166 -71,-249 -10,0 -19,0 -29,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -22,0 -32,0 14,51 28,103 42,155 17,-67 35,-135 53,-203 16,0 32,0 48,0 19,67 38,134 57,202 13,-52 26,-103 40,-154 -11,0 -23,0 -34,0 0,-16 0,-32 0,-48 41,0 81,0 121,0 0,16 0,32 0,48 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -232c0,0 0,0 0,0 -13,34 -26,68 -38,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-44 -34,0 -69,0 -104,0 -5,14 -11,29 -17,44 11,0 22,0 32,0 0,14 0,28 0,42 -40,0 -80,0 -121,0 0,-16 0,-32 0,-48 11,0 21,0 32,0 29,-67 58,-134 86,-201 -11,0 -22,0 -32,0 0,-16 0,-32 0,-48 33,0 66,0 99,0 34,83 69,166 104,249 10,0 21,0 31,0 0,16 0,32 0,48 -42,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,11 3,17 2,6 5,10 8,15 4,4 9,7 14,9 6,3 12,4 19,4 12,0 22,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-14 -5,-18 -3,-5 -7,-9 -12,-12 -4,-4 -10,-6 -16,-8 -6,-2 -12,-4 -17,-5 -11,-4 -21,-7 -31,-10 -9,-4 -18,-9 -28,-16 -21,-16 -32,-37 -32,-65 0,-12 3,-23 7,-34 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 11,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18 0,-6 0,-11 0,-17 15,0 29,0 44,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -17,-11 -28,-11 -11,0 -20,4 -28,10 -8,7 -12,16 -12,27 0,7 2,13 4,18 3,5 7,9 12,12 5,3 10,5 15,7 6,2 12,3 18,5 11,3 22,7 33,11 10,3 21,9 30,16 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,22 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -9,-4 -18,-10 -25,-19 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-30 0,-59 0,-88 17,0 34,0 52,0z"/>
35
+    <path fill="#BABABA" d="M424 709c-18,0 -36,0 -54,0 -18,-65 -37,-130 -55,-195 -18,65 -36,130 -55,195 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-32 0,-47 40,0 80,0 121,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 16,0 32,0 47,0 19,67 38,134 57,201 14,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -32,0 -22,83 -44,166 -66,249zm210 -231c-1,0 -1,0 -1,0 -12,34 -25,68 -38,102 26,0 51,0 76,0 -13,-34 -25,-68 -37,-102zm36 190c11,0 22,0 32,0 -5,-15 -11,-30 -17,-45 -35,0 -69,0 -104,0 -6,15 -12,30 -17,45 10,0 21,0 32,0 0,13 0,27 0,41 -40,0 -81,0 -121,0 0,-16 0,-31 0,-47 11,0 21,0 32,0 28,-67 57,-135 86,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 11,0 21,0 32,0 0,16 0,31 0,47 -42,0 -84,0 -125,0 0,-14 0,-28 0,-41zm200 -47c0,6 1,12 3,18 2,5 5,10 9,14 4,4 8,7 14,10 5,2 11,3 18,3 13,0 23,-3 31,-10 9,-8 13,-18 13,-30 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-1 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -32,-38 -32,-65 0,-12 2,-24 7,-34 5,-11 11,-20 20,-27 8,-8 17,-14 28,-18 11,-4 22,-7 34,-7 11,0 20,2 30,6 9,3 17,9 23,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -50,0 -1,-11 -4,-20 -12,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,10 -7,6 -11,15 -11,27 0,7 1,13 4,18 3,4 7,8 11,11 5,3 10,6 16,7 6,2 11,4 17,6 12,3 23,6 33,10 11,4 21,9 31,17 9,7 17,17 22,27 5,11 7,22 7,35 0,13 -2,26 -7,37 -5,11 -11,21 -19,29 -9,9 -19,15 -30,20 -12,5 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-11 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
36
+    <path fill="#B6B6B6" d="M423 709c-18,0 -36,0 -53,0 -19,-66 -37,-131 -55,-196 -19,65 -37,130 -55,196 -18,0 -35,0 -53,0 -23,-83 -47,-166 -71,-249 -10,0 -19,0 -29,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -21,0 -32,0 14,51 28,103 42,155 18,-67 35,-135 53,-203 16,0 32,0 48,0 19,67 38,134 57,202 13,-52 26,-103 40,-154 -11,0 -22,0 -34,0 0,-16 0,-32 0,-48 41,0 81,0 121,0 0,16 0,32 0,48 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -232c0,0 0,0 0,0 -13,34 -26,68 -38,102 25,0 50,0 75,0 -12,-34 -24,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-29 -17,-44 -35,0 -70,0 -105,0 -5,15 -11,29 -17,44 11,0 22,0 32,0 0,14 0,28 0,42 -40,0 -80,0 -120,0 0,-16 0,-32 0,-48 10,0 21,0 31,0 29,-67 58,-134 86,-201 -11,0 -21,0 -32,0 0,-16 0,-32 0,-48 33,0 66,0 99,0 34,83 69,166 104,249 10,0 21,0 31,0 0,16 0,32 0,48 -41,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,12 3,17 2,6 5,10 9,15 3,4 8,7 13,9 6,3 12,4 19,4 12,0 23,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-13 -4,-18 -4,-5 -8,-9 -13,-12 -4,-3 -10,-6 -16,-8 -6,-2 -12,-4 -17,-5 -11,-3 -21,-7 -31,-10 -9,-4 -18,-9 -27,-16 -22,-16 -33,-37 -33,-64 0,-13 3,-24 7,-35 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 11,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 24,18 0,-6 0,-11 0,-17 14,0 28,0 43,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -16,-11 -28,-11 -11,0 -20,4 -28,10 -8,7 -12,16 -12,27 0,7 2,13 5,18 2,5 6,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 11,3 22,7 33,11 10,3 21,9 30,16 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,22 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -9,-4 -18,-10 -25,-19 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-30 0,-59 0,-88 17,0 35,0 52,0z"/>
37
+    <path fill="#B3B3B3" d="M423 708c-18,0 -36,0 -54,0 -18,-65 -36,-130 -55,-195 -18,65 -36,130 -55,195 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-31 0,-47 40,0 81,0 121,0 0,16 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 16,0 32,0 47,0 19,67 38,134 57,201 14,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-31 0,-47 40,0 80,0 120,0 0,16 0,31 0,47 -11,0 -21,0 -32,0 -22,83 -44,166 -66,249zm210 -231c-1,0 -1,0 -1,0 -12,34 -25,68 -38,102 26,0 51,0 76,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-45 -35,0 -69,0 -104,0 -6,15 -11,30 -17,45 11,0 21,0 32,0 0,13 0,27 0,41 -40,0 -81,0 -121,0 0,-16 0,-31 0,-47 11,0 21,0 32,0 28,-67 57,-135 86,-202 -11,0 -22,0 -33,0 0,-16 0,-31 0,-47 33,0 66,0 99,0 35,83 70,166 104,249 11,0 21,0 32,0 0,16 0,31 0,47 -42,0 -84,0 -125,0 0,-14 0,-28 0,-41zm200 -47c0,6 1,12 3,18 2,5 5,10 9,14 4,4 8,8 14,10 5,2 11,3 18,3 13,0 23,-3 31,-10 9,-8 13,-18 13,-30 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-7 -6,-2 -12,-4 -18,-6 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -32,-38 -32,-65 0,-12 2,-23 7,-34 5,-10 11,-20 20,-27 8,-8 18,-14 28,-18 11,-4 22,-6 34,-6 11,0 20,1 30,5 9,4 17,9 23,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -50,0 -1,-11 -4,-20 -12,-27 -7,-7 -16,-11 -27,-11 -11,0 -21,3 -28,10 -8,6 -12,15 -12,27 0,7 1,13 4,18 3,4 7,8 12,11 4,3 9,6 15,8 6,1 11,3 17,5 12,3 23,6 34,10 10,4 20,10 30,17 9,7 17,17 22,27 5,11 7,23 7,35 0,13 -2,26 -7,37 -4,11 -11,21 -19,29 -9,9 -18,15 -30,20 -11,5 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
38
+    <path fill="#AFAFAF" d="M422 708c-18,0 -36,0 -53,0 -19,-65 -37,-131 -55,-196 -18,65 -37,131 -55,196 -18,0 -35,0 -53,0 -23,-83 -47,-166 -71,-249 -10,0 -19,0 -29,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -21,0 -32,0 14,52 28,103 42,155 18,-67 35,-135 53,-203 16,0 32,0 48,0 19,67 38,135 57,202 13,-52 26,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -232c0,0 0,0 0,0 -13,34 -25,68 -38,102 25,0 50,0 76,0 -13,-34 -25,-68 -38,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-29 -17,-44 -35,0 -70,0 -105,0 -5,15 -11,29 -17,44 11,0 22,0 32,0 0,14 0,28 0,42 -40,0 -80,0 -120,0 0,-16 0,-32 0,-48 10,0 21,0 31,0 29,-67 58,-134 86,-201 -10,0 -21,0 -32,0 0,-16 0,-32 0,-48 33,0 66,0 99,0 34,83 69,166 104,249 10,0 21,0 31,0 0,16 0,32 0,48 -41,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,12 3,17 2,6 5,11 9,15 3,4 8,7 13,9 6,3 12,4 19,4 12,0 23,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-13 -4,-18 -4,-5 -8,-9 -12,-12 -5,-3 -11,-6 -17,-8 -6,-2 -11,-4 -17,-5 -11,-3 -21,-7 -31,-10 -9,-4 -18,-9 -27,-16 -22,-16 -33,-37 -33,-64 0,-13 3,-24 7,-34 5,-11 12,-20 20,-28 9,-7 18,-13 29,-17 11,-5 22,-7 34,-7 10,0 20,2 29,5 9,4 17,10 24,18 0,-6 0,-11 0,-17 14,0 28,0 43,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -16,-11 -27,-11 -12,0 -21,4 -29,10 -8,7 -12,16 -12,27 0,8 2,13 5,18 3,5 6,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 11,3 23,7 33,11 11,4 21,9 30,16 10,8 17,17 22,28 5,11 8,22 8,35 0,13 -3,25 -7,36 -5,12 -11,22 -20,30 -8,8 -18,15 -29,19 -12,5 -24,8 -38,8 -12,0 -22,-3 -32,-7 -9,-4 -18,-10 -25,-19 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-30 0,-59 0,-88 17,0 35,0 52,0z"/>
39
+    <path fill="#ABABAB" d="M422 707c-18,0 -36,0 -54,0 -18,-65 -36,-130 -55,-195 -18,65 -36,130 -54,195 -18,0 -36,0 -53,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-31 0,-47 40,0 81,0 121,0 0,16 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-135 54,-203 16,0 32,0 48,0 19,67 37,134 56,201 14,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-31 0,-47 40,0 80,0 120,0 0,16 0,31 0,47 -10,0 -21,0 -32,0 -22,83 -44,166 -66,249zm210 -231c0,0 -1,0 -1,0 -12,34 -25,68 -37,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-45 -35,0 -69,0 -104,0 -6,15 -11,30 -17,45 11,0 21,0 32,0 0,14 0,27 0,41 -40,0 -81,0 -121,0 0,-16 0,-31 0,-47 11,0 21,0 32,0 28,-67 57,-135 86,-202 -11,0 -22,0 -33,0 0,-16 0,-31 0,-47 33,0 66,0 99,0 35,83 70,166 104,249 11,0 21,0 32,0 0,16 0,31 0,47 -42,0 -84,0 -125,0 0,-14 0,-27 0,-41zm200 -47c0,6 1,12 3,18 2,5 5,10 9,14 4,4 8,8 14,10 5,2 11,3 18,3 13,0 23,-3 31,-10 9,-8 13,-17 13,-30 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-5 -16,-7 -6,-2 -12,-4 -18,-6 -11,-3 -21,-6 -30,-10 -9,-3 -19,-8 -28,-15 -21,-16 -32,-38 -32,-65 0,-12 2,-23 7,-34 5,-10 11,-19 20,-27 8,-8 18,-14 28,-18 11,-4 23,-6 34,-6 11,0 20,1 30,5 9,4 17,9 23,17 0,-5 0,-11 0,-16 15,0 29,0 43,0 0,26 0,53 0,80 -17,0 -33,0 -50,0 -1,-12 -4,-21 -12,-28 -7,-7 -16,-11 -27,-11 -11,0 -20,3 -28,10 -8,6 -12,15 -12,27 0,7 1,13 4,18 3,4 7,8 12,11 4,3 9,6 15,8 6,1 12,3 17,5 12,3 23,6 34,10 10,4 20,10 30,17 10,8 17,17 22,27 5,11 7,23 7,35 0,13 -2,26 -7,37 -4,11 -11,21 -19,29 -9,9 -18,15 -30,20 -11,5 -24,7 -37,7 -12,0 -23,-2 -32,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-58 0,-88 17,0 34,0 51,0z"/>
40
+    <path fill="#A8A8A8" d="M421 707c-18,0 -36,0 -53,0 -19,-65 -37,-131 -55,-196 -18,65 -37,131 -55,196 -18,0 -35,0 -53,0 -23,-83 -47,-166 -71,-249 -9,0 -19,0 -29,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -21,0 -32,0 14,52 28,103 42,155 18,-67 36,-135 53,-203 16,0 32,0 48,0 19,67 38,135 57,202 13,-52 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,33 -25,67 -38,101 25,0 50,0 76,0 -13,-34 -25,-68 -38,-101zm36 189c11,0 22,0 33,0 -6,-15 -11,-29 -17,-44 -35,0 -70,0 -104,0 -6,15 -12,29 -18,44 11,0 22,0 32,0 0,14 0,28 0,42 -40,0 -80,0 -120,0 0,-16 0,-32 0,-48 10,0 21,0 31,0 29,-67 58,-134 87,-201 -11,0 -22,0 -33,0 0,-16 0,-32 0,-48 33,0 66,0 99,0 35,83 69,166 104,249 10,0 21,0 31,0 0,16 0,32 0,48 -41,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,12 3,17 2,6 5,11 9,15 3,4 8,7 13,9 6,3 12,4 19,4 12,0 23,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-13 -4,-18 -4,-5 -8,-9 -12,-12 -5,-3 -11,-6 -17,-8 -6,-2 -11,-4 -17,-5 -11,-3 -21,-7 -31,-10 -9,-3 -18,-9 -27,-16 -22,-16 -33,-37 -33,-64 0,-13 3,-24 8,-34 4,-11 11,-20 19,-28 9,-7 18,-13 29,-17 11,-5 22,-7 34,-7 10,0 20,2 29,6 9,3 17,9 24,17 0,-6 0,-11 0,-17 14,0 28,0 43,0 0,27 0,54 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -16,-11 -27,-11 -11,0 -21,4 -29,10 -8,7 -12,16 -12,27 0,8 2,14 5,18 3,5 6,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 12,3 23,7 33,11 11,4 21,9 30,16 10,8 17,17 22,28 5,11 8,22 8,35 0,13 -2,25 -7,37 -5,11 -11,21 -20,29 -8,8 -18,15 -29,20 -12,4 -24,7 -38,7 -12,0 -22,-2 -32,-6 -9,-4 -18,-11 -25,-20 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-30 0,-59 0,-88 18,0 35,0 52,0z"/>
41
+    <path fill="#A4A4A4" d="M421 706c-18,0 -36,0 -54,0 -18,-65 -36,-130 -55,-195 -18,65 -36,130 -54,195 -18,0 -36,0 -53,0 -24,-83 -47,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-31 0,-47 41,0 81,0 121,0 0,16 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-135 54,-203 16,0 32,0 48,0 19,67 38,134 56,201 14,-51 27,-102 40,-154 -11,0 -22,0 -33,0 0,-16 0,-31 0,-47 40,0 80,0 121,0 0,16 0,31 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 -1,0 -1,0 -12,34 -25,68 -37,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-45 -34,0 -69,0 -104,0 -6,15 -11,30 -17,45 11,0 21,0 32,0 0,14 0,27 0,41 -40,0 -81,0 -121,0 0,-15 0,-31 0,-47 11,0 21,0 32,0 29,-67 57,-135 86,-202 -11,0 -22,0 -33,0 0,-16 0,-31 0,-47 33,0 66,0 99,0 35,83 70,166 104,249 11,0 21,0 32,0 0,16 0,32 0,47 -42,0 -83,0 -125,0 0,-14 0,-27 0,-41zm200 -47c0,6 1,12 3,18 3,5 5,10 9,14 4,4 9,8 14,10 5,2 11,4 18,4 13,0 23,-4 32,-11 8,-7 12,-17 12,-30 0,-8 -2,-14 -5,-19 -3,-4 -7,-8 -12,-12 -5,-3 -10,-5 -16,-7 -6,-2 -12,-4 -18,-6 -10,-3 -21,-6 -30,-9 -9,-4 -19,-9 -28,-16 -21,-16 -32,-38 -32,-65 0,-12 2,-23 7,-34 5,-10 12,-19 20,-27 8,-8 18,-14 28,-18 11,-4 23,-6 34,-6 11,0 20,1 30,5 9,4 17,9 23,18 0,-6 0,-12 0,-17 15,0 29,0 43,0 0,26 0,53 0,80 -17,0 -33,0 -50,0 -1,-11 -4,-21 -11,-28 -8,-7 -17,-11 -28,-11 -11,0 -20,3 -28,10 -8,6 -12,15 -12,27 0,7 1,13 4,18 3,4 7,8 12,11 4,3 10,6 15,8 6,1 12,3 17,5 12,3 23,6 34,10 10,4 20,10 30,17 10,8 17,17 22,27 5,11 7,23 7,35 0,13 -2,26 -7,37 -4,11 -11,21 -19,30 -8,8 -18,14 -30,19 -11,5 -24,7 -37,7 -12,0 -23,-2 -32,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-58 0,-88 17,0 34,0 51,0z"/>
42
+    <path fill="#A1A1A1" d="M420 706c-18,0 -35,0 -53,0 -19,-65 -37,-131 -55,-196 -18,65 -37,131 -55,196 -17,0 -35,0 -53,0 -23,-83 -47,-166 -71,-249 -9,0 -19,0 -29,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -10,0 -21,0 -32,0 14,52 28,104 42,155 18,-67 36,-135 53,-203 16,0 32,0 48,0 19,68 38,135 57,202 13,-52 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-48 40,0 80,0 120,0 0,16 0,32 0,48 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -25,67 -38,101 25,0 50,0 76,0 -13,-34 -25,-67 -38,-101zm36 189c11,0 22,0 33,0 -6,-14 -11,-29 -17,-44 -35,0 -70,0 -104,0 -6,15 -12,30 -17,44 10,0 21,0 32,0 0,14 0,28 0,42 -41,0 -81,0 -121,0 0,-16 0,-32 0,-47 10,0 21,0 31,0 29,-68 58,-135 87,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-48 33,0 66,0 99,0 35,83 69,166 104,250 10,0 21,0 31,0 0,15 0,31 0,47 -41,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,12 3,17 2,6 5,11 9,15 3,4 8,7 13,10 6,2 12,3 19,3 12,0 23,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-13 -4,-18 -3,-5 -7,-9 -12,-12 -5,-3 -11,-6 -17,-8 -5,-2 -11,-4 -17,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-9 -28,-16 -22,-16 -33,-37 -33,-64 0,-12 3,-24 8,-34 4,-11 11,-20 19,-27 9,-8 18,-14 29,-18 11,-5 22,-7 34,-7 10,0 20,2 29,6 10,3 17,9 24,17 0,-5 0,-11 0,-17 14,0 29,0 43,0 0,27 0,54 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,9 -8,7 -12,16 -12,27 0,8 2,14 5,18 3,5 6,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 12,3 23,7 33,11 11,4 21,9 30,16 10,8 17,17 22,28 5,11 8,22 8,35 0,13 -2,25 -7,37 -5,11 -11,21 -20,29 -8,8 -18,15 -29,20 -12,4 -24,7 -38,7 -11,0 -22,-2 -32,-6 -9,-4 -18,-11 -25,-20 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-30 0,-59 0,-88 18,0 35,0 52,0z"/>
43
+    <path fill="#9D9D9D" d="M420 705c-18,0 -36,0 -54,0 -18,-65 -36,-130 -55,-195 -18,65 -36,130 -54,195 -18,0 -35,0 -53,0 -24,-83 -47,-166 -71,-249 -10,0 -20,0 -30,0 0,-15 0,-31 0,-47 41,0 81,0 121,0 0,16 0,32 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-135 54,-203 16,0 32,0 48,0 19,67 38,134 57,201 13,-51 26,-102 39,-154 -11,0 -22,0 -33,0 0,-15 0,-31 0,-47 40,0 80,0 121,0 0,16 0,32 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 -1,0 -12,34 -25,68 -37,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-45 -34,0 -69,0 -104,0 -6,15 -11,30 -17,45 11,0 21,0 32,0 0,14 0,28 0,41 -40,0 -80,0 -121,0 0,-15 0,-31 0,-47 11,0 21,0 32,0 29,-67 57,-134 86,-202 -11,0 -22,0 -33,0 0,-15 0,-31 0,-47 33,0 66,0 100,0 34,83 69,166 103,249 11,0 21,0 32,0 0,16 0,32 0,47 -42,0 -83,0 -125,0 0,-13 0,-27 0,-41zm200 -47c0,6 1,12 4,18 2,5 5,10 8,14 4,4 9,8 14,10 5,2 12,4 18,4 13,0 23,-4 32,-11 8,-7 12,-17 12,-30 0,-8 -2,-14 -5,-19 -3,-4 -7,-8 -12,-12 -5,-3 -10,-5 -16,-7 -6,-2 -12,-4 -18,-6 -10,-3 -21,-6 -30,-9 -9,-4 -19,-9 -28,-16 -21,-16 -32,-38 -32,-65 0,-12 2,-23 7,-34 5,-10 12,-19 20,-27 8,-8 18,-14 29,-18 10,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18 0,-6 0,-11 0,-17 15,0 29,0 43,0 0,27 0,53 0,80 -16,0 -33,0 -50,0 0,-11 -4,-21 -11,-28 -8,-7 -17,-11 -28,-11 -11,0 -20,3 -28,10 -8,6 -12,15 -12,27 0,7 1,13 4,18 3,5 7,8 12,11 4,4 10,6 15,8 6,2 12,3 17,5 12,3 23,6 34,10 10,4 20,10 30,17 10,8 17,17 22,28 5,10 7,22 7,34 0,13 -2,26 -7,37 -4,11 -11,21 -19,30 -8,8 -18,14 -30,19 -11,5 -24,7 -37,7 -12,0 -23,-2 -32,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-58 0,-88 17,0 34,0 51,0z"/>
44
+    <path fill="#999999" d="M419 705c-18,0 -35,0 -53,0 -18,-65 -37,-130 -55,-196 -18,66 -37,131 -55,196 -17,0 -35,0 -53,0 -23,-83 -47,-166 -71,-249 -9,0 -19,0 -29,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -10,0 -21,0 -32,0 14,52 28,104 42,155 18,-67 36,-135 53,-202 16,0 32,0 48,0 19,67 38,134 57,201 13,-52 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -25,67 -38,101 25,0 51,0 76,0 -13,-34 -25,-67 -38,-101zm36 189c11,0 22,0 33,0 -6,-14 -11,-29 -17,-44 -35,0 -70,0 -104,0 -6,15 -12,30 -17,44 10,0 21,0 32,0 0,14 0,28 0,42 -41,0 -81,0 -121,0 0,-16 0,-32 0,-47 10,0 21,0 31,0 29,-68 58,-135 87,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 10,0 21,0 31,0 0,15 0,31 0,47 -41,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,12 3,17 2,6 5,11 9,15 4,4 8,7 13,10 6,2 12,3 19,3 12,0 23,-3 31,-11 8,-7 13,-17 13,-30 0,-7 -2,-13 -5,-18 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-2 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-9 -28,-15 -22,-17 -33,-38 -33,-65 0,-12 3,-24 8,-34 5,-11 11,-20 19,-27 9,-8 18,-14 29,-18 11,-5 22,-7 34,-7 10,0 20,2 29,6 10,3 17,9 24,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,9 -8,7 -12,16 -12,28 0,7 2,13 5,17 3,5 7,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 12,4 23,7 33,11 11,4 21,9 31,16 9,8 17,17 22,28 5,11 7,22 7,35 0,13 -2,25 -7,37 -5,11 -11,21 -20,29 -8,8 -18,15 -29,20 -12,4 -24,7 -38,7 -11,0 -22,-2 -32,-6 -9,-4 -17,-11 -25,-20 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-29 0,-59 0,-88 18,0 35,0 52,0z"/>
45
+    <path fill="#969696" d="M419 704c-18,0 -36,0 -54,0 -18,-65 -36,-130 -54,-195 -19,65 -37,130 -55,195 -18,0 -35,0 -53,0 -24,-83 -47,-166 -71,-249 -10,0 -20,0 -29,0 0,-15 0,-31 0,-47 40,0 80,0 120,0 0,16 0,32 0,47 -11,0 -22,0 -32,0 14,52 27,104 41,156 18,-68 36,-135 54,-203 16,0 32,0 48,0 19,67 38,134 57,201 13,-51 26,-102 39,-154 -11,0 -22,0 -33,0 0,-15 0,-31 0,-47 40,0 81,0 121,0 0,16 0,32 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 -1,0 -12,34 -25,68 -37,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-44 -34,0 -69,0 -104,0 -5,14 -11,29 -17,44 11,0 21,0 32,0 0,14 0,28 0,41 -40,0 -80,0 -121,0 0,-15 0,-31 0,-47 11,0 21,0 32,0 29,-67 57,-134 86,-202 -11,0 -22,0 -33,0 0,-15 0,-31 0,-47 33,0 67,0 100,0 34,83 69,166 103,249 11,0 21,0 32,0 0,16 0,32 0,47 -42,0 -83,0 -125,0 0,-13 0,-27 0,-41zm201 -47c0,7 1,12 3,18 2,5 5,10 8,14 4,5 9,8 14,10 5,2 12,4 19,4 12,0 22,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-14 -5,-18 -3,-5 -7,-9 -12,-13 -5,-3 -10,-5 -16,-7 -6,-2 -12,-4 -18,-6 -10,-3 -20,-6 -30,-9 -9,-4 -19,-9 -28,-16 -21,-16 -32,-38 -32,-65 0,-12 2,-23 7,-34 5,-10 12,-19 20,-27 8,-8 18,-13 29,-18 10,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18 0,-6 0,-11 0,-17 15,0 29,0 44,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-21 -11,-28 -8,-7 -17,-11 -28,-11 -11,0 -20,3 -28,10 -8,6 -12,15 -12,27 0,7 1,13 4,18 3,5 7,9 12,12 4,3 10,5 15,7 6,2 12,3 18,5 11,3 22,7 33,10 10,4 20,10 30,17 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -8,37 -4,12 -11,21 -19,30 -8,8 -18,14 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-58 0,-88 17,0 34,0 52,0z"/>
46
+    <path fill="#929292" d="M418 704c-17,0 -35,0 -53,0 -18,-65 -37,-130 -55,-196 -18,66 -36,131 -55,196 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -10,0 -21,0 -32,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 15,0 31,0 47,0 19,67 38,134 57,201 13,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -25,68 -38,101 25,0 51,0 76,0 -13,-33 -25,-67 -38,-101zm37 189c10,0 21,0 32,0 -5,-14 -11,-29 -17,-44 -35,0 -70,0 -104,0 -6,15 -12,30 -17,44 10,0 21,0 32,0 0,14 0,28 0,42 -41,0 -81,0 -121,0 0,-16 0,-32 0,-47 10,0 21,0 31,0 29,-68 58,-135 87,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 10,0 21,0 31,0 0,15 0,31 0,47 -41,0 -83,0 -124,0 0,-14 0,-28 0,-42zm200 -46c0,6 1,12 3,17 2,6 5,11 9,15 4,4 8,7 14,10 5,2 11,3 18,3 12,0 23,-3 31,-11 8,-7 13,-17 13,-29 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-2 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -33,-38 -33,-65 0,-12 3,-24 8,-34 5,-11 11,-20 19,-27 9,-8 18,-14 29,-18 11,-5 22,-7 34,-7 10,0 20,2 29,6 10,3 18,9 24,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,9 -8,7 -11,16 -11,28 0,7 1,13 4,17 3,5 7,9 11,12 5,3 10,6 16,7 6,2 11,4 17,6 12,3 23,6 33,10 11,4 21,9 31,17 9,7 17,16 22,27 5,11 7,22 7,35 0,13 -2,25 -7,37 -5,11 -11,21 -19,29 -9,9 -19,15 -30,20 -12,4 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-11 -26,-20 0,7 0,13 0,20 -15,0 -29,0 -44,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
47
+    <path fill="#8E8E8E" d="M418 703c-18,0 -36,0 -54,0 -18,-65 -36,-130 -54,-195 -19,65 -37,130 -55,195 -18,0 -35,0 -53,0 -24,-83 -47,-166 -71,-249 -10,0 -20,0 -29,0 0,-15 0,-31 0,-47 40,0 80,0 120,0 0,16 0,32 0,47 -11,0 -22,0 -32,0 14,52 28,104 42,156 17,-68 35,-135 53,-203 16,0 32,0 48,0 19,67 38,134 57,201 13,-51 26,-102 40,-154 -12,0 -23,0 -34,0 0,-15 0,-31 0,-47 40,0 81,0 121,0 0,16 0,32 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -26,68 -38,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-44 -34,0 -69,0 -104,0 -5,14 -11,29 -17,44 11,0 22,0 32,0 0,14 0,28 0,41 -40,0 -80,0 -121,0 0,-15 0,-31 0,-47 11,0 21,0 32,0 29,-67 57,-134 86,-202 -11,0 -22,0 -33,0 0,-15 0,-31 0,-47 34,0 67,0 100,0 34,83 69,166 103,249 11,0 22,0 32,0 0,16 0,32 0,47 -42,0 -83,0 -125,0 0,-13 0,-27 0,-41zm201 -47c0,7 1,12 3,18 2,5 5,10 8,14 4,5 9,8 14,10 5,3 12,4 19,4 12,0 22,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-14 -5,-18 -3,-5 -7,-9 -12,-12 -4,-4 -10,-6 -16,-8 -6,-2 -12,-4 -17,-6 -11,-3 -21,-6 -31,-9 -9,-4 -18,-9 -28,-16 -21,-16 -32,-37 -32,-65 0,-12 2,-23 7,-34 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 10,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18 0,-6 0,-11 0,-17 15,0 29,0 44,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -17,-11 -28,-11 -11,0 -20,3 -28,10 -8,6 -12,16 -12,27 0,7 2,13 4,18 3,5 7,9 12,12 5,3 10,5 15,7 6,2 12,3 18,5 11,3 22,7 33,10 10,4 20,10 30,17 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,21 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -10,-4 -18,-10 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-58 0,-88 17,0 34,0 52,0z"/>
48
+    <path fill="#8B8B8B" d="M417 703c-17,0 -35,0 -53,0 -18,-65 -37,-130 -55,-195 -18,65 -36,130 -55,195 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-32 0,-47 40,0 80,0 121,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 16,0 31,0 47,0 19,67 38,134 57,201 14,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 -22,83 -44,166 -66,249zm210 -231c0,0 0,0 0,0 -13,34 -25,68 -38,102 25,0 51,0 76,0 -13,-34 -25,-68 -38,-102zm37 190c11,0 21,0 32,0 -5,-15 -11,-30 -17,-45 -35,0 -69,0 -104,0 -6,15 -12,30 -17,45 10,0 21,0 32,0 0,13 0,27 0,41 -41,0 -81,0 -121,0 0,-16 0,-32 0,-47 10,0 21,0 31,0 29,-68 58,-135 87,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 11,0 21,0 32,0 0,15 0,31 0,47 -42,0 -84,0 -125,0 0,-14 0,-28 0,-41zm200 -47c0,6 1,12 3,17 2,6 5,11 9,15 4,4 8,7 14,10 5,2 11,3 18,3 13,0 23,-3 31,-11 9,-7 13,-17 13,-29 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-2 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -32,-38 -32,-65 0,-12 2,-24 7,-34 5,-11 11,-20 20,-27 8,-8 17,-14 28,-18 11,-4 22,-7 34,-7 10,0 20,2 29,6 10,3 18,9 24,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,9 -7,7 -11,16 -11,28 0,7 1,13 4,18 3,4 7,8 11,11 5,3 10,6 16,7 6,2 11,4 17,6 12,3 23,6 33,10 11,4 21,9 31,17 9,7 17,17 22,27 5,11 7,22 7,35 0,13 -2,25 -7,37 -5,11 -11,21 -19,29 -9,9 -19,15 -30,20 -12,4 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-11 -26,-19 0,6 0,13 0,19 -14,0 -29,0 -44,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
49
+    <path fill="#878787" d="M417 703c-18,0 -36,0 -54,0 -18,-66 -36,-131 -54,-196 -19,65 -37,130 -55,196 -18,0 -35,0 -53,0 -24,-83 -47,-166 -71,-250 -10,0 -19,0 -29,0 0,-15 0,-31 0,-47 40,0 80,0 120,0 0,16 0,32 0,47 -11,0 -22,0 -32,0 14,52 28,104 42,156 17,-68 35,-135 53,-203 16,0 32,0 48,0 19,67 38,134 57,201 13,-51 26,-102 40,-154 -11,0 -23,0 -34,0 0,-15 0,-31 0,-47 41,0 81,0 121,0 0,16 0,32 0,47 -11,0 -22,0 -33,0 -22,84 -44,167 -66,250zm210 -232c0,0 0,0 0,0 -13,34 -26,68 -38,102 25,0 50,0 75,0 -12,-34 -25,-68 -37,-102zm36 190c11,0 22,0 33,0 -6,-15 -12,-30 -18,-44 -34,0 -69,0 -104,0 -5,14 -11,29 -17,44 11,0 22,0 32,0 0,14 0,28 0,42 -40,0 -80,0 -121,0 0,-16 0,-32 0,-48 11,0 21,0 32,0 29,-67 58,-134 86,-202 -11,0 -22,0 -32,0 0,-15 0,-31 0,-47 33,0 66,0 99,0 34,83 69,166 104,249 10,0 21,0 31,0 0,16 0,32 0,48 -42,0 -83,0 -125,0 0,-14 0,-28 0,-42zm201 -46c0,6 1,11 3,17 2,6 5,10 8,15 4,4 9,7 14,9 6,3 12,4 19,4 12,0 22,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-14 -5,-18 -3,-5 -7,-9 -12,-12 -4,-4 -10,-6 -16,-8 -6,-2 -12,-4 -17,-5 -11,-4 -21,-7 -31,-10 -9,-4 -18,-9 -28,-16 -21,-16 -32,-37 -32,-65 0,-12 3,-23 7,-34 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 11,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 23,18 0,-6 0,-11 0,-17 15,0 29,0 44,0 0,27 0,53 0,80 -17,0 -34,0 -51,0 0,-11 -4,-20 -11,-28 -7,-7 -17,-11 -28,-11 -11,0 -20,4 -28,10 -8,7 -12,16 -12,27 0,7 2,13 4,18 3,5 7,9 12,12 5,3 10,5 15,7 6,2 12,3 18,5 11,3 22,7 33,11 10,3 21,9 30,16 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,21 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -9,-4 -18,-10 -25,-19 0,7 0,13 0,20 -15,0 -30,0 -45,0 0,-30 0,-59 0,-88 17,0 34,0 52,0z"/>
50
+    <path fill="#848484" d="M417 702c-18,0 -36,0 -54,0 -18,-65 -37,-130 -55,-195 -18,65 -36,130 -55,195 -17,0 -35,0 -52,0 -24,-83 -48,-166 -71,-249 -10,0 -20,0 -30,0 0,-16 0,-32 0,-47 40,0 80,0 121,0 0,15 0,31 0,47 -11,0 -22,0 -33,0 14,52 28,104 42,156 18,-68 36,-136 54,-203 16,0 32,0 47,0 19,67 38,134 57,201 14,-51 27,-103 40,-154 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 40,0 80,0 120,0 0,15 0,31 0,47 -11,0 -22,0 -32,0 -22,83 -44,166 -66,249zm210 -231c-1,0 -1,0 -1,0 -12,34 -25,68 -38,102 26,0 51,0 76,0 -13,-34 -25,-68 -37,-102zm36 190c11,0 22,0 32,0 -5,-15 -11,-30 -17,-45 -35,0 -69,0 -104,0 -6,15 -12,30 -17,45 10,0 21,0 32,0 0,13 0,27 0,41 -40,0 -81,0 -121,0 0,-16 0,-31 0,-47 11,0 21,0 32,0 28,-67 57,-135 86,-202 -11,0 -22,0 -33,0 0,-16 0,-32 0,-47 33,0 66,0 99,0 35,83 69,166 104,249 11,0 21,0 32,0 0,16 0,31 0,47 -42,0 -84,0 -125,0 0,-14 0,-28 0,-41zm200 -47c0,6 1,12 3,18 2,5 5,10 9,14 4,4 8,7 14,10 5,2 11,3 18,3 13,0 23,-3 31,-10 9,-8 13,-18 13,-30 0,-8 -2,-14 -5,-19 -3,-5 -7,-9 -12,-12 -5,-3 -10,-6 -16,-8 -6,-1 -12,-3 -18,-5 -11,-3 -21,-6 -30,-10 -10,-3 -19,-8 -28,-15 -22,-16 -32,-38 -32,-65 0,-12 2,-24 7,-34 5,-11 11,-20 20,-27 8,-8 17,-14 28,-18 11,-4 22,-7 34,-7 11,0 20,2 30,6 9,3 17,9 23,17 0,-5 0,-11 0,-16 14,0 29,0 43,0 0,26 0,53 0,79 -17,0 -34,0 -50,0 -1,-11 -4,-20 -12,-27 -7,-8 -16,-11 -27,-11 -11,0 -21,3 -29,10 -7,6 -11,15 -11,27 0,7 1,13 4,18 3,4 7,8 11,11 5,3 10,6 16,7 6,2 11,4 17,6 12,3 23,6 33,10 11,4 21,9 31,17 9,7 17,17 22,27 5,11 7,22 7,35 0,13 -2,26 -7,37 -5,11 -11,21 -19,29 -9,9 -19,15 -30,20 -12,5 -24,7 -38,7 -11,0 -22,-2 -31,-6 -10,-4 -18,-11 -25,-19 0,6 0,13 0,19 -15,0 -30,0 -45,0 0,-29 0,-59 0,-88 17,0 34,0 51,0z"/>
51
+   </g>
52
+   <path fill="gray" fill-rule="nonzero" d="M416 702l-54 0 -54 -196 -55 196 -53 0 -71 -249 -29 0 0 -48 120 0 0 48 -32 0 42 155 53 -203 48 0 57 202 40 -154 -34 0 0 -48 121 0 0 48 -33 0 -66 249zm210 -232l0 0 -38 102 75 0 -37 -102zm36 190l33 0 -17 -44 -105 0 -17 44 32 0 0 42 -120 0 0 -48 31 0 86 -201 -32 0 0 -48 99 0 104 249 31 0 0 48 -125 0 0 -42zm201 -46c0,6 1,12 3,17 2,6 5,10 9,15 3,4 8,7 13,9 6,3 12,4 19,4 12,0 23,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-13 -4,-18 -4,-5 -8,-9 -13,-12 -4,-3 -10,-6 -16,-8 -6,-2 -12,-4 -17,-5 -11,-3 -21,-7 -31,-10 -9,-4 -18,-9 -27,-16 -22,-16 -33,-37 -33,-64 0,-13 3,-24 7,-35 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 11,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 24,18l0 -17 43 0 0 80 -51 0c0,-11 -4,-20 -11,-28 -7,-7 -16,-11 -28,-11 -11,0 -20,4 -28,10 -8,7 -12,16 -12,27 0,7 2,13 5,18 2,5 6,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 11,3 22,7 33,11 10,3 21,9 30,16 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,22 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -9,-4 -18,-10 -25,-19l0 20 -45 0 0 -88 52 0z"/>
53
+   <path fill="white" fill-rule="nonzero" d="M416 702l-54 0 -54 -196 -55 196 -53 0 -71 -249 -29 0 0 -48 120 0 0 48 -32 0 42 155 53 -203 48 0 57 202 40 -154 -34 0 0 -48 121 0 0 48 -33 0 -66 249zm210 -232l0 0 -38 102 75 0 -37 -102zm36 190l33 0 -17 -44 -105 0 -17 44 32 0 0 42 -120 0 0 -48 31 0 86 -201 -32 0 0 -48 99 0 104 249 31 0 0 48 -125 0 0 -42zm201 -46c0,6 1,12 3,17 2,6 5,10 9,15 3,4 8,7 13,9 6,3 12,4 19,4 12,0 23,-4 31,-11 8,-7 12,-17 12,-30 0,-7 -1,-13 -4,-18 -4,-5 -8,-9 -13,-12 -4,-3 -10,-6 -16,-8 -6,-2 -12,-4 -17,-5 -11,-3 -21,-7 -31,-10 -9,-4 -18,-9 -27,-16 -22,-16 -33,-37 -33,-64 0,-13 3,-24 7,-35 5,-10 12,-19 20,-27 8,-7 18,-13 29,-18 11,-4 22,-6 34,-6 10,0 20,2 29,5 9,4 17,10 24,18l0 -17 43 0 0 80 -51 0c0,-11 -4,-20 -11,-28 -7,-7 -16,-11 -28,-11 -11,0 -20,4 -28,10 -8,7 -12,16 -12,27 0,7 2,13 5,18 2,5 6,9 11,12 5,3 10,5 16,7 5,2 11,4 17,5 11,3 22,7 33,11 10,3 21,9 30,16 10,8 17,17 22,28 5,10 8,22 8,34 0,14 -3,26 -7,37 -5,12 -12,22 -20,30 -8,8 -18,15 -30,19 -11,5 -24,7 -37,7 -12,0 -22,-2 -32,-6 -9,-4 -18,-10 -25,-19l0 20 -45 0 0 -88 52 0z"/>
54
+  </g>
55
+ </g>
56
+</svg>
Back to file index

layer.yaml

1
--- 
2
+++ layer.yaml
3
@@ -0,0 +1,2 @@
4
+repo: bzr+ssh://bazaar.launchpad.net/~ibmcharmers/charms/trusty/layer-ibm-was-nd-dm/trunk/
5
+includes: ['layer:ibm-was-nd', 'interface:was-nd', 'interface:dm-node', 'interface:was-ihs']
Back to file index

metadata.yaml

 1
--- 
 2
+++ metadata.yaml
 3
@@ -0,0 +1,18 @@
 4
+name: ibm-was-nd-dm
 5
+summary: WebSphere Application Server Network Deployment Deployment Manager 
 6
+maintainer: IBM Juju Support Team <jujusupp@us.ibm.com> 
 7
+description: |
 8
+ IBM WebSphere Application Server Network Deployment provides an advanced, flexible runtime environment for large-scale application deployments. It offers near-continuous availability with advanced performance and management capabilities for mission-critical applications.
 9
+tags: 
10
+  - ibm
11
+  - misc
12
+subordinate: false
13
+terms:
14
+  - ibm-was-nd/1
15
+provides:
16
+  dm-node:
17
+    interface: dm-node
18
+  was-ihs:
19
+    interface: was-ihs
20
+  was-nd:
21
+    interface: was-nd
Back to file index

reactive/ibm-was-nd-dm.sh

  1
--- 
  2
+++ reactive/ibm-was-nd-dm.sh
  3
@@ -0,0 +1,438 @@
  4
+#!/bin/bash
  5
+
  6
+set -ex
  7
+
  8
+source charms.reactive.sh
  9
+
 10
+reactive_states=`charms.reactive -y get_states`
 11
+
 12
+WAS_ND_INSTALL_PATH=/root/IBM/WebSphere/AppServer/V9/ND
 13
+IM_INSTALL_PATH=/opt/IBM/InstallationManager
 14
+ARCHITECTURE=`uname -m`
 15
+profile_name="dmgr"
 16
+old_dm_admin=""
 17
+old_dm_pw=""
 18
+dm_admin_name=`config-get dm_admin_user`
 19
+dm_admin_pw=`config-get dm_admin_pw`
 20
+profilepath=/root/IBM/WebSphere/AppServer/V9/ND/profiles
 21
+cluster_prefix="dyncluster"
 22
+profile_template_path="$WAS_ND_INSTALL_PATH/profileTemplates/dmgr"
 23
+ihsadminuser="usr"
 24
+ihsadminpw=`pwgen -N 1 15`
 25
+ihsadmingrp="grp"
 26
+
 27
+if [ -f $CHARM_DIR/files/was_users.txt ]; then
 28
+  source $CHARM_DIR/files/was_users.txt
 29
+  old_dm_admin=$user_name
 30
+  old_dm_pw=$password
 31
+fi
 32
+
 33
+#Get the cfguser name based on the remote unit name
 34
+get_cfgusername()
 35
+{
 36
+  cfgusername=$1
 37
+  cfgusername=`echo $cfgusername | cut -d"/" -f1`
 38
+  cfgusername=`echo "$cfgusername" | sed -r 's/-//g' | sed -r 's/ibm//g'`
 39
+cfgusername=`echo "$cfgusername" | awk '{print substr($0,0,5)}'`
 40
+ihsadminuser="$cfgusername$ihsadminuser"
 41
+ihsadmingrp="$cfgusername$ihsadmingrp"
 42
+
 43
+}
 44
+
 45
+get_clustername(){
 46
+  cellname=`ls $profilepath/$profile_name/config/cells`
 47
+  if [ -d $profilepath/$profile_name/config/cells/$cellname/clusters ]
 48
+  then
 49
+    clustername=`ls $profilepath/$profile_name/config/cells/$cellname/clusters`
 50
+    clustername=`basename $clustername`
 51
+   else
 52
+  juju-log "IBM WAS ND DM: Cluster does not exist."
 53
+fi
 54
+echo "$clustername"
 55
+}
 56
+
 57
+stop_was_nd_dmgr() {
 58
+if [ "$1" != "" -a "$1" != $dm_admin_name ]; then
 59
+dm_admin_name=$1
 60
+fi
 61
+if [ "$2" != "" -a "$2" != $dm_admin_pw ]; then
 62
+dm_admin_pw=$2
 63
+fi
 64
+
 65
+  juju-log "IBM WAS ND DM: profile_name===="$profile_name"==dm_admin_name==="$dm_admin_name"====dm_admin_pw=="$dm_admin_pw"profilepath====$profilepath"
 66
+   if [ -d "$profilepath/$profile_name/bin" ]; then
 67
+  cd $profilepath/$profile_name/bin/
 68
+    if ! ./stopManager.sh -username $dm_admin_name -password $dm_admin_pw
 69
+    then
 70
+     status-set blocked "Error while stoping the deployment manager"
 71
+    else
 72
+      status-set active "Deployment Manager stopped successfully"
 73
+      close-port 9060
 74
+      close-port 9043
 75
+      remove_state 'ibm-was-nd-dm.manager.started'
 76
+    fi
 77
+    else
 78
+    juju-log "IBM WAS ND DM: No deployment manager to stop, exiting."
 79
+    return 0
 80
+  fi
 81
+}
 82
+
 83
+
 84
+install_was_nd_fixpack() {
 85
+  if [ "$ARCHITECTURE" == "s390x" ];then
 86
+    if $IM_INSTALL_PATH/eclipse/tools/imcl install com.ibm.websphere.ND.v90 -acceptLicense -repositories $CHARM_DIR/../resources/WAS_ND/FP -installationDirectory $WAS_ND_INSTALL_PATH  -showProgress
 87
+    then
 88
+      set_state 'ibm-was-nd-dm.updated'
 89
+      status-set active "IBM WAS ND DM: WAS ND installation upgraded successfully!"
 90
+    else
 91
+      status-set blocked "IBM WAS ND DM: Error while upgrading WAS ND!"
 92
+      return 1
 93
+    fi
 94
+  fi
 95
+}
 96
+
 97
+@when 'ibm-was-nd.installed'
 98
+@when_not 'ibm-was-nd-dm.profile.available'
 99
+function create_profile(){
100
+  cd $WAS_ND_INSTALL_PATH/bin
101
+        ./manageprofiles.sh -create -profileName $profile_name -profilePath $profilepath/$profile_name -templatePath $profile_template_path -enableAdminSecurity true -adminUserName $dm_admin_name -adminPassword $dm_admin_pw
102
+  set_state 'ibm-was-nd-dm.profile.available'
103
+  if [ ! -d $CHARM_DIR/files ]; then
104
+  mkdir $CHARM_DIR/files
105
+  fi
106
+  if [ -f $CHARM_DIR/files/was_users.txt ]; then
107
+    juju-log "IBM WAS ND DM: was_users.txt file already exists."
108
+  else
109
+    touch $CHARM_DIR/files/was_users.txt
110
+  fi
111
+
112
+cat > $CHARM_DIR/files/was_users.txt <<EOF
113
+user_name=$dm_admin_name
114
+password=$dm_admin_pw
115
+EOF
116
+  chmod 600 $CHARM_DIR/files/was_users.txt
117
+}
118
+
119
+@when 'ibm-was-nd-dm.profile.available'
120
+@when_not 'ibm-was-nd-dm.manager.started'
121
+function start_was_nd_dmgr() {
122
+  if [ -d $profilepath/$profile_name/bin ]; then
123
+    cd $profilepath/$profile_name/bin/
124
+    if ! ./startManager.sh
125
+    then
126
+      status-set blocked "IBM WAS ND DM: Error while starting the deployment manager"
127
+   else
128
+      status-set active "IBM WAS ND DM: Deployment Manager started successfully"
129
+      open-port 9060
130
+      open-port 9043
131
+      set_state 'ibm-was-nd-dm.manager.started'
132
+    fi
133
+  else
134
+    status-set blocked "IBM WAS ND DM: No deployment manager to start, exiting."
135
+    return 0
136
+  fi
137
+}
138
+
139
+@when_not_all 'config.default.was_admin_user' 'config.default.dm_admin_pw'
140
+@when_any 'config.changed.was_admin_user' 'config.changed.dm_admin_pw'
141
+function create_new_profile() {
142
+  if  charms.reactive is_state 'was-ihs.available'; then
143
+    status-set blocked "IBM WAS ND DM: Please remove the relation with IHS before creating new profile."
144
+    return 0
145
+  fi
146
+  if  charms.reactive is_state 'dm-node.connected'; then
147
+    status-set blocked "IBM WAS ND DM: Please remove the relation with all WAS ND nodes before creating new profile."
148
+    return 0
149
+  fi
150
+
151
+  if  charms.reactive is_state 'was-nd.connected'; then
152
+    status-set blocked "IBM WAS ND DM: Please remove the relation with all consumer charms before creating new profile."
153
+    return 0
154
+  fi
155
+
156
+  if [ "$dm_admin_name" == "" ]; then
157
+    status-set blocked "IBM WAS ND DM: Please set the was admin name through dm_admin_name config option."
158
+    return 0
159
+  fi
160
+
161
+  if [ "$dm_admin_pw" == "" ]; then
162
+    status-set blocked "IBM WAS ND DM: Please set the was admin password through dm_admin_pw config option."
163
+    return 0
164
+  fi
165
+
166
+  juju-log "old_dm_admin_user=$old_dm_admin, old_dm_admin_password=$old_dm_pw"
167
+  if [ -d $profilepath ]; then
168
+    stop_was_nd_dmgr $old_dm_admin $old_dm_pw 
169
+    cd /
170
+    $WAS_ND_INSTALL_PATH/bin/manageprofiles.sh -delete -profileName $profile_name
171
+    rm -rf $profilepath
172
+    juju-log "IBM WAS ND DM: Removed old dmgr profile to create new dmgr profile with new user id and password"
173
+    remove_state 'ibm-was-nd-dm.profile.available'
174
+  fi
175
+
176
+}
177
+
178
+
179
+@when 'ibm-was-nd.installed'
180
+@when_not 'ibm-was-nd-dm.updated'
181
+function update_was_nd(){
182
+
183
+  # Get the WAS ND fixpack resources
184
+  juju-log "IBM WAS ND DM: fetching the ibm_was_nd_fp resource"
185
+  status-set maintenance "fetching the ibm_was_nd_fp resource"
186
+  was_nd_fp=`resource-get 'ibm_was_nd_fp' || echo unavailable`
187
+
188
+  #If we don't have a fixpack, just exit successfully; there's nothing to do.
189
+  if [ "$was_nd_fp" = "unavailable" ]; then
190
+  juju-log "IBM WAS ND DM: no ibm_was_nd_fixpack packages to install"
191
+  status-set active "IBM WAS ND DM is ready"
192
+  return 0
193
+  fi
194
+
195
+  #If we detect the fixpack is just a placeholder in charm store, just exit successfully; there's nothing to do.
196
+  ibm_was_fp_isempty=`file $was_nd_fp | { grep -q empty && echo "True"; } || echo "False"`
197
+  if [ "$ibm_was_fp_isempty" = "True" ]; then
198
+    juju-log "IBM WAS ND DM: no ibm_was_nd_fixpack packages to install"
199
+    status-set active "IBM WAS ND DM is ready"
200
+    return 0
201
+  fi
202
+  was_fixpack_packages="$was_nd_fp"
203
+  juju-log "IBM WAS ND DM: Fixpacks provided for upgrade $was_fixpack_packages"
204
+
205
+  if [ ! -d $CHARM_DIR/../resources/WAS_ND/FP ]; then
206
+    mkdir $CHARM_DIR/../resources/WAS_ND/FP
207
+  fi
208
+
209
+  for was_fp_pkg in $was_fixpack_packages; do
210
+    juju-log "IBM WAS ND DM: was_fp_pkg="$was_fp_pkg
211
+    if [ -f $was_fp_pkg ]; then
212
+      ARCHIVE_DIR=`dirname $was_fp_pkg`
213
+      juju-log "IBM WAS ND DM: extracting the ibm_was_nd_fp resources"
214
+      status-set maintenance "extracting the ibm_was_nd_fp resources"
215
+      if ! unzip $was_fp_pkg -d $ARCHIVE_DIR/../WAS_ND/FP
216
+      then
217
+          juju-log "IBM WAS ND DM: Unable to extract the WAS ND fixpack content. Verify whether the package is corrupt."
218
+          # Remove corrupt archive file
219
+          status-set blocked "IBM WAS ND packages are corrupt"
220
+          rm -rf $ARCHIVE_DIR/../WAS_ND/FP
221
+          return 0
222
+      else
223
+          juju-log "IBM WAS ND DM: $was_fp_pkg extracted successfully"
224
+      fi
225
+    fi
226
+  done
227
+  if charms.reactive is_state 'ibm-was-nd-dm.manager.started'; then
228
+    stop_was_nd_dmgr $old_dm_admin $old_dm_pw
229
+  fi
230
+  install_was_nd_fixpack
231
+}
232
+
233
+@hook 'upgrade-charm'
234
+function check_fixpack(){
235
+  # The upgrade-charm hook will fire when a new resource is pushed for this
236
+  # charm. This is a good time to determine if we need to deal with a new
237
+  # fixpack.
238
+  if ! charms.reactive is_state 'ibm-was-nd.updated'; then
239
+    # If there is no prior fixpack installed (because ibm-was-nd.updated is not
240
+    # set), do nothing since install_was_nd_fixpack will handle that case.
241
+    juju-log "IBM WAS ND DM: no fixpack has been installed; nothing to upgrade."
242
+    return 0
243
+  else
244
+    # If we have a fixpack packges already (because ibm-was-nd.updated is set),
245
+    # we should fetch the latest fixpack packages and determine if it is new.
246
+    #  - If it is new, set our states so install_was_nd_fixpack is called again
247
+    #  - If it is not new, do nothing
248
+    juju-log "IBM WAS ND DM: scanning for new fixpacks to install"
249
+    WAS_FP_DIR="$CHARM_DIR/../resources/ibm_was_nd_fp"
250
+    CUR_FP="$WAS_FP1_DIR/ibm_was_nd_fp.zip"
251
+    if [ -f $CUR_FP ]; then
252
+      CUR_FP_MD5=`md5sum "$CUR_FP" | awk '{print $1}'`
253
+    fi
254
+    NEW_FP=`resource-get 'ibm_was_nd_fp' || echo unavailable`
255
+
256
+    if [ "$NEW_FP" = "unavailable" ]; then
257
+      juju-log "IBM WAS ND DM: no fixpacks to install"
258
+    elif [ -f $NEW_FP ]; then
259
+      NEW_FP_MD5=`md5sum "$NEW_FP" | awk '{print $1}'`
260
+    fi
261
+
262
+    if [ "$CUR_FP_MD5" != "$NEW_FP_MD5" ]; then
263
+      juju-log "IBM WAS ND DM: new fixpack detected ($CUR_FP with $CUR_FP_MD5 versus $NEW_FP with $NEW_FP_MD5 )"
264
+      rm -rf $CHARM_DIR/../resources/WAS_ND/FP
265
+      remove_state 'ibm-was-nd.updated'
266
+    else
267
+      juju-log "IBM WAS ND DM: no new fixpack to install"
268
+    fi
269
+  fi
270
+}
271
+
272
+@when 'ibm-was-nd-dm.manager.started' 'dm-node.connected'
273
+@when_not 'ibm-was-nd-dm.exposed'
274
+function expose_was_nd_dm_details(){
275
+    juju-log "IBM WAS ND DM: ************************In expose_was_nd_dm_details function ***********"
276
+    host_name=`unit-get private-address`
277
+    host_name=`hostname`
278
+    services=$(relation_call --state=dm-node.connected services)
279
+    for service in $services; do
280
+      juju-log "IBM WAS ND DM: hostname = $host_name  dminstallpath== $WAS_ND_INSTALL_PATH  profilename= $profile_name username = $dm_admin_name  password=$dm_admin_pw"
281
+      juju-log "IBM WAS ND DM: Setting was nd dm details for $service"
282
+      relation_call --state=dm-node.connected set_was_dm_details $host_name $WAS_ND_INSTALL_PATH $profile_name $dm_admin_name $dm_admin_pw || true
283
+    done
284
+    set_state 'ibm-was-nd-dm.exposed'
285
+}
286
+
287
+@when 'ibm-was-nd-dm.manager.started' 'was-nd.connected'
288
+@when_not 'ibm-was-nd-dm.consumer.exposed'
289
+function expose_was_nd_dm_details_to_consumer(){
290
+    juju-log "IBM WAS ND DM: ************************In expose_was_nd_dm_details_to_consumer function ***********"
291
+    host_name=`unit-get private-address`
292
+    services=$(relation_call --state=was-nd.connected services)
293
+    for service in $services; do
294
+      juju-log "IBM WAS ND DM: hostname = $host_name  dminstallpath== $WAS_ND_INSTALL_PATH  profilename= $profile_name username = $dm_admin_name  password=$dm_admin_pw"
295
+      juju-log "IBM WAS ND DM: Setting was nd dm details for $service"
296
+      relation_call --state=was-nd.connected set_was_dm_details $host_name $WAS_ND_INSTALL_PATH $profile_name $dm_admin_name $dm_admin_pw || true
297
+    done
298
+    set_state 'ibm-was-nd-dm.consumer.exposed'
299
+}
300
+
301
+@when 'was-nd.departed'
302
+function remove_relation_consumer(){
303
+  juju-log "IBM WAS ND DM: ************************In remove_relation_consumer function ***********"
304
+  remove_state 'ibm-was-nd-dm.consumer.exposed'
305
+  juju-log "Relation removed from consumer charm."
306
+
307
+}
308
+@when 'ibm-was-nd-dm.manager.started' 'dm-node.connected' 'dm-node.available'
309
+function update_etc_hosts_file(){
310
+  juju-log "IBM WAS ND DM: Adding the WAS ND Node IP's to etc/hosts."
311
+  ip=$(relation_call --state=dm-node.available get_was_node_ip) || true
312
+  juju-log "IBM WAS ND DM: IP and hostname of the WAS ND Node will be added to the Hosts file of DM...: $ip"
313
+  for i in $ip
314
+  do
315
+    juju-log "IBM WAS ND DM: IP and hostname of WAS ND Node connecting is : $i"
316
+    cd /etc
317
+    if grep -q "$i" hosts
318
+    then
319
+      juju-log "IBM WAS ND DM: Host file already updated with $i"
320
+    else
321
+      juju-log "IBM WAS ND DM: Updating Host file with $i"
322
+      echo "$i" >> /etc/hosts
323
+      if [ -f $CHARM_DIR/files/start_cluster.py ]; then
324
+        $WAS_ND_INSTALL_PATH/bin/wsadmin.sh -lang jython -f $CHARM_DIR/files/start_cluster.py -username $dm_admin_name -password $dm_admin_pw
325
+      fi
326
+    fi
327
+  done
328
+
329
+}
330
+
331
+@when 'ibm-was-nd-dm.exposed' 'dm-node.connected'
332
+@when_not 'ibm-was-nd-dm.cluster.configured'
333
+function configure_dynamic_cluster(){
334
+  juju-log "IBM WAS ND DM: ************************In configure_dynamic_cluster function ***********"
335
+  juju-log "IBM WAS ND DM: Creating Dynamic cluster"
336
+  juju-log "IBM WAS ND DM: cluster prefix is: $cluster_prefix"
337
+  $WAS_ND_INSTALL_PATH/bin/wsadmin.sh -lang jython -f $WAS_ND_INSTALL_PATH/bin/CreateDynamicCluster.py -dcPrefix:$cluster_prefix -ngName:DefaultNodeGroup -opMode:manual -username $dm_admin_name -password $dm_admin_pw
338
+  clustername=$( get_clustername )
339
+  juju-log "IBM WAS ND DM: cluster_name=====$clustername"
340
+  juju-log "IBM WAS ND DM: Jython script to start dynamic cluster."
341
+  if [ -f $CHARM_DIR/files/start_cluster.py ]; then
342
+    $WAS_ND_INSTALL_PATH/bin/wsadmin.sh -lang jython -f $CHARM_DIR/files/start_cluster.py -username $dm_admin_name -password $dm_admin_pw
343
+  else
344
+    touch $CHARM_DIR/files/start_cluster.py
345
+    chmod +x $CHARM_DIR/files/start_cluster.py
346
+      cat > $CHARM_DIR/files/start_cluster.py <<EOF
347
+
348
+cell = AdminControl.getCell()
349
+print " Cell name is --> "+ cell
350
+Cluster = AdminControl.completeObjectName('cell='+ cell +',type=Cluster,name=$clustername,*')
351
+state = AdminControl.getAttribute(Cluster, 'state')
352
+if (state == 'websphere.cluster.running'):
353
+  print "Cluster --> $clustername is running .......... "
354
+  print "Ripple starting cluster ............."
355
+  clusterMgr = AdminControl.completeObjectName('cell='+ cell +',type=ClusterMgr,*')
356
+  print AdminControl.invoke(clusterMgr, 'retrieveClusters')
357
+  Cluster = AdminControl.completeObjectName('cell='+ cell +',type=Cluster,name=$clustername,*')
358
+  print AdminControl.invoke(Cluster ,'rippleStart')
359
+else:
360
+  print "Cluster --> $clustername is stopped "
361
+  print "Starting cluster ............... "
362
+  clusterMgr = AdminControl.completeObjectName('cell='+ cell +',type=ClusterMgr,*')
363
+  AdminControl.invoke(clusterMgr, 'retrieveClusters')
364
+  Cluster = AdminControl.completeObjectName('cell='+ cell +',type=Cluster,name=$clustername,*')
365
+  print AdminControl.invoke(Cluster ,'start')
366
+  print " ---------------------------------------------------------------------------------------------- "
367
+EOF
368
+  $WAS_ND_INSTALL_PATH/bin/wsadmin.sh -lang jython -f $CHARM_DIR/files/start_cluster.py -username $dm_admin_name -password $dm_admin_pw
369
+  fi
370
+  juju-log "IBM WAS ND DM:Dynamic cluster created"
371
+  set_state 'ibm-was-nd-dm.cluster.configured'
372
+}
373
+
374
+@when 'dm-node.departed'
375
+function remove_was_node_relation(){
376
+  juju-log "IBM WAS ND DM:************************In remove_was_node_relation function ***********"
377
+  services=$(relation_call --state=dm-node.departed services)
378
+  for service in $services; do
379
+  relation_call --state=dm-node.departed dismiss || true
380
+  done
381
+  rm -rf $CHARM_DIR/files/start_cluster.py
382
+  clustername=$( get_clustername )
383
+  juju-log "IBM WAS ND DM: cluster_name=====$clustername"
384
+  if $WAS_ND_INSTALL_PATH/bin/wsadmin.sh -f $WAS_ND_INSTALL_PATH/bin/deleteDynamicCluster.jacl DefaultNodeGroup $clustername -username $dm_admin_name -password $dm_admin_pw
385
+  then
386
+    remove_state 'ibm-was-nd-dm.exposed'
387
+    remove_state 'ibm-was-nd-dm.cluster.configured'
388
+  else
389
+    juju-log "IBM WAS ND DM: Error occured while deleting cluster."
390
+    status-set blocked "Error occured while deleting cluster"
391
+    return 0
392
+  fi
393
+}
394
+
395
+@when 'ibm-was-nd-dm.manager.started' 'was-ihs.available'
396
+@when_not 'ibm-was-nd-dm.ihs.exposed'
397
+function expose_was_nd_dm_ihs_details(){
398
+  juju-log "IBM WAS ND DM: ************************In expose_was_base_details function ***********"
399
+  was_path=$WAS_ND_INSTALL_PATH
400
+  was_port='9060'
401
+  host_name=`unit-get private-address`
402
+  services=$(relation_call --state=was-ihs.available services)
403
+  for service in $services; do
404
+    juju-log "IBM WAS ND DM: Creating the users for the IHS Admin Server"
405
+    get_cfgusername $service
406
+    juju-log "IBM WAS ND DM: Created IHS Admin Server Credentials."
407
+    juju-log "IBM WAS ND DM: Other vals are was_path = $was_path hostname = $host_name service = $service ihsadminuser = $ihsadminuser ihsadminpw = $ihsadminpw ihsadmingrp = $ihsadmingrp profilename = $profile_name"
408
+    relation_call --state=was-ihs.available set_was_details $service $was_path $was_port $host_name $ihsadminuser $ihsadmingrp $ihsadminpw $profile_name || true
409
+  done
410
+  set_state 'ibm-was-nd-dm.ihs.exposed'
411
+}
412
+
413
+@when 'was-ihs.available' 'ibm-was-nd-dm.manager.started'
414
+@when_not 'ibm-was-nd-dm.ihs.propagated'
415
+function propagate_ihs(){
416
+  juju-log "IBM WAS ND DM: ************************In propagate_ihs function ***********"
417
+  services=$(relation_call --state=was-ihs.available services)
418
+  for service in $services; do
419
+    juju-log "IBM WAS ND DM: Checking IHS Admin Server status."
420
+    ihsserverstatus=$(relation_call --state=was-ihs.available get_isihsstarted $service) || true
421
+    if [ "$ihsadminserverstatus" != "started" ] 
422
+    then
423
+      juju-log "IBM WAS ND DM: IHS admin server is not yet started."
424
+      continue
425
+    else
426
+        set_state 'ibm-was-nd-dm.ihs.propagated'
427
+        juju-log "IBM WAS ND DM: IHS propagated successfully!"
428
+        status-set active "IHS propagated successfully!"
429
+    fi
430
+  done
431
+}
432
+
433
+@when_not 'was-ihs.departed' 
434
+function remove_relation(){
435
+  juju-log "IBM WAS ND DM:Removing relation from IHS."
436
+  remove_state 'ibm-was-nd-dm.ihs.exposed'
437
+  remove_state 'ibm-was-nd-dm.ihs.propagated'
438
+  juju-log "IBM WAS ND DM: Removed relation from IHS"
439
+}
440
+
441
+reactive_handler_main
Back to file index

revision

1
--- 
2
+++ revision
3
@@ -0,0 +1 @@
4
+0
Back to file index

tests/01-deploy.py

 1
--- 
 2
+++ tests/01-deploy.py
 3
@@ -0,0 +1,55 @@
 4
+#!/usr/bin/env python3
 5
+
 6
+
 7
+import amulet
 8
+import re
 9
+import requests
10
+import unittest
11
+
12
+seconds_to_wait = 20000
13
+
14
+
15
+class TestDeploy(unittest.TestCase):
16
+    """
17
+    Deployment test for the IBM WAS ND DM charm.
18
+    """
19
+    def setUp(self):
20
+        self.d = amulet.Deployment(series='xenial')
21
+        self.d.add('ibm-was-nd', 'cs:~ibmcharmers/xenial/ibm-was-nd-dm')
22
+        self.d.add('ibm-http', 'cs:~ibmcharmers/xenial/ibm-http')
23
+        self.d.relate('ibm-was-nd-dm:was-ihs', 'ibm-http:ihs')
24
+        self.d.setup(seconds_to_wait)
25
+        self.d.sentry.wait(seconds_to_wait)
26
+
27
+    def test_deploy_with_placeholder_resource(self):
28
+        # The status message when using placeholder resources will include the
29
+        # string "ibm_was_nd_installer resource". If we see that, the test is
30
+        # successful.
31
+        sentry_re = re.compile('ibm_was_nd_installer resource')
32
+        self.d.sentry.wait_for_messages({"ibm-was-nd": sentry_re})
33
+
34
+    def test_was_nd_dm_deployed(self):
35
+        self.assertTrue(self.d.deployed)
36
+        unit = self.d.sentry['ibm-was-nd-dm'][0]
37
+        state_was_nd_dm = unit.info['agent-state']
38
+        print('WAS ND DM is %s' % state_was_nd_dm)
39
+        url = 'http://%s:9060/ibm/console' % unit.info['public-address']
40
+        https_url = 'https://%s:9043/ibm/console' % unit.info['public-address']
41
+        response = requests.get(url, verify=False)
42
+        response = requests.get(https_url, verify=False)
43
+        # Raise an exception if the url was not a valid web page.
44
+        response.raise_for_status()
45
+
46
+    def test_was_nd_dm_ihs(self):
47
+        http_unit = self.d.sentry['ibm-http'][0]
48
+        state_http = http_unit.info['agent-state']
49
+        print('Http Server is %s' % state_http)
50
+        url = 'http://%s:80' % http_unit.info['public-address']
51
+        snoop_url = 'http://%s:80/snoop' % http_unit.info['public-address']
52
+        response = requests.get(url, verify=False)
53
+        response = requests.get(snoop_url, verify=False)
54
+        response.raise_for_status()
55
+
56
+
57
+if __name__ == '__main__':
58
+    unittest.main()
Back to file index

tests/tests.yaml

1
--- 
2
+++ tests/tests.yaml
3
@@ -0,0 +1,5 @@
4
+packages:
5
+  - amulet
6
+  - python3
7
+  - unzip
8
+  - pwgen