├── .gitignore ├── .kitchen.yml ├── LICENSE ├── README.md ├── Vagrantfile ├── ansible.cfg ├── defaults └── main.yml ├── files ├── osb_control_admin_server.py ├── osb_control_admin_server.sh ├── osb_control_managed_servers.py ├── osb_control_managed_servers.sh ├── osb_create_basic_domain.py ├── osb_create_basic_domain_service.sh ├── osb_import_project.py ├── osb_import_project.sh └── osb_start_nodemanager.sh ├── host_vars ├── .gitignore └── ansible-vm ├── meta └── main.yml ├── provision.yml ├── requirements.txt ├── tasks ├── configure.yml ├── impex.yml ├── install.yml ├── main.yml ├── prepare.yml ├── rcu.yml ├── service.yml └── validate.yml ├── templates ├── boot.properties.j2 ├── nodemanager.properties.j2 ├── nodemanager.service.j2 ├── osb.fact.j2 ├── osb.rsp.j2 ├── osb_environment.properties.j2 ├── osb_set_environment_variables.sh.j2 ├── rcu_passwords.j2 └── setUserOverrides.sh.j2 ├── test └── integration │ ├── default │ ├── default.yml │ └── serverspec │ │ ├── Gemfile │ │ ├── localhost │ │ ├── default_spec.rb │ │ └── osb_installation_spec.rb │ │ ├── spec_helper.rb │ │ └── wls_params.rb │ └── helpers │ └── serverspec │ └── Gemfile ├── vagrant-inventory.ini └── vars └── main.yml /.gitignore: -------------------------------------------------------------------------------- 1 | .vagrant 2 | .kitchen 3 | -------------------------------------------------------------------------------- /.kitchen.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | driver: 4 | name: vagrant 5 | customize: 6 | memory: 4096 7 | cpus: 2 8 | 9 | provisioner: 10 | name: ansible_playbook 11 | requirements_path: requirements.txt 12 | hosts: localhost 13 | require_ansible_repo: false 14 | ansible_verbose: true 15 | require_chef_for_busser: false 16 | require_ruby_for_busser: false 17 | 18 | verifier: 19 | ruby_bindir: '/usr/bin' 20 | 21 | platforms: 22 | - name: 'centos_7_x64' 23 | driver_config: 24 | box: 'abessifi/centos-7.1-ansible' 25 | network: 26 | - [ 'private_network', { ip: '192.168.33.111' } ] 27 | 28 | suites: 29 | - name: default 30 | attributes: 31 | tags: 32 | - install-java 33 | - wls-plain-install 34 | - osb-create-db-schemas 35 | - osb-install-and-init 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Ahmed Bessifi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ansible OSB Role 2 | 3 | ## Description 4 | 5 | This is an Ansible role to install and configure Oracle Service Bus 12c. 6 | 7 | ## Supported systems 8 | 9 | - CentOS 7 10 | 11 | ## Role dependencies 12 | 13 | - [ansible-java](https://github.com/abessifi/ansible-java) 14 | - [ansible-weblogic](https://github.com/abessifi/ansible-weblogic) 15 | 16 | ## Requirements 17 | 18 | ### Software Requirements 19 | 20 | - **Ansible 1.9** or higher (can be easily installed via `pip`. E.g: `sudo pip install ansible==1.9.2`) 21 | - **[Vagrant](https://www.vagrantup.com) 1.7** or higher 22 | - `sshpass` package which is needed by Ansible if you are using SSH authentication by password. On Ubuntu/Debian: `$ sudo apt-get install sshpass` 23 | - **Virtualbox** 24 | - **[Oh-my-box](https://github.com/abessifi/oh-my-box)** tool, optional, if you want to quickly provision and package a Vagrant base box with **Ansible** and **Ruby** pre-installed. 25 | 26 | ### System requirements 27 | 28 | - **Oracle JDK 8** (see [ansible-java](https://github.com/abessifi/ansible-java)) 29 | 30 | - **Fusion Middleware Infrastructure 12c Plateform**. You can download the installer JAR file `fmw_12.2.1.0.0_infrastructure.jar` from the [Oracle Software Delivery Cloud](https://edelivery.oracle.com), put it somewhere in the machine(s) to provision and use the [ansible-weblogic](https://github.com/abessifi/ansible-weblogic) role to install and configure a WebLogic platform. 31 | 32 | - **Oracle Service Bus** installer JAR file `fmw_12.2.1.0.0_osb.jar` which can be obtained from the [Oracle Software Delivery Cloud](https://edelivery.oracle.com). 33 | 34 | - An access to an Oracle 12c Database is required too in order to create the OSB essential schemas using RCU tool (the role should work with an Oracle 11g DB also). 35 | 36 | ### Memory requirements 37 | 38 | The specific memory requirements for your Oracle Service Bus 12c deployment depends on which components, or combination of components, you install. Please read the Oracle Fusion Middleware installation guidelines for more details about memory requirements. 39 | 40 | In case of a plain installation using this Ansible role such as a combination of a nodemanager, an AdminServer and one Managed Server in the same server, the required memory is at least **4GB** of physical memory and **1GB** of Swap space. 41 | 42 | ## Role Variables 43 | 44 | #### OSB installation parameters 45 | 46 | - **`oracle_base_dir`** - The Oracle base directory (default: `/u01/app/oracle`) 47 | - **`middleware_home_dir`** - The Oracle Middleware installation directory (default: `/u01/app/oracle/product/middleware`) 48 | - **`osb_installation_type`** - The Oracle Service Bus installation type (default: `'Service Bus'`) 49 | - **`osb_jar_path`** - Required absolute path to the OSB installer JAR file (default: `''`) 50 | - **`osb_version`** - The OSB version to install (default: `12c`) 51 | - **`osb_already_installed`** - A Flag to indicate if OSB is already installed (default: `false`) 52 | - **`osb_schemas_created`** - A Flag to tell if the OSB schemas are installed or not (default: `false`) 53 | 54 | #### Oracle database connection parameters 55 | 56 | - **`oracle_db_address`** - A required Oracle database address (default: `localhost`) 57 | - **`oracle_db_port`** - The Oracle database connection port (default: `1521`) 58 | - **`oracle_db_sid`** - A required Oracle database connection system identifier (default: `xe`) 59 | - **`oracle_db_user`** - The Oracle database admin user name (default: `sys`) 60 | - **`oracle_db_password`** - A required Oracle database admin user password (default: `oracle`) 61 | - **`oracle_db_role`** - The Oracle database admin user role (default: `SYSDBA`) 62 | 63 | #### OSB database schemas 64 | 65 | - **`osb_rcu_components`** - The OSB schemas components to install (default: `[ MDS, IAU, IAU_APPEND, IAU_VIEWER, OPSS, UCSUMS, WLS, STB, SOAINFRA ]`) 66 | - **`osb_rcu_schema_prefix`** - The OSB database schemas prefix (default: `OSB`) 67 | - **`osb_schemas_common_password`** - Required OSB schemas common password (default: `oracle`) 68 | 69 | #### Cluster parameters 70 | 71 | - **`osb_domain_name`** - The OSB WebLogic domain name (default: `osb_domain`) 72 | - **`osb_cluster_name`** - The OSB cluster name (default: `osb_cluster`) 73 | - **`osb_cluster_nodes`** - The OSB cluster nodes/machines (default: `["{{ ansible_fqdn }}"]`) 74 | 75 | #### OSB NodeManager parameters 76 | 77 | - **`osb_nodemanager_listen_address`** - The NodeManager listening address (default: `localhost`) 78 | - **`osb_nodemanager_listen_port`** - The NodeManager listening port (default: `5556`) 79 | - **`osb_nodemanager_connection_mode`** - The NodeManager's connection mode (default: `ssl`) 80 | 81 | #### OSB AdminServer parameters 82 | 83 | - **`osb_admin_server_name`** - The AdminServer instance name (default: `AdminServer`) 84 | - **`osb_admin_server_listen_address`** - The AdminServer listening address (default: `"{{ ansible_fqdn }}"`) 85 | - **`osb_admin_server_listen_port`** - The AdminServer listening port (default: `7001`) 86 | - **`osb_admin_username`** - The WebLogic administrator user name (default: `weblogic`) 87 | - **`osb_admin_password`** - The WebLogic administrator user password (default: `manager1`) 88 | 89 | #### OSB NodeManager parameters 90 | 91 | - **`osb_managed_servers_per_machine`** - The maximum number of managed servers per machine (default: `1`) 92 | - **`osb_managed_server_listen_port_start`** - The managed servers start listening port number (default: `8000`) 93 | - **`osb_managed_server_listen_address`** - The managed servers listen address (default: `"{{ ansible_fqdn }}"`) 94 | 95 | #### JVM heap parameters 96 | 97 | - **`osb_admin_server_heap_size`** - The AdminServer heap size (default: `512m`) 98 | - **`osb_admin_server_perm_size`** - The AdminServer permanent generation size (default: `256m`) 99 | - **`osb_managed_server_heap_size`** - The Managed server heap size (default: `1024m`) 100 | - **`osb_managed_server_perm_size`** - The Managed server permanent generation size (default: `512m`) 101 | - **`osb_coherence_server_heap_size`** - The Coherence server heap size (default: `256m`) 102 | - **`osb_coherence_server_perm_size`** - The Coherence server permanent generation size (default: `128m`) 103 | 104 | #### Import OSB project parameters 105 | 106 | - **`osb_sbconfig_jar_file`** - Path to the OSB project's JAR file to be imported (default: `/tmp/sbconfig.jar`) 107 | - **`osb_sbconfig_customization_file`** - Path to the OSB project's customization XML file to be applied (default: `/tmp/ALSBCustomizationFile.xml`) 108 | 109 | ## Available tags 110 | 111 | - **`osb-create-db-schemas`** - Specify this tag to create the OSB schemas using RCU. 112 | - **`osb-purge-db-schemas`** - Use this tag if you want to purge an existing OSB schemas to prepare for a clean installation. If you want that the purge take effect, you have to set the role parameter `osb_schemas_created` to `true`. The role parameters for db connection, the schemas prefix and the RCU components are required too. 113 | - **`osb-plain-install`** - This tag performs only the installation of the OSB software. 114 | - **`osb-configure`** - When mentioned, the OSB configuration tasks are executed (Create OSB cluster, etc). 115 | - **`osb-install-and-init`** - This is the default installation mode of the OSB. When mentioned, this tag performs the creation of a new domain, the configuration and startup of an OSB cluster with 3 services: a nodemanager, an AdminServer and one Manager Server. 116 | - **`osb-start-nodemanager`** - Starts the nodemanager service. 117 | - **`osb-stop-nodemanager`** - Stops the nodemanager service. 118 | - **`osb-restart-nodemanager`** - Restarts the nodemanager service. 119 | - **`osb-start-adminserver`** - Starts the AdminServer process. 120 | - **`osb-stop-adminserver`** - Stops the AdminServer process. 121 | - **`osb-start-managed-servers`** - Starts the Managed Servers processes. 122 | - **`osb-stop-managed-servers`** - Stops the Managed Servers processes. 123 | - **`osb-import-project`** - Import existing OSB project. 124 | 125 | ## Local facts 126 | 127 | - **`osb.db.created`** - Tell if the OSB schemas are installed or not 128 | 129 | # Usage 130 | 131 | ### Oracle database setup 132 | 133 | Personally and for quick tests, I use the Docker image [sath89/oracle-12c](https://hub.docker.com/r/sath89/oracle-12c/) that brings up an Oracle 12c database server. All you need is to pull the image, create a local data directory and spin up an `oracle-db` container: 134 | 135 | $ sudo docker pull sath89/oracle-12c:latest 136 | $ sudo mkdir -p /var/lib/oracledb/data 137 | $ sudo docker run --name oracle-db -d -p 8080:8080 -p 1521:1521 -v /var/lib/oracledb/data:/u01/app/oracle -e DBCA_TOTAL_MEMORY=1024 sath89/oracle-12c 138 | 139 | To test the database connection: 140 | 141 | $ sqlplus -L sys/oracle@db.weblogic.local/xe.oracle.docker as sysdba 142 | 143 | Connected to: 144 | Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production 145 | 146 | SQL> 147 | 148 | 149 | ### All from scratch 150 | 151 | First, download Oracle JDK 8 rpm, Fusion Middleware Infrastructure and OSB 12c installer JARs and put them somewhere in the server to provision. Below an example: 152 | 153 | $ ls -1 /srv/files/ 154 | fmw_12.2.1.0.0_infrastructure.jar 155 | fmw_12.2.1.0.0_osb.jar 156 | jdk-8u77-linux-x64.rpm 157 | 158 | Next, clone this project and download the required Ansible roles to install and configure the Oracle JDK and the WebLogic platform: 159 | 160 | $ sudo ansible-galaxy install -p /etc/ansible/roles/ -r requirements.txt 161 | 162 | To install an Oracle Service Bus Infrastructure (that uses Oracle JDK 8 as the Java Virtual Machine) you can use the following `provision.yml` playbook: 163 | 164 | ```yaml 165 | - hosts: my-server 166 | roles: 167 | - role: abessifi.java 168 | sudo: yes 169 | java_version: 8 170 | java_jdk_type: 'oracle' 171 | oracle_jdk_rpm_package: 'jdk-8u77-linux-x64.rpm' 172 | rpm_download_directory: '/srv/files' 173 | java_set_as_default: true 174 | tags: 175 | - install-java 176 | 177 | - role: abessifi.weblogic 178 | weblogic_jar_path: '/srv/files/fmw_12.2.1.0.0_infrastructure.jar' 179 | weblogic_quick_installation: false 180 | weblogic_installation_type: 'Fusion Middleware Infrastructure' 181 | weblogic_domain_name: 'osb_domain' 182 | 183 | - role: ansible-osb 184 | osb_jar_path: '/srv/files/fmw_12.2.1.0.0_osb.jar' 185 | oracle_db_address: 'db.weblogic.local' 186 | oracle_db_sid: 'xe.oracle.docker' 187 | oracle_db_password: 'oracle' 188 | osb_schemas_common_password: 'oracle' 189 | osb_domain_name: 'osb_domain' 190 | osb_admin_server_listen_address: 'osb.weblogic.local' 191 | osb_managed_server_listen_address: 'osb.weblogic.local' 192 | ``` 193 | 194 | That's all ! It's now time to call Ansible to provision your server. Here is an example of ansible-playbook command: 195 | 196 | $ ansible-playbook --user= --connection=ssh --timeout=30 --inventory-file=inventory.ini --tags='install-java,wls-plain-install,osb-plain-install' -v provision.yml 197 | 198 | **Notes:** 199 | 200 | - In the above playbook example, the `db.weblogic.local` refers to the host machine where the oracle database is installed and the `osb.weblogic.local` is the FQDN of the server we are provisioning. 201 | - Make sure you have updated `/etc/hosts` file, so the FQDNs `db.weblogic.local` and `osb.weblogic.local` can be resolved correctly. Otherwise, replace the FQDNs by IP address in the playbook. 202 | - You need to create and adapt the Ansible inventory files and variables to suit your environment (services ports, IP addresses, etc) 203 | 204 | ### Import OSB project 205 | 206 | You can use the magic tag `osb-import-project` to import an existing OSB project exported as a JAR file and apply a customization file to adapt the OSB platform to feet the required configuration. To do so you have just to specify the input project JAR and XML customization files: 207 | 208 | ```yaml 209 | - hosts: ansible-vm 210 | roles: 211 | - role: ansible-osb 212 | osb_sbconfig_jar_file: '/srv/files/osb_cabestan.jar' 213 | osb_sbconfig_customization_file: '/srv/files/ALSBCustomizationFile_cabestan.xml' 214 | ``` 215 | 216 | $ ansible-playbook --user= --connection=ssh --timeout=30 --inventory-file=inventory.ini --tags='osb-import-project' -v provision.yml 217 | 218 | **Notes:** 219 | - Mainly the OSB 11g projects may be imported to the 12c platform. 220 | - If importation fails, take a look to the default log file `/home/oracle/logs/osb_import_project_.log` to identify the failure root reason. 221 | 222 | ### Purge existing OSB schemas 223 | 224 | If you want to purge an existing OSB schemas and start a clean installation, use the Ansible tags `osb-purge-db-schemas` and set the role parameter `osb_schemas_created` to remove the schemas from the Oracle database before recreating them during installation process: 225 | 226 | $ ansible-playbook --user= --connection=ssh --timeout=30 --inventory-file=inventory.ini --tags='install-java,wls-plain-install,osb-purge-db-schemas,osb-plain-install' -v provision.yml 227 | 228 | ### Installation on top of an existing WebLogic platform 229 | 230 | The installation is kept straightforward even with a such use case ! Just specify the **absolute path** of the Oracle Middleware installation directory using the `middleware_home_dir` parameter: 231 | 232 | ```yaml 233 | - hosts: my-server 234 | roles: 235 | 236 | - role: ansible-osb 237 | osb_jar_path: '/srv/files/fmw_12.2.1.0.0_osb.jar' 238 | oracle_db_address: 'db.weblogic.local' 239 | oracle_db_sid: 'xe.oracle.docker' 240 | oracle_db_password: 'oracle' 241 | osb_schemas_common_password: 'oracle' 242 | middleware_home_dir: '/u01/app/oracle/product/middleware_12.2.1' 243 | osb_domain_name: 'osb_domain' 244 | osb_admin_server_listen_address: 'osb.weblogic.local' 245 | osb_managed_server_listen_address: 'osb.weblogic.local' 246 | ``` 247 | 248 | $ ansible-playbook --user= --connection=ssh --timeout=30 --inventory-file=inventory.ini --tags='osb-plain-install' -v provision.yml 249 | 250 | Note that the only passed Ansible tag to perform the installation is `osb-plain-install`. 251 | 252 | ### Restart cluster services 253 | 254 | In case of problem with the WebLogic instances, you can restart the chain service by restarting the Nodemanager service "the entrypoint": 255 | 256 | $ ansible-playbook --user= --connection=ssh --timeout=30 --inventory-file=inventory.ini --tags='osb-restart-nodemanager' -v provision.yml 257 | 258 | # Development and testing 259 | 260 | ## Test with Vagrant 261 | 262 | For quick tests, you can spin-up a CentOS VM using Vagrant. You maybe need to adapt the Vagrantfile to suit your environment (IP addresses, etc): 263 | 264 | - Change the Vagrant box name in the Vagrantfile if needed. 265 | 266 | - Create the virtual machine: 267 | ``` 268 | (host)$ vagrant up --no-provision 269 | ``` 270 | - Update the `/etc/hosts` in the host machine and the VM accordingly to reach the addresses `db.weblogic.local` and `osb.weblogic.local`: 271 | ``` 272 | db.weblogic.local 273 | osb.weblogic.local 274 | ``` 275 | - Create a working directory to copy installer files to: 276 | ``` 277 | [vagrant@ansible-vm ~]$ sudo mkdir /srv/files/ && sudo chown vagrant:vagrant /srv/files/ 278 | ``` 279 | - Copy downloaded installer JAR files: 280 | ``` 281 | (host)$ rsync -iav /path/to/{fmw_12.2.1.0.0_infrastructure.jar,jdk-8u77-linux-x64.rpm,fmw_12.2.1.0.0_osb.jar} vagrant@osb.weblogic.local:/srv/files/ 282 | ``` 283 | - Download the required Ansible roles to install and configure the Oracle JDK and the WebLogic platform (not required if your box is already provision): 284 | ``` 285 | (host)$ sudo ansible-galaxy install -p /etc/ansible/roles/ -r requirements.txt 286 | ``` 287 | - Install all stuff ! 288 | ``` 289 | (host)$ vagrant provision 290 | ``` 291 | 292 | ## Run acceptance tests 293 | 294 | Acceptance/Integration tests could be run against the role using the magic `test-kitchen` tool. All the written acceptance tests are in the **./test/integration/** directory. 295 | 296 | The `.kitchen.yml` file describes the testing configuration and the list of tests suite to run. By default, your instances will be converged with Ansible and run in Vagrant virtual machines. 297 | 298 | To list the instances: 299 | 300 | $ kitchen list 301 | 302 | Instance Driver Provisioner Verifier Transport Last Action 303 | default-centos-7-x64 Vagrant AnsiblePlaybook Busser Ssh 304 | 305 | To run the default test suite on a CentOS 7 platform, run the following: 306 | 307 | $ kitchen test 308 | 309 | ## Author 310 | 311 | This role was created by [Ahmed Bessifi](https://www.linkedin.com/in/abessifi), a DevOps enthusiast. 312 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | VAGRANTFILE_API_VERSION = '2' 5 | 6 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 7 | 8 | config.vm.box_check_update = false 9 | config.vm.synced_folder '.', '/vagrant', disabled: true 10 | 11 | config.vm.define 'ansible-vm' do |cfg| 12 | cfg.vm.box = 'abessifi/centos-7.1-ansible' 13 | cfg.vm.hostname = 'ansible-vm' 14 | cfg.vm.network 'private_network', ip: '192.168.33.101' 15 | cfg.vm.provider 'virtualbox' do |v| 16 | v.name = 'ansible-vm' 17 | v.cpus = 2 18 | v.memory = 4 * 1024 19 | end 20 | cfg.vm.provision 'ansible' do |ansible| 21 | ansible.playbook = 'provision.yml' 22 | ansible.inventory_path = 'vagrant-inventory.ini' 23 | ansible.limit = 'ansible-vm' 24 | ansible.tags = 'install-java,wls-plain-install,osb-create-db-schemas,osb-install-and-init' 25 | ansible.verbose = 'v' 26 | end 27 | end 28 | 29 | end 30 | -------------------------------------------------------------------------------- /ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | roles_path=../:/etc/ansible/roles/ 3 | -------------------------------------------------------------------------------- /defaults/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # 4 | # OSB - installation parameters 5 | # 6 | oracle_base_dir: '/u01/app/oracle' 7 | middleware_home_dir: "{{ oracle_base_dir }}/product/middleware" 8 | osb_installation_type: 'Service Bus' 9 | osb_jar_path: '' 10 | osb_version: '12c' 11 | 12 | # 13 | # Oracle DB - connection parameters 14 | # 15 | oracle_db_address: 'localhost' 16 | oracle_db_port: '1521' 17 | oracle_db_sid: 'xe' 18 | oracle_db_user: 'sys' 19 | oracle_db_password: 'oracle' 20 | oracle_db_role: 'SYSDBA' 21 | 22 | # 23 | # OSB - Schemas names 24 | # 25 | osb_rcu_schema_prefix: 'OSB' 26 | osb_schemas_common_password: 'oracle' 27 | osb_rcu_components: 28 | - MDS 29 | - IAU 30 | - IAU_APPEND 31 | - IAU_VIEWER 32 | - OPSS 33 | - UCSUMS 34 | - WLS 35 | - STB 36 | - SOAINFRA 37 | 38 | # 39 | # OSB - cluster parameters 40 | # 41 | osb_domain_name: 'osb_domain' 42 | osb_domain_home: "{{ middleware_home_dir }}/user_projects/domains/{{ osb_domain_name }}" 43 | osb_cluster_name: 'osb_cluster' 44 | osb_cluster_nodes: 45 | - "localhost" 46 | 47 | # 48 | # OSB - nodemanager parameters 49 | # 50 | osb_nodemanager_home: "{{ middleware_home_dir }}/user_projects/nodemanagers/{{ osb_domain_name }}" 51 | osb_nodemanager_listen_address: 'localhost' 52 | osb_nodemanager_listen_port: 5556 53 | osb_nodemanager_connection_mode: 'ssl' 54 | 55 | # 56 | # OSB - AdminServer parameters 57 | # 58 | osb_admin_server_name: 'AdminServer' 59 | osb_admin_server_listen_address: "localhost" 60 | osb_admin_server_listen_port: 7001 61 | osb_admin_username: 'weblogic' 62 | osb_admin_password: 'manager1' 63 | 64 | # 65 | # OSB - Managed servers parameters 66 | # 67 | osb_managed_servers_per_machine: 1 68 | osb_managed_server_listen_port_start: 8000 69 | osb_managed_server_listen_address: "localhost" 70 | 71 | # 72 | # Import OSB project options 73 | # 74 | osb_sbconfig_jar_file: '/tmp/sbconfig.jar' 75 | osb_sbconfig_customization_file: '/tmp/ALSBCustomizationFile.xml' 76 | osb_sbconfig_project: 'default' 77 | -------------------------------------------------------------------------------- /files/osb_control_admin_server.py: -------------------------------------------------------------------------------- 1 | import socket 2 | import os.path 3 | import sys 4 | 5 | # Get control action from the command line 6 | control_action=sys.argv[1] 7 | # Set parameters from environment variables and the sourced property file passed 8 | # as argument to the script. 9 | print '[INFO] Setting parameters..' 10 | domain_configuration_home = os.getenv('DOMAIN_CONFIGURATION_HOME') 11 | domain_name = os.getenv('DOMAIN_NAME') 12 | nodemanager_config_file = domain_configuration_home +'/nodemanager_config_file.properties' 13 | nodemanager_key_file = domain_configuration_home + '/nodemanager_key_file.properties' 14 | 15 | # Connect to Nodemanager to control the AdminServer 16 | print '[INFO] Connecting to NodeManager..' 17 | if os.path.isfile(nodemanager_config_file) and os.path.isfile(nodemanager_key_file): 18 | print "[INFO] Authentication type: 'key_file'" 19 | nmConnect(userConfigFile=nodemanager_config_file, userKeyFile=nodemanager_key_file, \ 20 | host=nodemanager_listen_address, port=nodemanager_listen_port, domainName=domain_name, \ 21 | domainDir=domain_configuration_home, nmType=nodemanager_connection_mode) 22 | else: 23 | print "[INFO] Authentication type: 'login/password'" 24 | nmConnect(nodemanager_username, nodemanager_password, nodemanager_listen_address, \ 25 | nodemanager_listen_port, domain_name, domain_configuration_home, nodemanager_connection_mode) 26 | 27 | # NOTE: The server status is logged twice. 28 | # TODO: Check why nmServerStatus() logs to stdout despite the assignement action below 29 | server_status = nmServerStatus(admin_server_name) 30 | print "[DEBUG] Server status is: %s" % server_status 31 | 32 | try: 33 | if (control_action == 'start') and (server_status != 'RUNNING'): 34 | print '[INFO] Starting AdminServer..' 35 | nmStart(admin_server_name) 36 | elif (control_action == 'stop') and (server_status == 'RUNNING') : 37 | print '[INFO] Stopping AdminServer..' 38 | nmKill(admin_server_name) 39 | except: 40 | dumpStack() 41 | print "[ERROR] Failed to %s the AdminServer !" % control_action 42 | exit(defaultAnswer='y', exitcode=1) 43 | 44 | # Quit current session 45 | print '[INFO] Disconnecting from NodeManager..' 46 | nmDisconnect() 47 | -------------------------------------------------------------------------------- /files/osb_control_admin_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | SCRIPT=$(readlink -f $0) 6 | SCRIPT_PATH=$(dirname $SCRIPT) 7 | SUPPORTED_CONTROL_ACTIONS=(stop start) 8 | 9 | usage(){ 10 | echo "[ERROR] Usage: $0 {stop|start}" 11 | exit 1 12 | } 13 | 14 | control_admin_server() { 15 | ${FUSION_MIDDLEWARE_HOME}/common/bin/wlst.sh \ 16 | -loadProperties ${SCRIPT_PATH}/../config/osb_environment.properties \ 17 | ${SCRIPT_PATH}/osb_control_admin_server.py $CONTROL_ACTION 18 | } 19 | 20 | if [ $# -ne 1 ]; then 21 | usage 22 | fi 23 | 24 | if [[ ! ${SUPPORTED_CONTROL_ACTIONS[*]} =~ "$1" ]]; then 25 | usage 26 | else 27 | CONTROL_ACTION="$1" 28 | fi 29 | 30 | source ${SCRIPT_PATH}/osb_set_environment_variables.sh 31 | 32 | control_admin_server 33 | -------------------------------------------------------------------------------- /files/osb_control_managed_servers.py: -------------------------------------------------------------------------------- 1 | import os.path 2 | import sys 3 | 4 | def control_managed_servers(action, current_expected_status): 5 | """ 6 | Control managed servers status using MBean objects. 7 | Supported actions are 'start' and 'stop'. 8 | """ 9 | is_failed=false 10 | try: 11 | domainRuntime() 12 | server_lifecycles = cmo.getServerLifeCycleRuntimes() 13 | for server_lifecycle in server_lifecycles: 14 | server_status = server_lifecycle.getState() 15 | server_name = server_lifecycle.getName() 16 | if (server_status in current_expected_status and server_name != admin_server_name): 17 | print "[DEBUG] '%s' server status is: %s" % (server_name, server_status) 18 | if (control_action == 'start'): 19 | print "[INFO] Starting server %s.." % server_name 20 | task = server_lifecycle.start() 21 | elif (control_action == 'stop'): 22 | print "[INFO] Stopping server %s.." % server_name 23 | task = server_lifecycle.shutdown(1000, java.lang.Boolean('true')) 24 | java.lang.Thread.sleep(1000) 25 | except: 26 | dumpStack() 27 | print "[ERROR] Failed to %s '%s' server !" % (control_action, server_name) 28 | is_failed=true 29 | 30 | return is_failed 31 | 32 | # Get control action from the command line 33 | control_action=sys.argv[1] 34 | # Set parameters from environment variables and the sourced property file passed 35 | # as argument to the script. 36 | print '[INFO] Setting parameters..' 37 | domain_configuration_home = os.getenv('DOMAIN_CONFIGURATION_HOME') 38 | admin_server_url = 't3://' + admin_server_listen_address + ':' + admin_server_listen_port 39 | admin_server_config_file = domain_configuration_home + '/admin_server_config_file.properties' 40 | admin_server_key_file = domain_configuration_home + '/admin_server_key_file.properties' 41 | 42 | # Connect to AdminServer to issue commands and control the Managed Servers 43 | print '[INFO] Connecting to AdminServer..' 44 | if os.path.isfile(admin_server_config_file) and os.path.isfile(admin_server_key_file): 45 | print "[INFO] Authentication type: 'key_file'" 46 | connect(userConfigFile=admin_server_config_file, userKeyFile=admin_server_key_file, \ 47 | url=admin_server_url) 48 | else: 49 | print "[INFO] Authentication type: 'login/password'" 50 | connect(admin_username, admin_password, admin_server_url) 51 | 52 | # Control WLS instances/servers 53 | if (control_action == 'start'): 54 | print '[INFO] Starting managed servers..' 55 | if control_managed_servers('start', ['SHUTDOWN', 'FAILED_NOT_RESTARTABLE']): 56 | exit(defaultAnswer='y', exitcode=1) 57 | elif (control_action == 'stop'): 58 | print '[INFO] Stopping managed servers..' 59 | if control_managed_servers('stop', 'RUNNING'): 60 | exit(defaultAnswer='y', exitcode=1) 61 | 62 | # Quit current session 63 | print '[INFO] Disconnecting from AdminServer..' 64 | disconnect() 65 | -------------------------------------------------------------------------------- /files/osb_control_managed_servers.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | SCRIPT=$(readlink -f $0) 6 | SCRIPT_PATH=$(dirname $SCRIPT) 7 | SUPPORTED_CONTROL_ACTIONS=(stop start) 8 | 9 | usage(){ 10 | echo "[ERROR] Usage: $0 {stop|start}" 11 | exit 1 12 | } 13 | 14 | control_managed_servers() { 15 | ${FUSION_MIDDLEWARE_HOME}/common/bin/wlst.sh \ 16 | -loadProperties ${SCRIPT_PATH}/../config/osb_environment.properties \ 17 | ${SCRIPT_PATH}/osb_control_managed_servers.py $CONTROL_ACTION 18 | } 19 | 20 | if [ $# -ne 1 ]; then 21 | usage 22 | fi 23 | 24 | if [[ ! ${SUPPORTED_CONTROL_ACTIONS[*]} =~ "$1" ]]; then 25 | usage 26 | else 27 | CONTROL_ACTION="$1" 28 | fi 29 | 30 | source ${SCRIPT_PATH}/osb_set_environment_variables.sh 31 | 32 | control_managed_servers 33 | -------------------------------------------------------------------------------- /files/osb_create_basic_domain.py: -------------------------------------------------------------------------------- 1 | # 2 | # This is a WLST script to create and configure an OSB cluster. 3 | # 4 | 5 | print '[INFO] Setting parameters..' 6 | machines=cluster_nodes.split(",") 7 | server_groups=['OSB-MGD-SVRS-COMBINED'] 8 | data_source_driver='oracle.jdbc.OracleDriver' 9 | data_source_test='SQL SELECT 1 FROM DUAL' 10 | 11 | domain_application_home = os.getenv('DOMAIN_APPLICATION_HOME') 12 | domain_configuration_home = os.getenv('DOMAIN_CONFIGURATION_HOME') 13 | fusion_middleware_home = os.getenv('FUSION_MIDDLEWARE_HOME') 14 | middleware_home = os.getenv('MIDDLEWARE_HOME') 15 | nodemanager_home = os.getenv('NODE_MANAGER_HOME') 16 | weblogic_home = os.getenv('WEBLOGIC_HOME') 17 | 18 | weblogic_template = middleware_home + '/wlserver/common/templates/wls/wls.jar' 19 | osb_template = middleware_home + '/osb/common/templates/wls/oracle.osb_template.jar' 20 | 21 | print "[INFO] Create domain '%s' " % domain_name 22 | readTemplate(weblogic_template) 23 | setOption('AppDir', domain_application_home) 24 | setOption('DomainName', domain_name) 25 | setOption('OverwriteDomain', 'true') 26 | setOption('ServerStartMode', 'prod') 27 | setOption('NodeManagerType', 'CustomLocationNodeManager') 28 | setOption('NodeManagerHome', nodemanager_home) 29 | cd('/Security/base_domain/User/weblogic') 30 | cmo.setName(admin_username) 31 | cmo.setUserPassword(admin_password) 32 | cd('/') 33 | 34 | print '[INFO] Save domain' 35 | writeDomain(domain_configuration_home) 36 | closeTemplate() 37 | 38 | print '[INFO] Read domain' 39 | readDomain(domain_configuration_home) 40 | 41 | print '[INFO] Add OSB tempalte..' 42 | addTemplate(osb_template) 43 | 44 | print "[WARN] Remove default server 'osb_server1' created by the OSB tempalte" 45 | delete('osb_server1', 'Server') 46 | 47 | print '[INFO] Create OSB cluster' 48 | cluster = create(cluster_name,'Cluster') 49 | cluster.setClusterMessagingMode('unicast') 50 | 51 | print '[INFO] Creating machines and servers..' 52 | for i in range(len(machines)): 53 | print "[INFO] Creating machine_%s" % repr(i) 54 | machine = create(machines[i],'UnixMachine') 55 | machine.setPostBindUIDEnabled(java.lang.Boolean('true')) 56 | machine.setPostBindUID(oracle_user_name) 57 | machine.setPostBindGIDEnabled(java.lang.Boolean('true')) 58 | machine.setPostBindGID(oracle_group_name) 59 | cd('/Machine/' + machine.getName()) 60 | nodemanager = create(machine.getName(),'NodeManager') 61 | nodemanager.setListenAddress(machines[i]) 62 | nodemanager.setNMType(nodemanager_connection_mode) 63 | cd('/') 64 | for j in range(int(managed_servers_per_machine)): 65 | managed_server_listen_port = int(managed_server_listen_port_start) + j 66 | managed_server_name = 'server' + repr(j) + '_' + machines[i] 67 | print "[INFO] [%s] Creating server.." % managed_server_name 68 | server = create(managed_server_name,'Server') 69 | server.setListenPort(managed_server_listen_port) 70 | server.setListenAddress(managed_server_listen_address) 71 | server.setCluster(cluster) 72 | server.setMachine(machine) 73 | cd('Servers/' + managed_server_name) 74 | print "[INFO] [%s] Configure overload protection" 75 | overload_protection = create(managed_server_name,'OverloadProtection') 76 | overload_protection.setFailureAction('force-shutdown') 77 | overload_protection.setPanicAction('system-exit') 78 | cd('OverloadProtection/' + managed_server_name) 79 | create(managed_server_name,'ServerFailureTrigger') 80 | cd('../..') 81 | overload_protection.getServerFailureTrigger().setMaxStuckThreadTime(600) 82 | overload_protection.getServerFailureTrigger().setStuckThreadCount(0) 83 | print "[INFO] [%s] Configure logging" % managed_server_name 84 | server_log = create(managed_server_name,'Log') 85 | server_log.setRotationType('bySize') 86 | server_log.setFileMinSize(5000) 87 | server_log.setNumberOfFilesLimited(java.lang.Boolean('true')) 88 | server_log.setFileCount(10) 89 | server_log.setLogFileSeverity('Info') 90 | server_log.setStdoutSeverity('Error') 91 | server_log.setDomainLogBroadcastSeverity('Error') 92 | web_server = create(managed_server_name,'WebServer') 93 | cd('WebServer/' + managed_server_name) 94 | create(managed_server_name,'WebServerLog') 95 | cd('../..') 96 | web_server.getWebServerLog().setLoggingEnabled(java.lang.Boolean('false')) 97 | web_server.getWebServerLog().setRotationType('bySize') 98 | web_server.getWebServerLog().setFileMinSize(5000) 99 | web_server.getWebServerLog().setNumberOfFilesLimited(java.lang.Boolean('true')) 100 | web_server.getWebServerLog().setFileCount(10) 101 | cd('../..') 102 | print "[INFO] [%s] Set server group" % managed_server_name 103 | setServerGroups(managed_server_name, server_groups) 104 | print "[INFO] [%s] Assign server to cluster '%s'" % (managed_server_name, cluster_name) 105 | assign('Server', managed_server_name, 'Cluster', cluster_name) 106 | cd('/') 107 | 108 | print "[INFO] Retarget JMS resources.." 109 | filestores = cmo.getFileStores() 110 | for filestore in filestores: 111 | filestore.setDirectory(domain_application_home) 112 | targets = filestore.getTargets() 113 | for target in targets: 114 | if ' (migratable)' in target.getName(): 115 | assign('FileStore', filestore.getName(), 'Target', target.getName().strip(' (migratable)')) 116 | jmsservers = cmo.getJMSServers() 117 | for jmsserver in jmsservers: 118 | targets = jmsserver.getTargets() 119 | for target in targets: 120 | if ' (migratable)' in target.getName(): 121 | assign('JMSServer', jmsserver.getName(), 'Target', target.getName().strip(' (migratable)')) 122 | safagents = cmo.getSAFAgents() 123 | for safagent in safagents: 124 | targets = safagent.getTargets() 125 | for target in targets: 126 | if ' (migratable)' in target.getName(): 127 | assign('SAFAgent', safagent.getName(), 'Target', target.getName().strip(' (migratable)')) 128 | 129 | print '[INFO] Adjust data source settings..' 130 | jdbcsystemresources = cmo.getJDBCSystemResources() 131 | for jdbcsystemresource in jdbcsystemresources: 132 | cd ('/JDBCSystemResource/' + jdbcsystemresource.getName() + '/JdbcResource/' \ 133 | + jdbcsystemresource.getName() + '/JDBCConnectionPoolParams/NO_NAME_0') 134 | cmo.setInitialCapacity(1) 135 | cmo.setMaxCapacity(15) 136 | cmo.setMinCapacity(1) 137 | cmo.setStatementCacheSize(0) 138 | cmo.setTestConnectionsOnReserve(java.lang.Boolean('false')) 139 | cmo.setTestTableName(data_source_test) 140 | cmo.setConnectionCreationRetryFrequencySeconds(30) 141 | cd ('/JDBCSystemResource/' + jdbcsystemresource.getName() + '/JdbcResource/' \ 142 | + jdbcsystemresource.getName() + '/JDBCDriverParams/NO_NAME_0') 143 | cmo.setUrl(data_source_url) 144 | cmo.setPasswordEncrypted(data_source_password) 145 | cd ('/JDBCSystemResource/' + jdbcsystemresource.getName() + '/JdbcResource/' \ 146 | + jdbcsystemresource.getName() + '/JDBCDriverParams/NO_NAME_0/Properties/NO_NAME_0/Property/user') 147 | cmo.setValue(cmo.getValue().replace('DEV', data_source_user_prefix)) 148 | cd('/') 149 | 150 | print '[INFO] Set NodeManager credentials' 151 | cd('/SecurityConfiguration/' + domain_name) 152 | cmo.setNodeManagerUsername(nodemanager_username) 153 | cmo.setNodeManagerPasswordEncrypted(nodemanager_password) 154 | 155 | print '[INFO] Configuring AdminServer..' 156 | cd('/Server/' + admin_server_name) 157 | cmo.setListenAddress(admin_server_listen_address) 158 | cmo.setListenPort(int(admin_server_listen_port)) 159 | create(admin_server_name,'SSL') 160 | cd('SSL/' + admin_server_name) 161 | cmo.setHostnameVerificationIgnored(true) 162 | cmo.setHostnameVerifier(None) 163 | cmo.setTwoWaySSLEnabled(false) 164 | cmo.setClientCertificateEnforced(false) 165 | 166 | print '[INFO] Set up authentication configuration' 167 | cd('/SecurityConfiguration/'+ domain_name +'/Realms/myrealm') 168 | cd('AuthenticationProviders/DefaultAuthenticator') 169 | set('ControlFlag', 'SUFFICIENT') 170 | cd('../../') 171 | 172 | print '[INFO] Save changes' 173 | updateDomain() 174 | closeDomain() 175 | -------------------------------------------------------------------------------- /files/osb_create_basic_domain_service.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | SCRIPT=$(readlink -f $0) 6 | SCRIPT_PATH=$(dirname $SCRIPT) 7 | 8 | source ${SCRIPT_PATH}/osb_set_environment_variables.sh 9 | 10 | create_basic_domain() { 11 | ${FUSION_MIDDLEWARE_HOME}/common/bin/wlst.sh \ 12 | -loadProperties ${SCRIPT_PATH}/../config/osb_environment.properties \ 13 | ${SCRIPT_PATH}/osb_create_basic_domain.py 14 | } 15 | 16 | change_memory_settings() { 17 | 18 | echo '[INFO] Change DERBY flag' 19 | sed -i -e '/DERBY_FLAG="true"/ s:DERBY_FLAG="true":DERBY_FLAG="false":' ${DOMAIN_CONFIGURATION_HOME}/bin/setDomainEnv.sh 20 | 21 | } 22 | 23 | create_basic_domain 24 | 25 | change_memory_settings 26 | -------------------------------------------------------------------------------- /files/osb_import_project.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from java.io import FileInputStream 3 | from com.bea.wli.config.customization import Customization 4 | from com.bea.wli.sb.management.importexport import ALSBImportOperation 5 | from com.bea.wli.sb.management.configuration import ALSBConfigurationMBean 6 | from com.bea.wli.sb.management.configuration import SessionManagementMBean 7 | from com.bea.wli.sb.util import Refs 8 | 9 | # Set parameters from environment variables and the sourced property file passed 10 | # as argument to the script. 11 | print '[INFO] Setting parameters..' 12 | domain_configuration_home = os.getenv('DOMAIN_CONFIGURATION_HOME') 13 | admin_server_url = 't3://' + admin_server_listen_address + ':' + admin_server_listen_port 14 | admin_server_config_file = domain_configuration_home + '/admin_server_config_file.properties' 15 | admin_server_key_file = domain_configuration_home + '/admin_server_key_file.properties' 16 | 17 | def readBinaryFile(fileName): 18 | file = open(fileName, 'rb') 19 | bytes = file.read() 20 | return bytes 21 | 22 | def printOpsMap(map): 23 | """ 24 | Utility function to print the list of operations 25 | """ 26 | ops_set = map.entrySet() 27 | for entry in ops_set: 28 | print "%s %s" % (entry.getValue().getOperation(), entry.getKey()) 29 | 30 | def printDiagMap(map): 31 | """ 32 | Utility function to print the diagnostics 33 | """ 34 | diag_set = map.entrySet() 35 | for entry in diag_set: 36 | print entry.getValue().toString() 37 | 38 | def importSBConfigFile(config_mbean): 39 | 40 | print "[DEBUG] Read SBConfig file '%s'", sbconfig_jar_file 41 | theBytes = readBinaryFile(sbconfig_jar_file) 42 | print "[INFO] Loading SBConfig JAR file" 43 | config_mbean.uploadJarFile(theBytes) 44 | print "[INFO] SBConfig JAR loaded" 45 | 46 | if not sbconfig_project: 47 | print "[WARN] No project specified, additive deployment performed" 48 | alsbJarInfo = config_mbean.getImportJarInfo() 49 | alsbImportPlan = alsbJarInfo.getDefaultImportPlan() 50 | alsbImportPlan.setPassphrase(passphrase) 51 | alsbImportPlan.setPreserveExistingEnvValues(true) 52 | importResult = config_mbean.importUploaded(alsbImportPlan) 53 | else: 54 | print "[INFO] OSB project '%s' will get overlaid" % sbconfig_project 55 | alsbJarInfo = config_mbean.getImportJarInfo() 56 | print "[INFO] Use default import plan" 57 | alsbImportPlan = alsbJarInfo.getDefaultImportPlan() 58 | #alsbImportPlan.setPassphrase(passphrase) 59 | operationMap=HashMap() 60 | operationMap = alsbImportPlan.getOperations() 61 | print "[DEBUG] Show import operations" 62 | printOpsMap(operationMap) 63 | ops_set = operationMap.entrySet() 64 | alsbImportPlan.setPreserveExistingEnvValues(true) 65 | 66 | # Use a flag to check importation status 67 | abort = false 68 | # List of created refs 69 | createdRef = ArrayList() 70 | 71 | for item in ops_set: 72 | ref = item.getKey() 73 | op = item.getValue() 74 | # Set different logic based on the resource type 75 | ref_type = ref.getTypeId 76 | if ref_type == Refs.SERVICE_ACCOUNT_TYPE or ref_type == Refs.SERVICE_PROVIDER_TYPE: 77 | if op.getOperation() == ALSBImportOperation.Operation.Create: 78 | print "[WARN] Unable to import a service account or a service provider on a target system", ref 79 | abort = true 80 | elif op.getOperation() == ALSBImportOperation.Operation.Create: 81 | # Keep the list of created resources 82 | createdRef.add(ref) 83 | 84 | if abort: 85 | raise 86 | 87 | importResult = config_mbean.importUploaded(alsbImportPlan) 88 | 89 | print "[DEBUG] Show import diagnostics" 90 | printDiagMap(importResult.getImportDiagnostics()) 91 | 92 | if not importResult.getFailed().isEmpty(): 93 | print "[ERROR] One or more resources could not be imported properly" 94 | raise 95 | 96 | def applyCustomizationFile(config_mbean): 97 | print "[INFO] Loading customization file '%s'" % sbconfig_customization_file 98 | iStream = FileInputStream(sbconfig_customization_file) 99 | customizationList = Customization.fromXML(iStream) 100 | config_mbean.customize(customizationList) 101 | 102 | def main(): 103 | SessionMBean = None 104 | try: 105 | # Connect to AdminServer to issue commands and control the Managed Servers 106 | print "[INFO] Connecting to AdminServer.." 107 | if os.path.isfile(admin_server_config_file) and os.path.isfile(admin_server_key_file): 108 | print "[INFO] Authentication type: 'key_file'" 109 | connect(userConfigFile=admin_server_config_file, userKeyFile=admin_server_key_file, \ 110 | url=admin_server_url) 111 | else: 112 | print "[INFO] Authentication type: 'login/password'" 113 | connect(admin_username, admin_password, admin_server_url) 114 | 115 | # Create a configuration session 116 | domainRuntime() 117 | sessionName = String("Customization" + Long(System.currentTimeMillis()).toString()) 118 | SessionMBean = findService("SessionManagement", "com.bea.wli.sb.management.configuration.SessionManagementMBean") 119 | SessionMBean.createSession(sessionName) 120 | OSBConfigurationMBean = findService(String("ALSBConfiguration.").concat(sessionName), "com.bea.wli.sb.management.configuration.ALSBConfigurationMBean") 121 | # Import OSB project(s) from an SB jar file 122 | try: 123 | importSBConfigFile(OSBConfigurationMBean) 124 | # Apply XML customization file 125 | applyCustomizationFile(OSBConfigurationMBean) 126 | # Apply changes and save the configuration session 127 | SessionMBean.activateSession(sessionName, "Import OSB project") 128 | print "[INFO] Successfully Completed importation and customization" 129 | except Exception, error: 130 | print error 131 | print "[ERROR] This jar must be imported manually to resolve references and ressources dependencies" 132 | # Quit the MBean configuration session 133 | SessionMBean.discardSession(sessionName) 134 | # Exit the WLST session with exitcode=1 135 | exit(defaultAnswer='y', exitcode=1) 136 | 137 | # Disconnect from the WLST session 138 | disconnect() 139 | 140 | except: 141 | print "[ERROR] Unexpected error:", sys.exc_info()[0] 142 | if SessionMBean != None: 143 | SessionMBean.discardSession(sessionName) 144 | raise 145 | 146 | main() 147 | -------------------------------------------------------------------------------- /files/osb_import_project.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | SCRIPT=$(readlink -f $0) 6 | SCRIPT_PATH=$(dirname $SCRIPT) 7 | 8 | # Set environement variables 9 | source ${SCRIPT_PATH}/osb_set_environment_variables.sh 10 | source ${OSB_HOME}/tools/configjar/setenv.sh 11 | 12 | ${OSB_HOME}/tools/configjar/wlst.sh \ 13 | -loadProperties ${SCRIPT_PATH}/../config/osb_environment.properties \ 14 | ${SCRIPT_PATH}/osb_import_project.py 15 | -------------------------------------------------------------------------------- /files/osb_start_nodemanager.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | # Set environement variables 6 | source ~/scripts/osb_set_environment_variables.sh 7 | 8 | export JAVA_OPTIONS=-Djava.security.egd=file:///dev/urandom 9 | export PATH=${DOMAIN_CONFIGURATION_HOME}/bin/:$PATH 10 | 11 | # Check if the Nodemanager is running and start it if not. 12 | if [ $(pgrep -c -f -u oracle weblogic.NodeManager) -eq 0 ]; then 13 | startNodeManager.sh 14 | fi 15 | -------------------------------------------------------------------------------- /host_vars/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abessifi/ansible-osb/fefd31b95a7db53800bbc8ec613d754188ccb11a/host_vars/.gitignore -------------------------------------------------------------------------------- /host_vars/ansible-vm: -------------------------------------------------------------------------------- 1 | ansible_ssh_host: 192.168.33.101 2 | ansible_ssh_user: vagrant 3 | ansible_ssh_pass: vagrant 4 | 5 | -------------------------------------------------------------------------------- /meta/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | galaxy_info: 4 | author: Ahmed Bessifi 5 | description: "Install and configure Oracle Service Bus" 6 | license: "MIT" 7 | min_ansible_version: 1.9 8 | platforms: 9 | - name: EL 10 | versions: 11 | - 7 12 | galaxy_tags: 13 | - middleware 14 | - oracle 15 | - web 16 | 17 | dependencies: [] 18 | -------------------------------------------------------------------------------- /provision.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - hosts: ansible-vm 4 | roles: 5 | - role: abessifi.java 6 | java_version: 8 7 | java_jdk_type: 'oracle' 8 | oracle_jdk_rpm_package: 'jdk-8u77-linux-x64.rpm' 9 | rpm_download_directory: '/srv/files' 10 | java_set_as_default: true 11 | 12 | - role: abessifi.weblogic 13 | weblogic_jar_path: '/srv/files/fmw_12.2.1.0.0_infrastructure.jar' 14 | weblogic_quick_installation: false 15 | weblogic_installation_type: 'Fusion Middleware Infrastructure' 16 | weblogic_domain_name: 'osb_domain' 17 | 18 | - role: ansible-osb 19 | osb_jar_path: '/srv/files/fmw_12.2.1.0.0_osb.jar' 20 | oracle_db_address: 'db.weblogic.local' 21 | oracle_db_sid: 'xe.oracle.docker' 22 | oracle_db_password: 'oracle' 23 | osb_admin_server_listen_address: 'osb.weblogic.local' 24 | osb_managed_server_listen_address: 'osb.weblogic.local' 25 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | abessifi.java 2 | abessifi.weblogic 3 | -------------------------------------------------------------------------------- /tasks/configure.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # 4 | # Prepare environment and properties variables 5 | # 6 | 7 | - name: Copy environments and properties files 8 | template: 9 | src: "{{ item.src }}" 10 | dest: "{{ item.dest }}" 11 | owner: "{{ oracle.user }}" 12 | group: "{{ oracle.group }}" 13 | with_items: 14 | - { src: osb_set_environment_variables.sh.j2 , dest: "{{ osb.scripts_dir }}/osb_set_environment_variables.sh" } 15 | - { src: osb_environment.properties.j2, dest: "{{ osb.config_dir }}/osb_environment.properties" } 16 | 17 | # 18 | # Create and configure the OSB cluster 19 | # 20 | 21 | - name: Create the OSB cluster 22 | shell: "{{ osb.scripts_dir }}/osb_create_basic_domain_service.sh > {{ osb.logs_dir }}/create_osb_cluster_$(date +'%F').log 2>&1" 23 | register: create_cluster_cmd 24 | 25 | - set_fact: 26 | osb_already_configured: true 27 | when: create_cluster_cmd.rc == 0 28 | 29 | - name: Create AdminServer securtiy directory 30 | file: 31 | path: "{{ osb_domain_home }}/servers/AdminServer/security" 32 | state: directory 33 | owner: "{{ oracle.user }}" 34 | group: "{{ oracle.group }}" 35 | 36 | - name: Copy AdminServer and Nodemanager properties files 37 | template: 38 | src: "{{ item.src }}" 39 | dest: "{{ item.dest }}" 40 | owner: "{{ oracle.user }}" 41 | group: "{{ oracle.group }}" 42 | with_items: 43 | - { src: boot.properties.j2, dest: "{{ osb_domain_home }}/servers/AdminServer/security/boot.properties" } 44 | - { src: nodemanager.properties.j2, dest: "{{ osb_nodemanager_home }}/nodemanager.properties" } 45 | - { src: setUserOverrides.sh.j2, dest: "{{ osb_domain_home }}/bin/setUserOverrides.sh" } 46 | 47 | # 48 | # Configure the Nodemanager as a systemd service 49 | # 50 | 51 | - name: Copy NodeManager systemd script 52 | template: 53 | src: nodemanager.service.j2 54 | dest: /etc/systemd/system/nodemanager.service 55 | mode: 0664 56 | when: ansible_virtualization_type != 'docker' 57 | become: yes 58 | become_user: root 59 | 60 | - name: Enable Nodemanager service 61 | service: 62 | name: nodemanager 63 | enabled: yes 64 | when: ansible_virtualization_type != 'docker' 65 | become: yes 66 | become_user: root 67 | -------------------------------------------------------------------------------- /tasks/impex.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # This playbook is used to import and export OSB projects with a WLST script 3 | 4 | # 5 | # Export 6 | # 7 | # TODO 8 | 9 | # 10 | # Import 11 | # 12 | 13 | - name: Copy SBConfig JAR and XML customization files 14 | copy: 15 | src: "{{ item.src }}" 16 | dest: "{{ item.dest }}" 17 | owner: "{{ oracle.user }}" 18 | group: "{{ oracle.group }}" 19 | mode: 0750 20 | with_items: 21 | - { src: "{{ osb_sbconfig_jar_file }}", dest: "{{ osb.config_dir }}/sbconfig.jar" } 22 | - { src: "{{ osb_sbconfig_customization_file }}", dest: "{{ osb.config_dir }}/ALSBCustomizationFile.xml" } 23 | tags: 24 | - osb-import-project 25 | 26 | - name: Import OSB project 27 | shell: "{{ osb.scripts_dir }}/osb_import_project.sh >> {{ osb.logs_dir }}/osb_import_project_$(date +'%F').log 2>&1" 28 | tags: 29 | - osb-import-project 30 | -------------------------------------------------------------------------------- /tasks/install.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Install Oracle Service Bus 4 | shell: "java -Xms1024m -Xmx1024m -jar {{ osb_jar_path }} -silent -responseFile {{ osb.install_response_file }} > {{ osb.logs_dir }}/osb_installation_$(date +'%F').log 2>&1" 5 | 6 | - set_fact: 7 | osb_already_installed: true 8 | when: osb_home.stat.exists 9 | -------------------------------------------------------------------------------- /tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - include: validate.yml 4 | tags: 5 | - always 6 | 7 | - include: prepare.yml 8 | become: yes 9 | become_user: "{{ oracle.user }}" 10 | tags: 11 | - always 12 | 13 | - include: install.yml 14 | become: yes 15 | become_user: "{{ oracle.user }}" 16 | when: not osb_already_installed 17 | tags: 18 | - osb-plain-install 19 | - osb-install-and-init 20 | 21 | - include: rcu.yml 22 | become: yes 23 | become_user: "{{ oracle.user }}" 24 | 25 | - include: configure.yml 26 | become: yes 27 | become_user: "{{ oracle.user }}" 28 | when: not osb_already_configured 29 | tags: 30 | - osb-configure 31 | - osb-install-and-init 32 | 33 | - include: service.yml 34 | become: yes 35 | become_user: "{{ oracle.user }}" 36 | 37 | - name: Add custom facts for OSB 38 | template: 39 | src: osb.fact.j2 40 | dest: /etc/ansible/facts.d/osb.fact 41 | become: yes 42 | become_user: root 43 | tags: 44 | - always 45 | 46 | - include: impex.yml 47 | when: osb_already_configured 48 | become: yes 49 | become_user: "{{ oracle.user }}" 50 | -------------------------------------------------------------------------------- /tasks/prepare.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Create Ansible local facts directory 4 | file: 5 | path: /etc/ansible/facts.d 6 | state: directory 7 | become: yes 8 | become_user: root 9 | 10 | - name: Create essential directories 11 | file: 12 | path: "{{ item }}" 13 | state: directory 14 | owner: "{{ oracle.user }}" 15 | group: "{{ oracle.group }}" 16 | with_items: 17 | - "{{ osb.logs_dir }}" 18 | - "{{ osb.scripts_dir }}" 19 | - "{{ osb.config_dir }}" 20 | 21 | - name: Copy RCU passwords file 22 | template: 23 | src: rcu_passwords.j2 24 | dest: "{{ oracle.home_dir }}/.rcu_passwords" 25 | 26 | - name: Copy WLST scripts 27 | copy: 28 | src: "{{ item.src }}" 29 | dest: "{{ item.dest }}" 30 | owner: "{{ oracle.user }}" 31 | group: "{{ oracle.group }}" 32 | mode: 0750 33 | with_items: 34 | - { src: osb_create_basic_domain.py, dest: "{{ osb.scripts_dir }}/osb_create_basic_domain.py" } 35 | - { src: osb_create_basic_domain_service.sh, dest: "{{ osb.scripts_dir }}/osb_create_basic_domain_service.sh" } 36 | - { src: osb_control_admin_server.py, dest: "{{ osb.scripts_dir }}/osb_control_admin_server.py" } 37 | - { src: osb_control_admin_server.sh, dest: "{{ osb.scripts_dir }}/osb_control_admin_server.sh" } 38 | - { src: osb_control_managed_servers.py, dest: "{{ osb.scripts_dir }}/osb_control_managed_servers.py" } 39 | - { src: osb_control_managed_servers.sh, dest: "{{ osb.scripts_dir }}/osb_control_managed_servers.sh" } 40 | - { src: osb_start_nodemanager.sh, dest: "{{ osb.scripts_dir }}/osb_start_nodemanager.sh" } 41 | - { src: osb_import_project.py, dest: "{{ osb.scripts_dir }}/osb_import_project.py" } 42 | - { src: osb_import_project.sh, dest: "{{ osb.scripts_dir }}/osb_import_project.sh" } 43 | 44 | - name: Prepare OSB installation response file 45 | template: 46 | src: osb.rsp.j2 47 | dest: "{{ osb.install_response_file }}" 48 | -------------------------------------------------------------------------------- /tasks/rcu.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # 4 | # Drop OSB schemas tasks 5 | # 6 | 7 | - name: Purge OSB schemas 8 | shell: "{{ middleware_home_dir }}/oracle_common/bin/rcu -silent -dropRepository -databaseType ORACLE -connectString {{ oracle_db_address }}:{{ oracle_db_port }}:{{ oracle_db_sid }} -dbUser {{ oracle_db_user }} -dbRole {{ oracle_db_role }} -schemaPrefix {{ osb_rcu_schema_prefix }} -component {{ osb_rcu_components | join(' -component ') }} -f < {{ oracle.home_dir }}/.rcu_passwords > {{ osb.logs_dir }}/purge_osb_schemas_$(date +'%F').log 2>&1" 9 | register: rcu_drop_cmd 10 | when: osb_schemas_created 11 | tags: 12 | - osb-purge-db-schemas 13 | 14 | - set_fact: 15 | osb_schemas_created: false 16 | when: (rcu_drop_cmd is defined) and (not rcu_drop_cmd.rc) 17 | tags: 18 | - osb-purge-db-schemas 19 | 20 | # 21 | # Create OSB schemas tasks 22 | # 23 | 24 | - name: Create OSB schemas 25 | shell: "{{ middleware_home_dir }}/oracle_common/bin/rcu -silent -createRepository -databaseType ORACLE -connectString {{ oracle_db_address }}:{{ oracle_db_port }}:{{ oracle_db_sid }} -dbUser {{ oracle_db_user }} -dbRole {{ oracle_db_role }} -schemaPrefix {{ osb_rcu_schema_prefix }} -useSamePasswordForAllSchemaUsers true -component {{ osb_rcu_components | join(' -component ') }} -f < {{ oracle.home_dir }}/.rcu_passwords > {{ osb.logs_dir }}/create_osb_schemas_$(date +'%F').log 2>&1" 26 | register: rcu_create_cmd 27 | when: not osb_schemas_created 28 | tags: 29 | - osb-create-db-schemas 30 | 31 | - set_fact: 32 | osb_schemas_created: true 33 | when: (rcu_create_cmd is defined) and (not rcu_create_cmd.rc) 34 | tags: 35 | - osb-create-db-schemas 36 | -------------------------------------------------------------------------------- /tasks/service.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # 4 | # Restarting the Nodemanager restarts all services 5 | # 6 | - name: Restart Nodemanager service 7 | service: 8 | name: nodemanager 9 | state: restarted 10 | become: yes 11 | become_user: root 12 | tags: 13 | - osb-restart-nodemanager 14 | 15 | # 16 | # Stop services 17 | # 18 | 19 | - name: Stop Managed Servers 20 | shell: "{{ osb.scripts_dir }}/osb_control_managed_servers.sh stop >> {{ osb.logs_dir }}/control_managed_servers_$(date +'%F').log 2>&1" 21 | tags: 22 | - osb-stop-managed-servers 23 | 24 | - name: Stop AdminServer 25 | shell: "{{ osb.scripts_dir }}/osb_control_admin_server.sh stop >> {{ osb.logs_dir }}/control_admin_server_$(date +'%F').log 2>&1" 26 | tags: 27 | - osb-stop-adminserver 28 | 29 | - name: Stop Nodemanager service 30 | service: 31 | name: nodemanager 32 | state: stopped 33 | become: yes 34 | become_user: root 35 | tags: 36 | - osb-stop-nodemanager 37 | 38 | # 39 | # Start services 40 | # 41 | 42 | - name: Start Nodemanager service 43 | service: 44 | name: nodemanager 45 | state: started 46 | become: yes 47 | become_user: root 48 | tags: 49 | - osb-start-nodemanager 50 | - osb-install-and-init 51 | 52 | - name: Wait for NodeManager to startup 53 | wait_for: 54 | port: "{{ osb_nodemanager_listen_port }}" 55 | host: "{{ osb_nodemanager_listen_address }}" 56 | delay: 4 57 | timeout: 30 58 | ignore_errors: true 59 | tags: 60 | - osb-start-nodemanager 61 | - osb-restart-nodemanager 62 | - osb-install-and-init 63 | 64 | - name: Start AdminServer 65 | shell: "{{ osb.scripts_dir }}/osb_control_admin_server.sh start >> {{ osb.logs_dir }}/control_admin_server_$(date +'%F').log 2>&1" 66 | tags: 67 | - osb-start-adminserver 68 | - osb-install-and-init 69 | 70 | - name: Wait for AdminServer to startup 71 | wait_for: 72 | port: "{{ osb_admin_server_listen_port }}" 73 | host: "{{ osb_admin_server_listen_address }}" 74 | delay: 8 75 | timeout: 30 76 | ignore_errors: true 77 | tags: 78 | - osb-start-adminserver 79 | - osb-install-and-init 80 | 81 | - name: Start Managed Servers 82 | shell: "{{ osb.scripts_dir }}/osb_control_managed_servers.sh start >> {{ osb.logs_dir }}/control_managed_servers_$(date +'%F').log 2>&1" 83 | tags: 84 | - osb-start-managed-servers 85 | - osb-install-and-init 86 | 87 | - name: Wait for Managed Servers to startup 88 | wait_for: 89 | port: "{{ osb_managed_server_listen_port_start }}" 90 | host: "{{ osb_managed_server_listen_address }}" 91 | delay: 8 92 | timeout: 30 93 | ignore_errors: true 94 | tags: 95 | - osb-start-managed-servers 96 | - osb-install-and-init 97 | -------------------------------------------------------------------------------- /tasks/validate.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # 4 | # Compatibility verifications 5 | # 6 | 7 | - name: Get local facts 8 | setup: 9 | filter: "ansible_local" 10 | register: result 11 | 12 | - name: Check if Oracle Service Bus version is supported 13 | fail: 14 | msg: "OSB version '{{ osb_version }}' is not valide. Supported version is '12c' !" 15 | when: osb_version not in osb.supported_versions 16 | 17 | - name: Check if WebLogic and OSB versions are compatibles 18 | fail: 19 | msg: "OSB version '{{ osb_version }}' is not compatible with WLS version '{{ result.ansible_facts.ansible_local.weblogic.wls.version }}' !" 20 | when: result.ansible_facts.ansible_local.weblogic.wls.version != osb_version 21 | 22 | # 23 | # Check ressources existance 24 | # 25 | 26 | - name: Make sure the WebLogic home directory exists 27 | stat: 28 | path: "{{ middleware_home_dir }}/wlserver" 29 | register: wls_home 30 | become: yes 31 | become_user: "{{ oracle.user }}" 32 | 33 | - fail: 34 | msg: "The WebLogic home directory didn't exist '{{ middleware_home_dir }}/wlserver' !" 35 | when: not wls_home.stat.exists 36 | 37 | - name: Check if OSB is already installed 38 | stat: 39 | path: "{{ middleware_home_dir }}/osb" 40 | register: osb_home 41 | become: yes 42 | become_user: "{{ oracle.user }}" 43 | 44 | - debug: 45 | msg: "Oracle Service Bus is already installed in '{{ middleware_home_dir }}/osb'" 46 | when: osb_home.stat.exists 47 | 48 | - set_fact: 49 | osb_already_installed: true 50 | when: osb_home.stat.exists 51 | 52 | - name: Check the OSB installation JAR file 53 | stat: 54 | path: "{{ osb_jar_path }}" 55 | register: osb_jar 56 | when: not osb_already_installed 57 | 58 | - fail: 59 | msg: "The OSB installer JAR file is not found !" 60 | when: not osb_already_installed and not osb_jar.stat.exists 61 | 62 | - name: Check if OSB is already configured 63 | stat: 64 | path: "{{ osb_domain_home }}/config/config.xml" 65 | register: domain_home 66 | become: yes 67 | become_user: "{{ oracle.user }}" 68 | 69 | - debug: 70 | msg: "Oracle Service Bus is configured ! The config file '{{ osb_domain_home }}/config/config.xml' exists already !" 71 | when: domain_home.stat.exists 72 | 73 | - set_fact: 74 | osb_already_configured: true 75 | when: domain_home.stat.exists 76 | 77 | # 78 | # Check if OSB schemas were created 79 | # 80 | - set_fact: 81 | osb_schemas_created: true 82 | when: (ansible_local.osb.db is defined) and (ansible_local.osb.db.created|bool) 83 | -------------------------------------------------------------------------------- /templates/boot.properties.j2: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by Ansible 3 | # 4 | 5 | username={{ osb_admin_username }} 6 | password={{ osb_admin_password }} 7 | -------------------------------------------------------------------------------- /templates/nodemanager.properties.j2: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by Ansible 3 | # 4 | 5 | DomainsFile={{ osb_nodemanager_home }}/nodemanager.domains 6 | LogLimit=0 7 | PropertiesVersion={{ ansible_local.weblogic.wls.release }} 8 | AuthenticationEnabled=true 9 | NodeManagerHome={{ osb_nodemanager_home }} 10 | LogLevel=INFO 11 | DomainsFileEnabled=true 12 | StartScriptName=startWebLogic.sh 13 | NativeVersionEnabled=true 14 | ListenAddress={{ osb_nodemanager_listen_address }} 15 | ListenPort={{ osb_nodemanager_listen_port }} 16 | LogToStderr=true 17 | {% if osb_nodemanager_connection_mode == 'plain' %} 18 | SecureListener=false 19 | {% else %} 20 | SecureListener=true 21 | {% endif %} 22 | LogCount=1 23 | StopScriptEnabled=false 24 | QuitEnabled=false 25 | LogAppend=true 26 | StateCheckInterval=500 27 | CrashRecoveryEnabled=true 28 | StartScriptEnabled=true 29 | LogFile={{ osb_nodemanager_home }}/nodemanager.log 30 | LogFormatter=weblogic.nodemanager.server.LogFormatter 31 | ListenBacklog=50 32 | -------------------------------------------------------------------------------- /templates/nodemanager.service.j2: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by Ansible 3 | # 4 | 5 | [Unit] 6 | Description=NodeManager Service 7 | After=network.target 8 | 9 | [Service] 10 | User={{ oracle.user }} 11 | Group={{ oracle.group }} 12 | Type=simple 13 | Environment="JAVA_OPTIONS=-Djava.security.egd=file:///dev/urandom" 14 | ExecStart={{ osb_domain_home }}/bin/startNodeManager.sh > /dev/null 2>&1 & 15 | ExecStop={{ osb_domain_home }}/bin/stopNodeManager.sh > /dev/null 2>&1 & 16 | PIDFile={{ osb_nodemanager_home }}/nodemanager.process.id 17 | Restart=on-failure 18 | RestartSec=1 19 | 20 | [Install] 21 | WantedBy=default.target 22 | -------------------------------------------------------------------------------- /templates/osb.fact.j2: -------------------------------------------------------------------------------- 1 | [db] 2 | created={{osb_schemas_created }} 3 | -------------------------------------------------------------------------------- /templates/osb.rsp.j2: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by Ansible 3 | # 4 | 5 | [ENGINE] 6 | 7 | # DO NOT CHANGE THIS. 8 | Response File Version=1.0.0.0.0 9 | 10 | [GENERIC] 11 | 12 | # The oracle home location. This can be an existing Oracle Home or a new Oracle Home 13 | ORACLE_HOME={{ middleware_home_dir }} 14 | 15 | # Set this variable value to the Installation Type selected. e.g. Service Bus. 16 | INSTALL_TYPE={{ osb_installation_type }} 17 | -------------------------------------------------------------------------------- /templates/osb_environment.properties.j2: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by Ansible 3 | # 4 | 5 | # 6 | # OSB cluster configuration 7 | # 8 | oracle_user_name=oracle 9 | oracle_group_name=oinstall 10 | domain_name={{ osb_domain_name }} 11 | cluster_name={{ osb_cluster_name }} 12 | cluster_nodes={{ osb_cluster_nodes | join(',') }} 13 | managed_servers_per_machine={{ osb_managed_servers_per_machine }} 14 | managed_server_listen_port_start={{ osb_managed_server_listen_port_start }} 15 | managed_server_listen_address={{ osb_managed_server_listen_address }} 16 | 17 | # 18 | # Oracle database connection parameters 19 | # 20 | data_source_url=jdbc:oracle:thin:@//{{ oracle_db_address }}:{{ oracle_db_port }}/{{ oracle_db_sid }} 21 | data_source_user_prefix={{ osb_rcu_schema_prefix }} 22 | data_source_password={{ oracle_db_password }} 23 | 24 | # 25 | # Node Manager configuration 26 | # 27 | nodemanager_listen_address={{ osb_nodemanager_listen_address }} 28 | nodemanager_username={{ osb_admin_username }} 29 | nodemanager_password={{ osb_admin_password }} 30 | nodemanager_listen_port={{ osb_nodemanager_listen_port }} 31 | nodemanager_connection_mode={{ osb_nodemanager_connection_mode }} 32 | 33 | # 34 | # AdminServer configuration 35 | # 36 | admin_server_name={{ osb_admin_server_name }} 37 | admin_server_listen_address={{ osb_admin_server_listen_address }} 38 | admin_server_listen_port={{ osb_admin_server_listen_port }} 39 | admin_username={{ osb_admin_username }} 40 | admin_password={{ osb_admin_password }} 41 | 42 | # 43 | # Import OSB project options 44 | # 45 | sbconfig_jar_file={{ osb.config_dir }}/sbconfig.jar 46 | sbconfig_customization_file={{ osb.config_dir }}/ALSBCustomizationFile.xml 47 | sbconfig_project={{ osb_sbconfig_project }} 48 | -------------------------------------------------------------------------------- /templates/osb_set_environment_variables.sh.j2: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by Ansible 3 | # 4 | 5 | # The scripts create files that are placed in this directory 6 | TEMPORARY_DIRECTORY="/home/oracle/tmp" 7 | export TEMPORARY_DIRECTORY 8 | 9 | # Base directory 10 | BASE_DIRECTORY="{{ oracle_base_dir }}" 11 | export BASE_DIRECTORY 12 | 13 | # Directory that will used for the installation and configuration 14 | RUNTIME_HOME="${BASE_DIRECTORY}/product" 15 | export RUNTIME_HOME 16 | 17 | # Directory that will be used as the middleware home (holds software binaries) 18 | MIDDLEWARE_HOME="{{ middleware_home_dir }}" 19 | MW_HOME="{{ middleware_home_dir }}" 20 | export MIDDLEWARE_HOME MW_HOME 21 | 22 | # Location of the Oracle inventory 23 | ORACLE_INVENTORY_HOME="${BASE_DIRECTORY}/inventory" 24 | export ORACLE_INVENTORY_HOME 25 | 26 | # Name of the domain 27 | DOMAIN_NAME="{{ osb_domain_name }}" 28 | export DOMAIN_NAME 29 | 30 | # Directory where the configuration will be placed 31 | CONFIGURATION_HOME="${MIDDLEWARE_HOME}/user_projects" 32 | export CONFIGURATION_HOME 33 | 34 | # Domain home (directory that contains the domain configuration files) 35 | DOMAIN_CONFIGURATION_HOME="${CONFIGURATION_HOME}/domains/${DOMAIN_NAME}" 36 | export DOMAIN_CONFIGURATION_HOME 37 | 38 | # Domain application home (directory in which application related artifacts are placed) 39 | DOMAIN_APPLICATION_HOME="${CONFIGURATION_HOME}/applications/${DOMAIN_NAME}" 40 | export DOMAIN_APPLICATION_HOME 41 | 42 | # Node manager home (directory that contains the node manager configuration files) 43 | NODE_MANAGER_HOME="${CONFIGURATION_HOME}/nodemanagers/${DOMAIN_NAME}" 44 | export NODE_MANAGER_HOME 45 | 46 | # Default homes that are created when the software is installed 47 | COHERENCE_HOME="${MIDDLEWARE_HOME}/coherence" 48 | export COHERENCE_HOME 49 | FUSION_MIDDLEWARE_HOME="${MIDDLEWARE_HOME}/oracle_common" 50 | export FUSION_MIDDLEWARE_HOME 51 | OSB_HOME="${MIDDLEWARE_HOME}/osb" 52 | export OSB_HOME 53 | WEBLOGIC_HOME="${MIDDLEWARE_HOME}/wlserver" 54 | export WEBLOGIC_HOME 55 | -------------------------------------------------------------------------------- /templates/rcu_passwords.j2: -------------------------------------------------------------------------------- 1 | {{ oracle_db_password }} 2 | {{ osb_schemas_common_password }} 3 | -------------------------------------------------------------------------------- /templates/setUserOverrides.sh.j2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ADMIN_SERVER_HEAP_SIZE={{ osb_admin_server_heap_size }} 4 | ADMIN_SERVER_PERM_SIZE={{ osb_admin_server_perm_size }} 5 | MANAGED_SERVER_HEAP_SIZE={{ osb_managed_server_heap_size }} 6 | MANAGED_SERVER_PERM_SIZE={{ osb_managed_server_perm_size }} 7 | COHERENCE_SERVER_HEAP_SIZE={{ osb_coherence_server_heap_size }} 8 | COHERENCE_SERVER_PERM_SIZE={{ osb_coherence_server_perm_size }} 9 | 10 | JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.security.egd=file:///dev/urandom" 11 | 12 | ADMIN_SERVER_MEM_ARGS="-Xms${ADMIN_SERVER_HEAP_SIZE} -Xmx${ADMIN_SERVER_HEAP_SIZE} -XX:PermSize=${ADMIN_SERVER_PERM_SIZE} -XX:MaxPermSize=${ADMIN_SERVER_PERM_SIZE}" 13 | SERVER_MEM_ARGS="-Xms${MANAGED_SERVER_HEAP_SIZE} -Xmx${MANAGED_SERVER_HEAP_SIZE} -XX:PermSize=${MANAGED_SERVER_PERM_SIZE} -XX:MaxPermSize=${MANAGED_SERVER_PERM_SIZE}" 14 | COHERENCE_SERVER_MEM_ARGS="-Xms${COHERENCE_SERVER_HEAP_SIZE} -Xmx${COHERENCE_SERVER_HEAP_SIZE} -XX:PermSize=${COHERENCE_SERVER_PERM_SIZE} -XX:MaxPermSize=${COHERENCE_SERVER_PERM_SIZE}" 15 | MONITORING_ARGS="-XX:+UnlockCommercialFeatures -XX:+FlightRecorder" 16 | COHERENCE_MONITORING_ARGS="-Dtangosol.coherence.management=all -Dtangosol.coherence.management.remote=true" 17 | GARBAGE_COLLECTOR_ARGS="-XX:NewRatio=3 -XX:SurvivorRatio=128 -XX:MaxTenuringThreshold=0 -XX:+UseParallelGC -XX:MaxGCPauseMillis=200 -XX:GCTimeRatio=19 -XX:+UseParallelOldGC -XX:+UseTLAB" 18 | LARGE_PAGES_ARGS="-XX:LargePageSizeInBytes=2048k -XX:+UseLargePages" 19 | 20 | if [ "${ADMIN_URL}" = "" ] ; then 21 | USER_MEM_ARGS="${ADMIN_SERVER_MEM_ARGS} ${GARBAGE_COLLECTOR_ARGS}" 22 | else 23 | case ${SERVER_NAME} in 24 | server_*) 25 | USER_MEM_ARGS="${SERVER_MEM_ARGS} ${GARBAGE_COLLECTOR_ARGS} ${MONITORING_ARGS}" 26 | ;; 27 | coherence_server_1) 28 | USER_MEM_ARGS="${COHERENCE_SERVER_MEM_ARGS} ${GARBAGE_COLLECTOR_ARGS} ${MONITORING_ARGS} ${COHERENCE_MONITORING_ARGS}" 29 | ;; 30 | coherence_server_*) 31 | USER_MEM_ARGS="${COHERENCE_SERVER_MEM_ARGS} ${GARBAGE_COLLECTOR_ARGS} ${MONITORING_ARGS}" 32 | ;; 33 | esac 34 | fi 35 | 36 | export USER_MEM_ARGS 37 | export JAVA_OPTIONS 38 | -------------------------------------------------------------------------------- /test/integration/default/default.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # EMPTY 3 | -------------------------------------------------------------------------------- /test/integration/default/serverspec/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'rake' 4 | -------------------------------------------------------------------------------- /test/integration/default/serverspec/localhost/default_spec.rb: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | require 'spec_helper' 5 | require 'wls_params' 6 | 7 | describe "Check for prerequisites" do 8 | 9 | describe "in centos 7 distribution", :if => (os[:family] == 'redhat' && os[:release].start_with?('7.2')) do 10 | describe package('jdk1.8.0_77') do 11 | it { should be_installed } 12 | end 13 | describe command('java -version') do 14 | its(:stderr) { should include 'java version "1.8.0' } 15 | end 16 | end 17 | 18 | describe group('oinstall') do 19 | it { should exist } 20 | end 21 | 22 | describe user('oracle') do 23 | it { should exist } 24 | it { should belong_to_group 'oinstall' } 25 | end 26 | 27 | describe file('/etc/oraInst.loc')do 28 | it { should exist } 29 | it { should contain 'inventory_loc=/u01/app/oracle/inventory' } 30 | it { should contain 'inst_group=oinstall' } 31 | end 32 | 33 | describe file(ORACLE_MIDDLEWARE_DIR) do 34 | it { should be_directory } 35 | it { should be_owned_by 'oracle' } 36 | it { should be_grouped_into 'oinstall' } 37 | end 38 | 39 | end 40 | 41 | -------------------------------------------------------------------------------- /test/integration/default/serverspec/localhost/osb_installation_spec.rb: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | require 'spec_helper' 5 | require 'wls_params' 6 | 7 | describe "Check OSB installation" do 8 | 9 | describe file(OSB_HOME_DIR) do 10 | it { should be_directory } 11 | it { should be_owned_by 'oracle' } 12 | it { should be_grouped_into 'oinstall' } 13 | end 14 | 15 | end 16 | -------------------------------------------------------------------------------- /test/integration/default/serverspec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | require 'serverspec' 5 | set :backend, :exec 6 | 7 | -------------------------------------------------------------------------------- /test/integration/default/serverspec/wls_params.rb: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | ORACLE_BASE_DIR="/u01/app/oracle" 5 | ORACLE_MIDDLEWARE_DIR="#{ORACLE_BASE_DIR}/product/middleware" 6 | OSB_HOME_DIR="#{ORACLE_MIDDLEWARE_DIR}/osb" 7 | WEBLOGIC_DOMAIN_HOME="#{ORACLE_MIDDLEWARE_DIR}/user_projects/domains/osb_domain" 8 | WEBLOGIC_NODEMANAGER_HOME="#{ORACLE_MIDDLEWARE_DIR}/user_projects/nodemanagers/osb_domain" 9 | WEBLOGIC_ADMIN_SERVER_HOME="#{WEBLOGIC_DOMAIN_HOME}/servers/AdminServer" 10 | WEBLOGIC_MANAGED_SERVER_HOME="#{WEBLOGIC_DOMAIN_HOME}/servers/OSB_Server_1" 11 | -------------------------------------------------------------------------------- /test/integration/helpers/serverspec/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem 'net-ssh', '~> 2.0' 4 | -------------------------------------------------------------------------------- /vagrant-inventory.ini: -------------------------------------------------------------------------------- 1 | ansible-vm 2 | -------------------------------------------------------------------------------- /vars/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # 4 | # Oracle user parameters 5 | # 6 | oracle: 7 | user: oracle 8 | group: oinstall 9 | home_dir: '/home/oracle' 10 | 11 | # 12 | # OSB parameters 13 | # 14 | osb_already_installed: false 15 | osb_schemas_created: false 16 | osb_already_configured: false 17 | 18 | osb: 19 | supported_versions: ['12c'] 20 | install_response_file: '/tmp/osb.rsp' 21 | logs_dir: "{{ oracle.home_dir }}/logs" 22 | scripts_dir: "{{ oracle.home_dir }}/scripts" 23 | config_dir: "{{ oracle.home_dir }}/config" 24 | 25 | # 26 | # Default JVM Heap size for AdminServer, Managed Servers and Coherence 27 | # 28 | osb_admin_server_heap_size: '512m' 29 | osb_admin_server_perm_size: '256m' 30 | osb_managed_server_heap_size: '1024m' 31 | osb_managed_server_perm_size: '512m' 32 | osb_coherence_server_heap_size: '256m' 33 | osb_coherence_server_perm_size: '128m' 34 | --------------------------------------------------------------------------------