Until now, my project all had one shell-type provisioner looking like:
config.vm.provision "shell", inline: <<-SHELL
export SCRIPT_HOME=/vagrant/scripts
. $SCRIPT_HOME/install_env.sh
echo _______________________________________________________________________________
echo 0. Prepare Oracle Linux
$SCRIPT_HOME/0.PrepOEL.sh
echo _______________________________________________________________________________
echo 1. Create Filesystem
$SCRIPT_HOME/1.FileSystem.sh
echo _______________________________________________________________________________
echo 2. Create Oracle User
$SCRIPT_HOME/2.MakeOracleUser.sh
#
echo _______________________________________________________________________________
echo 3. Java SDK 8
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installJava.sh'
SHELL
This seems quite simple, but for my SOA Suite box, I had quite a lengthy provisioner, that somehow failed at running the RCU and therefor with the creation of the domain. There is a synchronization thingy with the database. The database is up, but at the time it reaches the RCU creation, it isn't able to connect. When running it seperately it works like a charm.
So, don't know how to solve that, but I want to re-provision only the part of the RCU and domain creation. Last night I fiddled around with it. Following the Vagrant Up basic usage explanation, you can create multiple provisioners with different names and different types. You can then force the provisioning for certain provisioners by type or by name.
I played around with that, because I couldn't get the syntax right. Although the explanation is proper, I wanted to have it slightly different and did not got it at first. Finally, I got it working.
Let's look into it.
First I split up my shell script, and found that I can put those in a variable. I now have a init script, that adapts the Linux OS, creates a new filesystem and creates an oracle user :
$initScript = <<-SCRIPT
export SCRIPT_HOME=/vagrant/scripts
echo _______________________________________________________________________________
echo 0. Prepare Oracle Linux
$SCRIPT_HOME/0.PrepOEL.sh
echo _______________________________________________________________________________
echo 1. Create Filesystem
$SCRIPT_HOME/1.FileSystem.sh
echo _______________________________________________________________________________
echo 2. Create Oracle User
$SCRIPT_HOME/2.MakeOracleUser.sh
SCRIPT
And one for installing the FMW software:
$installFMWScript = <<-SCRIPT
echo _______________________________________________________________________________
echo 3. Java SDK 8
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installJava.sh'
echo _______________________________________________________________________________
echo 4. Database 12c
sudo runuser -l oracle -c '/vagrant/scripts/database/installDB.sh'
echo _______________________________________________________________________________
echo 5.1 SQLCL and SQLDeveloper
sudo runuser -l oracle -c '/vagrant/scripts/database/installSqlcl.sh'
echo _______________________________________________________________________________
echo 5.2 SQLDeveloper
sudo runuser -l oracle -c '/vagrant/scripts/database/installSqlDeveloper.sh'
echo _______________________________________________________________________________
echo 6. Fusion Middleware
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installFMW.sh'
echo _______________________________________________________________________________
echo 6.1 Fusion Middleware - SOA
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installSOA.sh'
echo _______________________________________________________________________________
echo 6.2 Fusion Middleware - SB
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installSB.sh'
echo _______________________________________________________________________________
echo 6.3 Fusion Middleware - OHS
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installOHS.sh'
echo _______________________________________________________________________________
echo 7. BPM Quickstart
sudo runuser -l oracle -c '/vagrant/scripts/fmw/installBpmQS.sh'
SCRIPT
And one for configuring FMW, that is running the RCU and creating the domain:
$configFMWScript = <<-SCRIPT
echo _______________________________________________________________________________
echo 8.1 Fusion Middleware - RCU SOA
sudo runuser -l oracle -c '/home/oracle/bin/startDB.sh'
sudo runuser -l oracle -c '/vagrant/scripts/fmw/rcuSOA.sh'
echo _______________________________________________________________________________
echo 8.2 Fusion Middleware - Create Domain
sudo runuser -l oracle -c '/vagrant/scripts/fmw/fmw1221_domain/1.recreateFMWDomain.sh'
echo !!! TODO: Machine configuration update to use Plain - 5555
echo !!! TODO: Modify domain creation and property naming to create machine in accordance to nodemanager config.
echo _______________________________________________________________________________
echo 8.3 Fusion Middleware - Modify Nodemanager
sudo runuser -l oracle -c '/vagrant/scripts/fmw/fmw1221_domain/2.modifyNodeManager.sh'
echo _______________________________________________________________________________
echo 8.4 Fusion Middleware - Create Nodemanager service
sudo runuser -l oracle -c '/vagrant/scripts/fmw/fmw1221_domain/3.createNodemanagerService.sh'
#
SCRIPT
Cool, so far, right?
Now, after that we need to define the 3 provisioners:
config.vm.provision "init", type: "shell", inline: $initScript config.vm.provision "installFMW", type: "shell", inline: $installFMWScript config.vm.provision "configFMW", type: "shell", inline: $configFMWScript
These provisioners
- init -> provisioning/config of Oracle Linux, creation of oracle user, etc. This will be about equal for every box.
- installFMW -> installation of all FMW software.
- configFMW -> run the RCU and create domein.
- vagrant up --provision-with configureFMW
- vagrant reload --provision-with configureFMW
- vagrant provision --provision-with configureFMW
config.vm.provision "init", run: "once", type: "shell", inline: $initScript config.vm.provision "installFMW", type: "shell", run: "once", inline: $installFMWScript config.vm.provision "configFMW", type: "shell", run: "once", inline: $configFMWScript
The run option has the following possible values:
- "once": this is actually the default, the provisioner is only executed at first up. Or if you force it to run as described above.
- "always": the provisioner is executed at every up. This can be used for something you want to be done every time you do up. A good one would be to start the database.
- "never": this one is interesting. This makes the provisioner optional. That means it won't be executed, unless you ask for it. A good one would be to drop the RCU and delete the domain. So that you can reprovision the repository and the domain.
No comments :
Post a Comment