This commit is contained in:
lmds1 2014-10-20 14:19:25 -04:00
commit 11f5a08814
177 changed files with 11928 additions and 95 deletions

6
.gitignore vendored
View File

@ -3,3 +3,9 @@
*.log
*.log*
nohup.out
.DS_Store
# Vagrant stuff.
.vagrant
/vagrant/build
/vagrant/chef/tmp

View File

@ -9,5 +9,3 @@ http://jamesagnew.github.io/hapi-fhir/
A demonstration of this project is available here:
http://fhirtest.uhn.ca/

View File

@ -6,6 +6,7 @@ import ca.uhn.fhir.rest.client.IRestfulClientFactory;
import ca.uhn.fhir.rest.client.api.IBasicClient;
import ca.uhn.fhir.rest.client.interceptor.BasicAuthInterceptor;
import ca.uhn.fhir.rest.client.interceptor.BearerTokenAuthInterceptor;
import ca.uhn.fhir.rest.client.interceptor.CookieInterceptor;
import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
import ca.uhn.fhir.rest.server.EncodingEnum;
@ -46,6 +47,27 @@ public class ClientExamples {
// END SNIPPET: security
}
@SuppressWarnings("unused")
public void createCookie() {
// START SNIPPET: cookie
// Create a context and get the client factory so it can be configured
FhirContext ctx = new FhirContext();
IRestfulClientFactory clientFactory = ctx.getRestfulClientFactory();
// Create a cookie interceptor. This cookie will have the name "mycookie" and
// the value "Chips Ahoy"
CookieInterceptor interceptor = new CookieInterceptor("mycookie=Chips Ahoy");
// Register the interceptor with your client (either style)
IPatientClient annotationClient = ctx.newRestfulClient(IPatientClient.class, "http://localhost:9999/fhir");
annotationClient.registerInterceptor(interceptor);
IGenericClient genericClient = ctx.newRestfulGenericClient("http://localhost:9999/fhir");
annotationClient.registerInterceptor(interceptor);
// END SNIPPET: cookie
}
@SuppressWarnings("unused")
public void createSecurityBearer() {
// START SNIPPET: securityBearer

View File

@ -1,9 +1,7 @@
package example;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.WildcardFileFilter;
@ -12,51 +10,50 @@ import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.api.IResource;
import ca.uhn.fhir.model.dstu.resource.Patient;
import ca.uhn.fhir.model.dstu.valueset.ContactSystemEnum;
import ca.uhn.fhir.parser.DataFormatException;
import ca.uhn.fhir.validation.FhirValidator;
import ca.uhn.fhir.validation.ValidationFailureException;
import ca.uhn.fhir.validation.ValidationResult;
public class ValidatorExamples {
public void validateResource() {
//START SNIPPET: basicValidation
// START SNIPPET: basicValidation
// As always, you need a context
FhirContext ctx = new FhirContext();
// Create and populate a new patient object
Patient p = new Patient();
p.addName().addFamily("Smith").addGiven("John").addGiven("Q");
p.addIdentifier("urn:foo:identifiers", "12345");
p.addTelecom().setSystem(ContactSystemEnum.PHONE).setValue("416 123-4567");
// Request a validator and apply it
FhirValidator val = ctx.newValidator();
try {
ValidationResult result = val.validateWithResult(p);
if (result.isSuccessful()) {
val.validate(p);
System.out.println("Validation passed");
} catch (ValidationFailureException e) {
} else {
// We failed validation!
System.out.println("Validation failed");
// The ValidationFailureException which gets thrown by the validator
// will contain an OperationOutcome resource describing the failure
String results = ctx.newXmlParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome());
// The result contains an OperationOutcome outlining the failures
String results = ctx.newXmlParser().setPrettyPrint(true).encodeResourceToString(result.getOperationOutcome());
System.out.println(results);
}
//END SNIPPET: basicValidation
}
public static void main(String[] args) throws DataFormatException, IOException {
validateFiles();
// END SNIPPET: basicValidation
}
private static void validateFiles() throws IOException, FileNotFoundException {
//START SNIPPET: validateFiles
public static void main(String[] args) throws Exception {
validateFiles();
}
private static void validateFiles() throws Exception {
// START SNIPPET: validateFiles
FhirContext ctx = new FhirContext();
// Create a validator and configure it
@ -67,19 +64,23 @@ public class ValidatorExamples {
// Get a list of files in a given directory
String[] fileList = new File("/home/some/dir").list(new WildcardFileFilter("*.txt"));
for (String nextFile : fileList) {
// For each file, load the contents into a string
String nextFileContents = IOUtils.toString(new FileReader(nextFile));
// Parse that string (this example assumes JSON encoding)
IResource resource = ctx.newJsonParser().parseResource(nextFileContents);
// Apply the validation. This will throw an exception on the first
// validation failure
ValidationResult result = validator.validateWithResult(resource);
if (result.isSuccessful() == false) {
throw new Exception("We failed!");
}
// Apply the validation. This will throw an exception on the first validation failure
validator.validate(resource);
}
// If we make it here with no exception, all the files validated!
//END SNIPPET: validateFiles
// END SNIPPET: validateFiles
}
}

View File

@ -109,6 +109,21 @@
top-level resources in the returned bundle for search operations.
Thanks to Bill de Beaubien for reporting!
</action>
<action type="add" issue="31" dev="preston">
Add a
<![CDATA[<a href="https://www.vagrantup.com/">Vagrant</a>]]>
based environment (basically a fully built, self contained development environment) for
trying out the HAPI server modules. Thanks to Preston Lee for the pull request, and for
offering to maintain this!
</action>
<action type="add" issue="32" dev="jathman">
Change validation API so that it uses a return type instead of exceptions to communicate
validation failures. Thanks to Joe Athman for the pull request!
</action>
<action type="add" issue="35" dev="petromykhailysyn">
Add a client interceptor which adds an HTTP cookie to each client request. Thanks to
Petro Mykhailysyn for the pull request!
</action>
</release>
<release version="0.6" date="2014-Sep-08" description="This release brings a number of new features and bug fixes!">
<!--

View File

@ -0,0 +1,33 @@
package ca.uhn.fhir.rest.client.interceptor;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import ca.uhn.fhir.rest.client.IClientInterceptor;
import ca.uhn.fhir.rest.server.Constants;
/**
* HTTP interceptor to be used for adding Cookie to requests.
* <p>
* This interceptor adds a header resembling the following:<br/>
* &nbsp;&nbsp;&nbsp;<code>Cookie: [key]=[value]</code><br/>
* </p>
*/
public class CookieInterceptor implements IClientInterceptor {
private final String sessionCookie;
public CookieInterceptor(String sessionCookie) {
this.sessionCookie = sessionCookie;
}
@Override
public void interceptRequest(HttpRequestBase theRequest) {
theRequest.addHeader(Constants.HEADER_COOKIE, sessionCookie); //$NON-NLS-1$
}
@Override
public void interceptResponse(HttpResponse theResponse) {
// nothing
}
}

View File

@ -56,6 +56,7 @@ public class Constants {
public static final String HEADER_CONTENT_LOCATION = "Content-Location";
public static final String HEADER_CONTENT_LOCATION_LC = HEADER_CONTENT_LOCATION.toLowerCase();
public static final String HEADER_CONTENT_TYPE = "Content-Type";
public static final String HEADER_COOKIE = "Cookie";
public static final String HEADER_CORS_ALLOW_METHODS = "Access-Control-Allow-Methods";
public static final String HEADER_CORS_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
public static final String HEADER_CORS_EXPOSE_HEADERS = "Access-Control-Expose-Headers";

View File

@ -20,18 +20,15 @@ package ca.uhn.fhir.validation;
* #L%
*/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.Validate;
import com.phloc.schematron.ISchematronResource;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.api.Bundle;
import ca.uhn.fhir.model.api.IResource;
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
import org.apache.commons.lang3.Validate;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Resource validator, which checks resources for compliance against various validation schemes (schemas, schematrons, etc.)
@ -133,25 +130,18 @@ public class FhirValidator {
/**
* Validates a bundle instance, throwing a {@link ValidationFailureException} if the validation fails. This validation includes validation of all resources in the bundle.
*
* @param theResource
* @param theBundle
* The resource to validate
* @throws ValidationFailureException
* If the validation fails
* @deprecated use {@link #validateWithResult(ca.uhn.fhir.model.api.Bundle)} instead
*/
@Deprecated
public void validate(Bundle theBundle) {
Validate.notNull(theBundle, "theBundle must not be null");
ValidationContext<Bundle> ctx = ValidationContext.forBundle(myContext, theBundle);
for (IValidator next : myValidators) {
next.validateBundle(ctx);
}
OperationOutcome oo = ctx.getOperationOutcome();
if (oo != null && oo.getIssue().size() > 0) {
throw new ValidationFailureException(oo);
}
ValidationResult validationResult = validateWithResult(theBundle);
if (!validationResult.isSuccessful()) {
throw new ValidationFailureException(validationResult.getOperationOutcome());
}
}
/**
@ -161,21 +151,54 @@ public class FhirValidator {
* The resource to validate
* @throws ValidationFailureException
* If the validation fails
* @deprecated use {@link #validateWithResult(ca.uhn.fhir.model.api.IResource)} instead
*/
@Deprecated
public void validate(IResource theResource) throws ValidationFailureException {
Validate.notNull(theResource, "theResource must not be null");
ValidationResult validationResult = validateWithResult(theResource);
if (!validationResult.isSuccessful()) {
throw new ValidationFailureException(validationResult.getOperationOutcome());
}
}
ValidationContext<IResource> ctx = ValidationContext.forResource(myContext, theResource);
/**
* Validates a bundle instance returning a {@link ca.uhn.fhir.validation.ValidationResult} which contains the results.
* This validation includes validation of all resources in the bundle.
*
* @param theBundle the bundle to validate
* @return the results of validation
* @since 0.7
*/
public ValidationResult validateWithResult(Bundle theBundle) {
Validate.notNull(theBundle, "theBundle must not be null");
for (IValidator next : myValidators) {
next.validateResource(ctx);
}
ValidationContext<Bundle> ctx = ValidationContext.forBundle(myContext, theBundle);
OperationOutcome oo = ctx.getOperationOutcome();
if (oo != null && oo.getIssue().size() > 0) {
throw new ValidationFailureException(oo);
}
for (IValidator next : myValidators) {
next.validateBundle(ctx);
}
}
OperationOutcome oo = ctx.getOperationOutcome();
return ValidationResult.valueOf(oo);
}
/**
* Validates a resource instance returning a {@link ca.uhn.fhir.validation.ValidationResult} which contains the results.
*
* @param theResource the resource to validate
* @return the results of validation
* @since 0.7
*/
public ValidationResult validateWithResult(IResource theResource) {
Validate.notNull(theResource, "theResource must not be null");
ValidationContext<IResource> ctx = ValidationContext.forResource(myContext, theResource);
for (IValidator next : myValidators) {
next.validateResource(ctx);
}
OperationOutcome oo = ctx.getOperationOutcome();
return ValidationResult.valueOf(oo);
}
}

View File

@ -0,0 +1,72 @@
package ca.uhn.fhir.validation;
/*
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 University Health Network
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
/**
* Encapsulates the results of validation
*
* @see ca.uhn.fhir.validation.FhirValidator
* @since 0.7
*/
public class ValidationResult {
private OperationOutcome myOperationOutcome;
private ValidationResult(OperationOutcome myOperationOutcome) {
this.myOperationOutcome = myOperationOutcome;
}
public static ValidationResult valueOf(OperationOutcome myOperationOutcome) {
return new ValidationResult(myOperationOutcome);
}
public OperationOutcome getOperationOutcome() {
return myOperationOutcome;
}
@Override
public String toString() {
return "ValidationResult{" +
"myOperationOutcome=" + myOperationOutcome +
", description='" + toDescription() + '\'' +
'}';
}
private String toDescription() {
StringBuilder b = new StringBuilder(100);
if (myOperationOutcome != null) {
OperationOutcome.Issue issueFirstRep = myOperationOutcome.getIssueFirstRep();
b.append(issueFirstRep.getDetails().getValue());
b.append(" - ");
b.append(issueFirstRep.getLocationFirstRep().getValue());
}
return b.toString();
}
/**
* Was the validation successful
* @return true if the validation was successful
*/
public boolean isSuccessful() {
return myOperationOutcome == null || myOperationOutcome.getIssue().isEmpty();
}
}

View File

@ -0,0 +1,54 @@
Creating your own demo server with Vagrant
========
This source code repository includes configuration files to materialize an _entire_ server implementation off all project build artifacts in a single virtual machine (VM) image from scratch, allowing you to quickly bootstrap your own local copy of the project. The server will be completely encapsulated within the created VM image. The process _should_ run on OSX, Linux and Windows, but YMMV. The built-in settings support creation of a *VirtualBox*-based image on Ubuntu Linux, though with tuning of the base image you should be able to create images suitable for other hypervisors and cloud-based IaaS providers such as VMware and Amazon Web Services (AWS), respectively.
Dependencies
----
Prior to running, please ensure you have all .war files built, and the following installed and functioning propertly.
* All normal Java development dependencies. (Java SDK and Maven 3, specifically.)
* VirtualBox
* Vagrant
Creating Your VM
----
cd hapi-fhir-root/
mvn install # Creates web application .war files. Make sure they're built before proceeding!
cd vagrant
vagrant up # Will take a few minutes to boot up.
Your new server environment should now be running in a headless virtual machine on your local computer. The following step are performed automatically for you within the VM sandbox environment:
* A complete Ubuntu 14.04 Server VM is launched in headless mode, bridged to whatever host network interface you've selected.
* An IPv4 address is assigned via DHCP.
* MySQL Server (Community Edition) is installed from the official 10gen repository. (See the [Vagrantfile](https://github.com/preston/hapi-fhir/blob/master/vagrant/Vagrantfile) for the default root password.)
* Oracle Java 8 is installed.
* Tomcat 7 is installed and configured as a system service.
* All compiled *.war applications are deployed automatically and started.
* A "fhir" user is added to tomcat-users.xml. See [fhir.json](https://github.com/preston/hapi-fhir/blob/master/vagrant/chef/data_bags/tomcat_users/fhir.json) for the default password.
Tomcat will now be running on the VM on port 8080 with the management GUI available. For example, you can now visit:
* *Tomcat Manager*: assigned_ip:8080/manager/html
* *HAPI FHIR* JPA Server: assigned_ip:8080/hapi-fhir-jpaserver/
Screenshots
----
![Tomcat Manager](https://raw.githubusercontent.com/preston/hapi-fhir/master/vagrant/screenshots/tomcat.png)
![Demo Server](https://raw.githubusercontent.com/preston/hapi-fhir/master/vagrant/screenshots/hapi-fhir-jpaserver.png)
Advanced Configuration
----
The Vagrant documentation is the best place to start, but a few more commands of note are:
vagrant ssh # Command-line access to the VM.
vagrant destoy # Shuts down and completely destroys the VM.
Credits
----
Vagrant and Chef configuration by Preston Lee <preston.lee@prestonlee.com>

View File

@ -54,6 +54,7 @@
<menu name="Test Server">
<item name="Public Test Server" href="http://fhirtest.uhn.ca"/>
<item name="Vagrant (Private) Test Server" href="doc_vagrant.html"/>
</menu>
<menu name="Documentation">

View File

@ -438,8 +438,22 @@
<p>
Note that individual requests and responses
can be tweaked using <a href="./doc_rest_client_interceptor.html">interceptors</a>.
can be tweaked using <a href="./doc_rest_client_interceptor.html">Client Interceptors</a>.
</p>
<subsection name="Configuring an HTTP Proxy">
<p>
The following example shows how to configure the use of an HTTP
proxy in the client.
</p>
<macro name="snippet">
<param name="id" value="proxy" />
<param name="file" value="examples/src/main/java/example/ClientExamples.java" />
</macro>
</subsection>
</section>

View File

@ -71,15 +71,15 @@
</subsection>
<subsection name="Configuring an HTTP Proxy">
<subsection name="Cookies: Add an HTTP Cookie Header to Client Requests">
<p>
An HTTP proxy may be configured directly on the
restful client factory, as shown below.
The <code>CookieInterceptor</code> can be used to
add an HTTP Cookie header to each request created by the client.
</p>
<macro name="snippet">
<param name="id" value="logging" />
<param name="id" value="cookie" />
<param name="file" value="examples/src/main/java/example/ClientExamples.java" />
</macro>

View File

@ -1,17 +1,22 @@
package ca.uhn.fhir.validation;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.api.Bundle;
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
import ca.uhn.fhir.model.dstu.resource.Patient;
import ca.uhn.fhir.model.dstu.valueset.ContactSystemEnum;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import java.io.IOException;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class ResourceValidatorTest {
@ -45,9 +50,7 @@ public class ResourceValidatorTest {
String res = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("atom-document-large.xml"));
Bundle b = ourCtx.newXmlParser().parseBundle(res);
FhirValidator val = ourCtx.newValidator();
val.setValidateAgainstStandardSchema(true);
val.setValidateAgainstStandardSchematron(true);
FhirValidator val = createFhirValidator();
val.validate(b);
@ -64,7 +67,6 @@ public class ResourceValidatorTest {
}
}
@Test
public void testSchematronResourceValidator() throws IOException {
String res = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("patient-example-dicom.xml"));
@ -74,20 +76,60 @@ public class ResourceValidatorTest {
val.setValidateAgainstStandardSchema(false);
val.setValidateAgainstStandardSchematron(true);
val.validate(p);
ValidationResult validationResult = val.validateWithResult(p);
assertTrue(validationResult.isSuccessful());
p.getTelecomFirstRep().setValue("123-4567");
validationResult = val.validateWithResult(p);
assertFalse(validationResult.isSuccessful());
OperationOutcome operationOutcome = validationResult.getOperationOutcome();
ourLog.info(ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(operationOutcome));
assertEquals(1, operationOutcome.getIssue().size());
assertThat(operationOutcome.getIssueFirstRep().getDetails().getValue(), containsString("Inv-2: A system is required if a value is provided."));
p.getTelecomFirstRep().setValue("123-4567");
try {
val.validate(p);
fail();
} catch (ValidationFailureException e) {
ourLog.info(ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
assertEquals(1, e.getOperationOutcome().getIssue().size());
assertThat(e.getOperationOutcome().getIssueFirstRep().getDetails().getValue(), containsString("Inv-2: A system is required if a value is provided."));
}
p.getTelecomFirstRep().setSystem(ContactSystemEnum.EMAIL);
val.validate(p);
validationResult = val.validateWithResult(p);
assertTrue(validationResult.isSuccessful());
}
@Test
public void testSchemaBundleValidatorIsSuccessful() throws IOException {
String res = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("atom-document-large.xml"));
Bundle b = ourCtx.newXmlParser().parseBundle(res);
FhirValidator val = createFhirValidator();
ValidationResult result = val.validateWithResult(b);
assertTrue(result.isSuccessful());
OperationOutcome operationOutcome = result.getOperationOutcome();
assertNotNull(operationOutcome);
assertEquals(0, operationOutcome.getIssue().size());
}
@Test
public void testSchemaBundleValidatorFails() throws IOException {
String res = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("atom-document-large.xml"));
Bundle b = ourCtx.newXmlParser().parseBundle(res);
FhirValidator val = createFhirValidator();
ValidationResult validationResult = val.validateWithResult(b);
assertTrue(validationResult.isSuccessful());
Patient p = (Patient) b.getEntries().get(0).getResource();
p.getTelecomFirstRep().setValue("123-4567");
validationResult = val.validateWithResult(b);
assertFalse(validationResult.isSuccessful());
OperationOutcome operationOutcome = validationResult.getOperationOutcome();
ourLog.info(ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(operationOutcome));
assertEquals(1, operationOutcome.getIssue().size());
assertThat(operationOutcome.getIssueFirstRep().getDetails().getValue(), containsString("Inv-2: A system is required if a value is provided."));
}
private FhirValidator createFhirValidator() {
FhirValidator val = ourCtx.newValidator();
val.setValidateAgainstStandardSchema(true);
val.setValidateAgainstStandardSchematron(true);
return val;
}
}

View File

@ -0,0 +1,46 @@
package ca.uhn.fhir.validation;
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
import org.junit.Test;
import java.util.List;
import java.util.UUID;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class ValidationResultTest {
@Test
public void isSuccessful_IsTrueForNullOperationOutcome() {
ValidationResult result = ValidationResult.valueOf(null);
assertTrue(result.isSuccessful());
}
@Test
public void isSuccessful_IsTrueForNoIssues() {
OperationOutcome operationOutcome = new OperationOutcome();
// make sure a non-null ID doesn't cause the validation result to be a fail
operationOutcome.setId(UUID.randomUUID().toString());
ValidationResult result = ValidationResult.valueOf(operationOutcome);
assertTrue(result.isSuccessful());
}
@Test
public void isSuccessful_FalseForIssues() {
OperationOutcome operationOutcome = new OperationOutcome();
OperationOutcome.Issue issue = operationOutcome.addIssue();
String errorMessage = "There was a validation problem";
issue.setDetails(errorMessage);
ValidationResult result = ValidationResult.valueOf(operationOutcome);
assertFalse(result.isSuccessful());
List<OperationOutcome.Issue> issues = result.getOperationOutcome().getIssue();
assertEquals(1, issues.size());
assertEquals(errorMessage, issues.get(0).getDetails().getValue());
assertThat("ValidationResult#toString should contain the issue description", result.toString(), containsString(errorMessage));
}
}

18
pom.xml
View File

@ -88,6 +88,19 @@
<id>akley</id>
<name>Alexander Kley</name>
</developer>
<developer>
<id>preston</id>
<name>Preston Lee</name>
<organization>Arizona State University</organization>
</developer>
<developer>
<id>jathman</id>
<name>Joe Athman</name>
</developer>
<developer>
<id>petromykhailysyn</id>
<name>Petro Mykhailyshyn</name>
</developer>
</developers>
<licenses>
@ -176,6 +189,11 @@
<artifactId>wagon-ssh</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-module-markdown</artifactId>
<version>1.6</version>
</dependency>
</dependencies>
<configuration>
<skip>true</skip>

120
vagrant/Vagrantfile vendored Normal file
View File

@ -0,0 +1,120 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "ubuntu/trusty64"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network "public_network"
# If true, then any SSH connections made will enable agent forwarding.
# Default value: false
config.ssh.forward_agent = true
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder "data", '/data'
config.vm.synced_folder "build", '/build'
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
# # Don't boot with headless mode
# vb.gui = true
#
# # Use VBoxManage to customize the VM. For example to change memory:
vb.customize ["modifyvm", :id, "--memory", "2048"]
end
#
# View the documentation for the provider you're using for more
# information on available options.
# Enable provisioning with chef solo, specifying a cookbooks path, roles
# path, and data_bags path (all relative to this Vagrantfile), and adding
# some recipes and/or roles.
#
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "./chef/cookbooks"
chef.roles_path = "./chef/roles"
chef.data_bags_path = "./chef/data_bags"
chef.add_recipe 'nmap'
chef.add_recipe 'mysql::server'
chef.add_recipe 'mysql::client'
chef.add_recipe 'tomcat'
chef.add_recipe 'tomcat::users' # Currently broken :( https://github.com/opscode-cookbooks/tomcat/pull/79
pw = "MySQLpassword"
chef.json = {
java: {
install_flavor: 'oracle',
jdk_version: 8,
oracle: {
accept_oracle_download_terms: true
}
},
tomcat: {
base_version: 7,
proxy_port: 80,
# ssl_port: 443,
authbind: 'yes'
},
mysql: {
version: '5.6',
server_root_password: pw,
server_debian_password: pw,
server_repl_password: pw,
allow_remote_root: true
}
}
end
require 'fileutils'
build_dir = 'build'
# Remove existing cached artifacts.
Dir.glob(File.join(build_dir, '*.war')).each do |f|
FileUtils.rm(f)
end
# Cache new copies.
Dir.glob(File.join('..', '**', 'target', '*.war')).each do |f|
FileUtils.cp(f, 'build')
end
# puts "Deploying any/all built .war files.""
config.vm.provision 'shell', inline: 'cp /build/*.war /var/lib/tomcat7/webapps'
# puts "Setting MySQL to start automatically at boot, and (re)starting the daemon."
config.vm.provision 'shell', inline: 'update-rc.d mysql defaults'
config.vm.provision 'shell', inline: 'service mysql restart'
# puts "The VM network interfaces are configured as follows..."
config.vm.provision 'shell', inline: 'ifconfig'
end

0
vagrant/build/.gitkeep Normal file
View File

10
vagrant/chef/Cheffile Normal file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env ruby
#^syntax detection
site 'https://supermarket.getchef.com/api/v1'
# cookbook 'emacs24-nox'
cookbook 'nmap'
cookbook 'java'
cookbook 'mysql'
cookbook 'tomcat'

View File

@ -0,0 +1,23 @@
SITE
remote: https://supermarket.getchef.com/api/v1
specs:
chef-sugar (2.3.0)
java (1.28.0)
mysql (5.5.3)
yum-mysql-community (>= 0.0.0)
nmap (0.1.0)
openssl (2.0.0)
chef-sugar (>= 0.0.0)
tomcat (0.16.2)
java (>= 0.0.0)
openssl (>= 0.0.0)
yum (3.3.2)
yum-mysql-community (0.1.10)
yum (>= 3.0)
DEPENDENCIES
java (>= 0)
mysql (>= 0)
nmap (>= 0)
tomcat (>= 0)

View File

@ -0,0 +1,92 @@
Chef Sugar Changelog
=========================
This file is used to list changes made in each version of the chef-sugar cookbook and gem.
v2.3.0 (2014-09-24)
-------------------
### Improvements
- Add `vmware?` matcher
- Allow the attribute DSL to access parent attributes
### Bug Fixes
- Return `true` or `false` from all Boolean methods (instead of `nil` or truthy values)
v2.2.0 (2014-08-20)
-------------------
### Improvements
- Add `smartos?` matcher
- Add `omnios?` matcher
v2.1.0 (2014-06-26)
-------------------
### Improvements
- Add `solaris2?` matcher
- Add `aix?` matcher
- Add 'lxc?' matcher
### Bug Fixes
- Fix a bug in namespace memoization during attribute initialization
v2.0.0 (2014-06-16)
-------------------
### Breaking
- Remove `not_linux?` method
- Remove `not_windows?` method
### Improvements
- Miscellaneous spelling fixes
- Update a failing unit test for `installed?`
- Add Mac OS X to the list of platforms (Yosemite)
- Upgrade to RSpec 3
- Fix `which` (and `installed?` and `installed_at_version?`) when given an absolute path
- Fix `linux?` check to only return true on real linuxes
v1.3.0 (2014-05-05)
-------------------
- Check both `$stdout` and `$stderr` in `version_for`
- Add additional platform versions
- Make `includes_recipe?` a top-level API (instead of just Node)
- Match on the highest version number instead of direct equality checking on platform versions
- Define `Object#blank?` as a core extension
- Define `String#flush` as a core extension
- Remove Stove
v1.2.6 (2014-03-16)
-------------------
- Fix a bug in `vagrant?` returning false on newer Vagrant versions
- Remove Coveralls
v1.2.4 (2014-03-13)
-------------------
- See (1.2.2), but I botched the release
v1.2.2 (2014-03-13)
-------------------
- Fix a critical bug with `encrypted_data_bag_item` using the wrong key
v1.2.0 (2014-03-09)
-------------------
- Add `namespace` functionality for specifying attributes in a DSL
- Add constraints helpers for comparing version strings
- Add `require_chef_gem` to safely require and degrade if a gem is not installed
- Add `deep_fetch` and `deep_fetch!` to fetch deeply nested keys
- Accept an optional secret key in `encrypted_data_bag_item` helper and raise a helpful error if one is not set (NOTE: this changes the airity of the method, but it's backward-compatible because Ruby is magic)
- Add Stove for releasing
- Updated copyrights for 2014
v1.1.0 (2013-12-10)
-------------------
- Add `cloudstack?` helper
- Add data bag helpers
- Remove foodcritic checks
- Upgrade development gem versions
- Randomize spec order
v1.0.1 (2013-10-15)
-------------------
- Add development recipe
- Add `compile_time`, `before`, and `after` filters
v1.0.0 (2013-10-15)
-------------------
- First public release

View File

@ -0,0 +1,441 @@
Chef::Sugar
================
[![Gem Version](http://img.shields.io/gem/v/chef-sugar.svg)][gem]
[![Build Status](http://img.shields.io/travis/sethvargo/chef-sugar.svg)][travis]
[![Dependency Status](http://img.shields.io/gemnasium/sethvargo/chef-sugar.svg)][gemnasium]
[![Code Climate](http://img.shields.io/codeclimate/github/sethvargo/chef-sugar.svg)][codeclimate]
[![Gittip](http://img.shields.io/gittip/sethvargo.svg)][gittip]
[gem]: https://rubygems.org/gems/chef-sugar
[travis]: http://travis-ci.org/sethvargo/chef-suguar
[gemnasium]: https://gemnasium.com/sethvargo/chef-sugar
[codeclimate]: https://codeclimate.com/github/sethvargo/chef-sugar
[gittip]: https://www.gittip.com/sethvargo
Chef Sugar is a Gem & Chef Recipe that includes series of helpful sugar of the Chef core and other resources to make a cleaner, more lean recipe DSL, enforce DRY principles, and make writing Chef recipes an awesome experience!
Installation
------------
If you want to develop/hack on chef-sugar, please see the Contributing.md.
If you are using Berkshelf, add `chef-sugar` to your `Berksfile`:
```ruby
cookbook 'chef-sugar'
```
Otherwise, you can use `knife` or download the tarball directly from the community site:
```ruby
knife cookbook site install chef-sugar
```
Usage
-----
In order to use Chef Sugar in your Chef Recipes, you'll first need to include it:
```ruby
include_recipe 'chef-sugar::default'
```
Alternatively you can put it in a base role or recipe and it will be included subsequently.
Requiring the Chef Sugar Gem will automatically extend the Recipe DSL, `Chef::Resource`, and `Chef::Provider` with helpful convenience methods.
### Module Method
If you are working outside of the Recipe DSL, you can use the module methods instead of the Recipe DSL. In general, the module methods have the same name as their Recipe-DSL counterparts, but require the node object as a parameter. For example:
In a Recipe:
```ruby
# cookbook/recipes/default.rb
do_something if windows?
```
In a Library as a singleton:
```ruby
# cookbook/libraries/default.rb
def only_on_windows(&block)
yield if Chef::Sugar::PlatformFamily.windows?(@node)
end
```
In a Library as a Mixin:
```ruby
# cookbook/libraries/default.rb
include Chef::Sugar::PlatformFamily
def only_on_windows(&block)
yield if windows?(@node)
end
```
API
---
**Note:** For the most extensive API documentation, please see the YARD documentation.
### Architecture
**Note:** Some of the architecture commands begin with an underscore (`_`) because Ruby does not permit methods to start with a numeric.
- `_64_bit?`
- `_32_bit?`
#### Examples
```ruby
execute 'build[my binary]' do
command '...'
not_if { _64_bit? }
end
```
### Cloud
- `azure?`
- `cloud?`
- `ec2?`
- `eucalyptus?`
- `gce?`
- `linode?`
- `openstack?`
- `cloudstack?`
- `rackspace?`
#### Examples
```ruby
template '/tmp/config' do
variables(
# See also: best_ip_for
ipaddress: cloud? ? node['local_ipv4'] : node['public_ipv4']
)
end
```
### Core Extensions
**Note:** Core extensions are **not** included by default. You must require the `chef/sugar/core_extensions` module manually to gain access to these APIs:
```ruby
require 'chef/sugar/core_extensions'
```
- `String#satisfies?`
- `String#satisfied_by?`
- `Array#satisfied_by?`
- `Object#blank?`
#### Examples
```ruby
# Checking version constraints
'1.0.0'.satisfies?('~> 1.0') #=> true
'~> 1.0'.satisfied_by?('1.0') #=> true
```
```ruby
# Check for an object's presence
''.blank? #=> true
['hello'].blank? #=> false
```
### Data Bag
- `encrypted_data_bag_item` - a handy DSL method for loading encrypted data bag items the same way you load a regular data bag item; this requires `Chef::Config[:encrypted_data_bag_secret]` is set!
- `encrypted_data_bag_item_for_environment` - find the data bag entry for the current node's Chef environment.
#### Examples
```ruby
encrypted_data_bag_item('accounts', 'hipchat')
```
```ruby
encrypted_data_bag_item_for_environment('accounts', 'github')
```
### Attributes
Chef Sugar adds more Chef-like DSL to attribute definitions. Instead of using the Ruby hash syntax, you can define attributes using nested namespaces. This DSL may be more friendly to non-Ruby developers. It can safely be mixed-and-matched with the standard syntax.
```ruby
# This is functionally the same as default['apache2']['config']['root'] = '/var/www'
namespace 'apache2' do
namespace 'config' do
root '/var/www'
end
end
```
```ruby
# Specify multiple keys instead of nesting namespaces
namespace 'apache2', 'config' do
root '/var/www'
end
```
```ruby
# Specify different nested precedence levels
namespace 'apache2', precedence: normal do
namespace 'config', precedence: override do
root '/var/www' #=> override['apache2']['config']['root'] = '/var/www'
end
end
```
### Constraints
- `constraints` - create a new constraint (or requirement) that can be used to test version validations.
- `chef_version` - (DSL only) a wrapper for `version(Chef::VERSION)`
- `version` - create a new version that can be used to test constraint validation.
#### Examples
```ruby
# Check if a version is satisfied by a constraint
version('1.2.3').satisfies?('~> 1.2.0')
```
```ruby
# Check if a constraint is satisfied by a version
constraint('~> 1.2.0').satisfied_by?('1.2.3')
```
```ruby
# Support multiple constraints
version('1.2.3').satisfies?('> 1.2', '< 2.0')
constraint('> 1.2', '< 2.0').satisfied_by?('1.2.3')
```
```ruby
# Only perform an operation if Chef is at a certain version
package 'apache2' do
not_if { chef_version.satisfies?('~> 11.0') } # Ignore Chef 11
end
```
### Kernel
- `require_chef_gem` - "safely" require a gem. Loading a gem with Chef is sometimes difficult and confusing. The errors that Chef produces are also sometimes not very intuitive. In the event you require a gem to exist on the system, you can use `require_chef_gem`, which will attempt to require the gem and then produce helpful output if the gem is not installed:
Chef could not load the gem `#{name}'! You may need to install the gem
manually with `gem install #{name}', or include a recipe before you can
use this resource. Please consult the documentation for this cookbook
for proper usage.
#### Examples
```ruby
# LWRP
require_chef_gem 'pry'
```
```ruby
class Chef
class Provider
class MyProvider > Provider
require_chef_gem 'pry'
end
end
end
```
### IP
- `best_ip_for` - determine the best IP address for the given "other" node, preferring local IP addresses over public ones.
#### Examples
```ruby
redis = search('node', 'role:redis').first
template '/tmp/config' do
variables(
ipaddress: best_ip_for(redis)
)
end
```
### Node
- `deep_fetch` - safely fetch a nested attribute.
- `deep_fetch!` - fetch a nested attribute, raising a more semantic error if the key does not exist.
- `in?` - determine if the node is in the given Chef environment.
#### Examples
```ruby
credentials = if in?('production')
Chef::EncryptedDataBag.new('...')
else
data_bag('...')
end
```
```ruby
node.deep_fetch('apache2', 'config', 'root') => node['apache2']['config']['root']
```
### Platform
- `amazon_linux?`
- `centos?`
- `linux_mint?`
- `oracle_linux?`
- `redhat_enterprise_linux?`
- `scientific_linux?`
- `ubuntu?`
- `solaris2?`
- `aix?`
- `smartos?`
- `omnios?`
There are also a series of dynamically defined matchers that map named operating system release versions and comparison operators in the form "#{platform}\_#{operator}\_#{name}?". For example:
- `debian_after_squeeze?`
- `linuxmint_after_or_at_olivia?`
- `mac_os_x_lion?`
- `ubuntu_before_lucid?`
- `ubuntu_before_or_at_maverick?`
To get a full list, run the following in IRB:
```ruby
require 'chef/sugar'
puts Chef::Sugar::Platform.instance_methods
```
#### Examples
```ruby
if ubuntu?
execute 'apt-get update'
end
```
### Platform Family
- `arch_linux?`
- `debian?`
- `fedora?`
- `freebsd?`
- `gentoo?`
- `linux?`
- `mac_os_x?`
- `openbsd?`
- `rhel?`
- `slackware?`
- `suse?`
- `windows?`
#### Examples
```ruby
node['attribute'] = if windows?
'C:\Foo\BarDrive'
else
'/foo/bar_drive'
end
```
### Ruby
**Note:** The applies to the Ruby found at `node['languages']['ruby']`.
- `ruby_20?`
- `ruby_19?`
#### Examples
```ruby
log 'This has been known to fail on Ruby 2.0' if ruby_20?
```
### Run Context
- `includes_recipe?` - determines if the current run context includes the recipe
```ruby
if includes_recipe?('apache2::default')
apache_module 'my_module' do
# ...
end
end
```
### Shell
- `which`
- `dev_null`
- `installed?`
- `installed_at_version?`
- `version_for`
#### Examples
```ruby
log "Using `mongo` at `#{which('mongo')}`"
if installed?('apt')
execute 'apt-get update'
end
execute 'install[thing]' do
command "... 2>&1 #{dev_null}"
not_if { installed_at_version?('thing', node['thing']['version']) }
end
log "Skipping git install, version is at #{version_for('mongo', '-v')}"
```
### Vagrant
- `vagrant?`
#### Examples
```ruby
http_request 'http://...' do
not_if { vagrant? }
end
```
### Virtualization
- `lxc?`
- `vmware?`
#### Examples
```ruby
service 'ntpd' do
action [:enable, :start]
not_if { lxc? }
end
```
### Filters
- `compile_time` - accepts a block of resources to run at compile time
- `before` - insert resource in the collection before the given resource
- `after` - insert resource in the collection after the given resource
#### Examples
```ruby
compile_time do
package 'apache2'
end
# This is equivalent to
package 'apache2' do
action :nothing
end.run_action(:install)
```
```ruby
before 'service[apache2]' do
log 'I am before the apache 2 service fires!'
end
```
```ruby
after 'service[apache2]' do
log 'I am after the apache 2 service fires!'
end
```
License & Authors
-----------------
- Author: Seth Vargo (sethvargo@gmail.com)
```text
Copyright 2013-2014 Seth Vargo
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```

View File

@ -0,0 +1,29 @@
{
"name": "chef-sugar",
"version": "2.3.0",
"description": "Installs chef-sugar. Please see the chef-sugar Ruby gem for more information.",
"long_description": "Chef Sugar is a Gem & Chef Recipe that includes series of helpful syntactic\nsugars on top of the Chef core and other resources to make a cleaner, more lean\nrecipe DSL, enforce DRY principles, and make writing Chef recipes an awesome and\nfun experience!\n\nFor the most up-to-date information and documentation, please visit the [Chef\nSugar project page on GitHub](https://github.com/sethvargo/chef-sugar).\n",
"maintainer": "Seth Vargo",
"maintainer_email": "sethvargo@gmail.com",
"license": "Apache 2.0",
"platforms": {
},
"dependencies": {
},
"recommendations": {
},
"suggestions": {
},
"conflicting": {
},
"providing": {
},
"replacing": {
},
"attributes": {
},
"groupings": {
},
"recipes": {
}
}

View File

@ -0,0 +1,17 @@
name 'chef-sugar'
maintainer 'Seth Vargo'
maintainer_email 'sethvargo@gmail.com'
license 'Apache 2.0'
description 'Installs chef-sugar. Please see the chef-sugar ' \
'Ruby gem for more information.'
long_description <<-EOH
Chef Sugar is a Gem & Chef Recipe that includes series of helpful syntactic
sugars on top of the Chef core and other resources to make a cleaner, more lean
recipe DSL, enforce DRY principles, and make writing Chef recipes an awesome and
fun experience!
For the most up-to-date information and documentation, please visit the [Chef
Sugar project page on GitHub](https://github.com/sethvargo/chef-sugar).
EOH
version '2.3.0'

View File

@ -0,0 +1,25 @@
#
# Cookbook Name:: chef-sugar
# Recipe:: default
#
# Copyright 2013-2014, Seth Vargo <sethvargo@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
chef_gem('chef-sugar') do
version '2.3.0'
action :nothing
end.run_action(:install)
require 'chef/sugar'

21
vagrant/chef/cookbooks/java/.gitignore vendored Normal file
View File

@ -0,0 +1,21 @@
*~
*#
.#*
\#*#
.*.sw[a-z]
*.un~
*.tmp
*.bk
*.bkup
.kitchen.local.yml
Berksfile.lock
Gemfile.lock
.bundle/
.cache/
.kitchen/
.vagrant/
.vagrant.d/
bin/
tmp/
vendor/

View File

@ -0,0 +1,108 @@
---
driver:
name: vagrant
require_chef_omnibus: true
customize:
memory: 1024
provisioner:
name: chef_solo
attributes:
java:
ark_retries: 2
ark_retry_delay: 10
platforms:
- name: ubuntu-14.04
run_list:
- recipe[apt]
driver:
box: opscode-ubuntu-14.04
- name: ubuntu-13.10
driver:
box: opscode-ubuntu-13.10
run_list:
- recipe[apt]
- name: ubuntu-12.04
driver:
box: opscode-ubuntu-12.04
run_list:
- recipe[apt]
- name: ubuntu-10.04
driver:
box: opscode-ubuntu-10.04
run_list:
- recipe[apt]
- name: debian-6.0.8
driver:
box: opscode-debian-6.0.8
run_list:
- recipe[apt]
- name: debian-7.4
driver:
box: opscode-debian-7.4
run_list:
- recipe[apt]
- name: centos-6.5
driver:
box: opscode-centos-6.5
- name: centos-5.10
driver:
box: opscode-centos-5.10
- name: fedora-19
driver:
box: opscode-fedora-19
suites:
- name: openjdk
excludes:
- fedora-19
run_list:
- recipe[java::default]
- name: openjdk-7
excludes:
- ubuntu-10.04
- debian-6.0.8
run_list:
- recipe[java::default]
attributes:
java:
jdk_version: "7"
- name: oracle
run_list:
- recipe[java::default]
attributes:
java:
oracle:
accept_oracle_download_terms: true
install_flavor: oracle
- name: oracle-7
run_list:
- recipe[java::default]
attributes:
java:
jdk_version: "7"
oracle:
accept_oracle_download_terms: true
install_flavor: oracle
- name: oracle-8
run_list:
- recipe[java::default]
attributes:
java:
jdk_version: "8"
oracle:
accept_oracle_download_terms: true
install_flavor: oracle
- name: oracle-direct
run_list:
- recipe[java::oracle]
attributes:
java:
oracle:
accept_oracle_download_terms: true
- name: openjdk-direct
run_list:
- recipe[java::openjdk]
excludes:
- fedora-19

View File

@ -0,0 +1,7 @@
source "https://supermarket.getchef.com"
metadata
group :integration do
cookbook 'apt', '~> 2.0'
cookbook 'windows', '~> 1.12'
end

View File

@ -0,0 +1,362 @@
Java Cookbook CHANGELOG
=======================
This file is used to list changes made in each version of the Java cookbook.
v1.28.0 - 9/6/2014
-------
### Improvement
- Allow setting of group to extracted java files.
### Bug
- Add -no-same-owner parameter to tar extract to avoid issues when the chef cache dir is on an NFS mounted drive.
- In the ark provider, it doesn't compare the MD5 sum with the right value which causes Java cookbook always download tarball from oracle server
v1.27.0 - 8/22/2014
-------
- Update Oracle JDK8 to version 8u20
v1.26.0 - 8/16/2014
-------
- **[#201](https://github.com/agileorbit-cookbooks/java/pull/201)** - Allow pinning of package versions for openjdk
- **[#198](https://github.com/agileorbit-cookbooks/java/pull/198)** - Update Oracle JDK7 to version 7u67
- **[#189](https://github.com/agileorbit-cookbooks/java/pull/184)** - Support specific version and name for Oracle RPM
v1.25.0 - 8/1/2014
-------
### Improvement
- **[#189](https://github.com/agileorbit-cookbooks/java/pull/189)** - Resource ark -> attribute bin_cmds default value
- **[#168](https://github.com/agileorbit-cookbooks/java/pull/168)** - Add option to put JAVA_HOME in /etc/environment
- **[#172](https://github.com/agileorbit-cookbooks/java/pull/172)** - Allow ark to pull from http and files ending in .gz.
### Documentation
- Recommendations for inclusion in community cookbooks
- Production Deployment with Oracle Java
- Update testing instructions for chefdk
- Various Readme formatting.
### Misc
- Use Supermarket endpoint in berksfile
- rspec cleanup
- Adding ubuntu-14.04 to test suite
v1.24.0 - 7/25/2014
-------
New Cookbook maintainer! **[Agile Orbit](http://agileorbit.com)**
### Improvement
- **[#192](https://github.com/agileorbit-cookbooks/java/pull/192)** - Bump JDK7 URLs to 7u65
- **[#191](https://github.com/agileorbit-cookbooks/java/pull/192)** - Upgrade Oracle's Java 8 to u11
- **[#188](https://github.com/agileorbit-cookbooks/java/pull/188)** - Allow for alternatives priority to be set from attribute.
- **[#176](https://github.com/agileorbit-cookbooks/java/pull/176)** - Change ownership of extracted files
- **[#169](https://github.com/agileorbit-cookbooks/java/pull/169)** - Add retries and retry_delay parameters to java_ark LWRP
- **[#167](https://github.com/agileorbit-cookbooks/java/pull/167)** - default: don't fail when using java 8 on windows
- **[#165](https://github.com/agileorbit-cookbooks/java/pull/165)** - Support for Server JRE
- **[#158](https://github.com/agileorbit-cookbooks/java/pull/158)** - Updated README for accepting oracle terms
- **[#157](https://github.com/agileorbit-cookbooks/java/pull/157)** -Remove VirtualBox specific box_urls
- List AgileOrbit as the maintainer (AgileOrbit took over from Socrata in July 2014)
v1.23.0 - 7/25/2014
-------
- Tagged but never published to community cookbooks. All changes rolled into 1.24.0
v1.22.0
-------
### Improvement
- **[#148](https://github.com/socrata-cookbooks/java/pull/148)** - Add support for Oracle JDK 1.8.0
- **[#150](https://github.com/socrata-cookbooks/java/pull/150)** - Make use of Chef's cache directory instead of /tmp
- **[#151](https://github.com/socrata-cookbooks/java/pull/151)** - Update Test Kitchen suites
- **[#154](https://github.com/socrata-cookbooks/java/pull/154)** - Add safety check for JDK 8 on non-Oracle
v1.21.2
-------
### Bug
- **[#146](https://github.com/socrata-cookbooks/java/pull/146)** - Update Oracle accept-license-terms cookie format
v1.21.0
-------
### Improvement
- **[#143](https://github.com/socrata-cookbooks/java/pull/143)** - Symlink /usr/lib/jvm/default-java for both OpenJDK and Oracle
- **[#144](https://github.com/socrata-cookbooks/java/pull/144)** - Remove /var/lib/alternatives/#{cmd} before calling alternatives (Hopefully fixes sporadic issues when setting alternatives)
- **[Make default_java_symlink conditional on set_default attribute](https://github.com/socrata-cookbooks/java/commit/e300e235a463382a5022e1dddaac674930b4d138)**
v1.20.0
-------
### Improvement
- **[#137](https://github.com/socrata-cookbooks/java/pull/137)** - Create /usr/lib/jvm/default-java on Debian
- **[#138](https://github.com/socrata-cookbooks/java/pull/138)** - allow wrapping cookbook without providing templates
- **[#140](https://github.com/socrata-cookbooks/java/pull/140)** - Adds set_default attribute to toggle setting JDK as default
### Bug
- **[#141](https://github.com/socrata-cookbooks/java/pull/141)** - set java_home correctly for oracle_rpm
v1.19.2
-------
### Improvement
- **[#129](https://github.com/socrata-cookbooks/java/pull/129)** - Upgrade to ChefSpec 3
- Rewrite unit tests for better coverage and to work with ChefSpec 3 (various commits)
- List Socrata as the maintainer (Socrata took over from Opscode in December 2013)
### Bug
- **[#133](https://github.com/socrata-cookbooks/java/pull/133)** - Allow jdk_version to be a string or number
- **[#131](https://github.com/socrata-cookbooks/java/pull/131)** - Fix JDK install on Windows
- **[Fix openjdk_packages on Arch Linux](https://github.com/socrata-cookbooks/java/commit/677bee7b9bf08988596d40ac65e75984a86bda99)**
v1.19.0
-------
Refactor the cookbook to better support wrapper cookbooks and other cookbook authoring patterns.
### Improvement
- **[#123](https://github.com/socrata-cookbooks/java/pull/123)** - Update documentation & add warning for issue 122
- **[#124](https://github.com/socrata-cookbooks/java/pull/124)** - Refactor default recipe to better enable wrapper cookbooks
- **[#125](https://github.com/socrata-cookbooks/java/pull/125)** - Removes the attribute to purge deprecated packages
- **[#127](https://github.com/socrata-cookbooks/java/pull/127)** - Add safety check if attributes are unset
- **[Adds tests for directly using openjdk and oracle recipes](https://github.com/socrata-cookbooks/java/commit/794df596959d65a1a6d5f6c52688bffd8de6bff4)**
- **[Adds recipes to README](https://github.com/socrata-cookbooks/java/commit/76d52114bb9df084174d43fed143123b1cdbae16)**
- **[The Opscode CCLA is no longer required](https://github.com/socrata-cookbooks/java/commit/ce4ac25caa8383f185c25c4e32cafef8c0453376)**
- **[Adds tests for openjdk-7 and oracle-7](https://github.com/socrata-cookbooks/java/commit/9c38af241f68b3198cde4ad6fe2b4cb752062009)**
### Bug
- **[#119](https://github.com/socrata-cookbooks/java/pull/119)** - Use java_home instead of java_location for update-alternatives
- **[Fix java_home for rhel and fedora](https://github.com/socrata-cookbooks/java/commit/71dadbd1bfe2eab50ff21cdab4ded97877911cc4)**
v1.18.0
-------
### Improvement
- **[#118](https://github.com/socrata-cookbooks/java/pull/118)** - Upgrade to 7u51
- **[#117](https://github.com/socrata-cookbooks/java/pull/117)** - Suggest windows and aws
v1.17.6
-------
### Bug
- Revert **[COOK-4165](https://tickets.opscode.com/browse/COOK-4165)** - The headers option was only added to remote_file in Chef 11.6.0, meaning this change breaks older clients.
v1.17.4
-------
### Bug
- **[#111](https://github.com/socrata-cookbooks/java/pull/111)** - Fix alternatives for centos
### Improvement
- **[COOK-4165](https://tickets.opscode.com/browse/COOK-4165)** - Replace curl with remote_file with cookie header
- **[#110](https://github.com/socrata-cookbooks/java/pull/110)** - Update openjdk to use the alternatives resource
v1.17.2
-------
### Bug
- **[COOK-4136](https://tickets.opscode.com/browse/COOK-4136)** - Add md5 parameter to java_ark resource
v1.17.0
-------
- **[COOK-4114](https://tickets.opscode.com/browse/COOK-4114)** - Test Kitchen no longer works after merging Pull Request #95 for openjdk tests on Debian/Ubuntu
- **[COOK-4124](https://tickets.opscode.com/browse/COOK-4124)** - update-alternatives fails to run
- **[#81](https://github.com/socrata/java/pull/81)** - Ensure local directory hierarchy
- **[#97](https://github.com/socrata/java/pull/97)** - Expose LWRP state attributes
- **[#99](https://github.com/socrata/java/pull/99)** - support for MD5 checksum
- **[#106](https://github.com/socrata/java/pull/106)** - Fixed windows case to prevent bad java_home variable setting
- **[Update checksums to the officially-published ones from Oracle](https://github.com/socrata/java/commit/b9e1df24caeb6e22346d2d415b3b4384f15d4ffd)**
- **[Further test kitchen fixes to use the default recipe](https://github.com/socrata/java/commit/01c0b432705d9cfa6d2dfeaa380983e3f604069f)**
v1.16.4
-------
### Bug
- **[#103](https://github.com/socrata/java/pull/103)** - set alternatives when using ibm_tar recipe
- **[#104](https://github.com/socrata/java/pull/104)** - Specify windows attributes in attribute files
v1.16.2
-------
### Improvement
- **[COOK-3488](https://tickets.opscode.com/browse/COOK-3488)** - set alternatives for ibm jdk
- **[COOK-3764](https://tickets.opscode.com/browse/COOK-3764)** - IBM Java installer needs 'rpm' package on Ubuntu
### Bug
- **[COOK-3857](https://tickets.opscode.com/browse/COOK-3857)** - do not unescape the java windows url before parsing it
- **[#95](https://github.com/socrata/java/pull/95)** - fixes update-alternatives for openjdk installs
- **[#100](https://github.com/socrata/java/pull/100)** - Use escaped quotes for Windows INSTALLDIR
v1.16.0
-------
### Improvement
- **[COOK-3823](https://tickets.opscode.com/browse/COOK-3823)** - Upgrade to JDK 7u45-b18
v1.15.4
-------
[COOK-4210] - remove unneeded run_command to prevent zombie processes
v1.15.2
-------
[CHEF-4210] remove unneeded run_command to prevent zombie processes
v1.15.0
-------
### Bug
- Fixing version number. Accidently released at 0.15.x instead of 1.15.x
v0.15.2
-------
### FIX
- [COOK-3908] - Fixing JAVA_HOME on Ubuntu 10.04
v1.14.0
-------
### Bug
- **[COOK-3704](https://tickets.opscode.com/browse/COOK-3704)** - Fix alternatives when the package is already installed
- **[COOK-3668](https://tickets.opscode.com/browse/COOK-3668)** - Fix a condition that would result in an error executing action `run` on resource 'bash[update-java-alternatives]'
- **[COOK-3569](https://tickets.opscode.com/browse/COOK-3569)** - Fix bad checksum length
- **[COOK-3541](https://tickets.opscode.com/browse/COOK-3541)** - Fix an issue where Java cookbook installs both JDK 6 and JDK 7 when JDK 7 is specified
- **[COOK-3518](https://tickets.opscode.com/browse/COOK-3518)** - Allow Windoes recipe to download from signed S3 url
- **[COOK-2996](https://tickets.opscode.com/browse/COOK-2996)** - Fix a failure on Centos 6.4 and Oracle JDK 7
### Improvement
- **[COOK-2793](https://tickets.opscode.com/browse/COOK-2793)** - Improve Windows support
v1.13.0
-------
### Bug
- **[COOK-3295](https://tickets.opscode.com/browse/COOK-3295)** - Add default `platform_family` option in Java helper
- **[COOK-3277](https://tickets.opscode.com/browse/COOK-3277)** - Fix support for Fedora
### Improvement
- **[COOK-3278](https://tickets.opscode.com/browse/COOK-3278)** - Upgrade to Oracle Java 7u25
- **[COOK-3029](https://tickets.opscode.com/browse/COOK-3029)** - Add Oracle RPM support
- **[COOK-2931](https://tickets.opscode.com/browse/COOK-2931)** - Add support for the platform `xenserver`
- **[COOK-2154](https://tickets.opscode.com/browse/COOK-2154)** - Add SmartOS support
v1.12.0
-------
### Improvement
- [COOK-2154]: Add SmartOS support to java::openjdk recipe
- [COOK-3278]: upgrade to Oracle Java 7u25
### Bug
- [COOK-2931]: Adding support for the platform 'xenserver' (for installations of java in DOM0)
- [COOK-3277]: java cookbook fails on Fedora
v1.11.6
-------
### Bug
- [COOK-2847]: Java cookbook does not have opensuse support
- [COOK-3142]: Syntax Errors spec/default_spec.rb:4-8
v1.11.4
-------
### Bug
- [COOK-2989]: `bash[update-java-alternatives]` resource uses wrong attribute
v1.11.2
-------
### Bug
- Use SHA256 checksums for Oracle downloads, not SHA1.
v1.11.0
-------
This version brings a wealth of tests and (backwards-compatible) refactoring, plus some new features (updated Java, IBM recipe).
### Sub-task
- [COOK-2897]: Add ibm recipe to java cookbook
- [COOK-2903]: move java_home resources to their own recipe
- [COOK-2904]: refactor ruby_block "update-java-alternatives"
- [COOK-2905]: use platform_family in java cookbook
- [COOK-2920]: add chefspec to java cookbook
### Task
- [COOK-2902]: Refactor java cookbook
### Improvement
- [COOK-2900]: update JDK to JDK 7u21, 6u45
v1.10.2
-------
- [COOK-2415] - Fixed deprecation warnings in ark provider and openjdk recipe by using Chef::Mixin::ShellOut instead of Chef::ShellOut
v1.10.0
-------
- [COOK-2400] - Allow java ark :url to be https
- [COOK-2436] - Upgrade needed for oracle jdk in java cookbook
v1.9.6
------
- [COOK-2412] - add support for Oracle Linux
v1.9.4
------
- [COOK-2083] - Run set-env-java-home in Java cookbook only if necessary
- [COOK-2332] - ark provider does not allow for *.tgz tarballs to be used
- [COOK-2345] - Java cookbook fails on CentOS6 (update-java-alternatives)
v1.9.2
------
- [COOK-2306] - FoodCritic fixes for java cookbook
v1.9.0
------
- [COOK-2236] - Update the Oracle Java version in the Java cookbook to release 1.7u11
v1.8.2
------
- [COOK-2205] - Fix for missing /usr/lib/jvm/default-java on Debian
v1.8.0
------
- [COOK-2095] - Add windows support
v1.7.0
------
- [COOK-2001] - improvements for Oracle update-alternatives
- When installing an Oracle JDK it is now registered with a higher
priority than OpenJDK. (Related to COOK-1131.)
- When running both the oracle and oracle_i386 recipes, alternatives
are now created for both JDKs.
- Alternatives are now created for all binaries listed in version
specific attributes. (Related to COOK-1563 and COOK-1635.)
- When installing Oracke JDKs on Ubuntu, create .jinfo files for use
with update-java-alternatives. Commands to set/install
alternatives now only run if needed.
v1.6.4
------
- [COOK-1930] - fixed typo in attribute for java 5 on i586
v1.6.2
------
- whyrun support in `java_ark` LWRP
- CHEF-1804 compatibility
- [COOK-1786]- install Java 6u37 and Java 7u9
- [COOK-1819] -incorrect warning text about `node['java']['oracle']['accept_oracle_download_terms']`
v1.6.0
------
- [COOK-1218] - Install Oracle JDK from Oracle download directly
- [COOK-1631] - set JAVA_HOME in openjdk recipe
- [COOK-1655] - Install correct architecture on Amazon Linux
v1.5.4
------
- [COOK-885] - update alternatives called on wrong file
- [COOK-1607] - use shellout instead of execute resource to update alternatives
v1.5.2
------
- [COOK-1200] - remove sun-java6-jre on Ubuntu before installing Oracle's Java
- [COOK-1260] - fails on Ubuntu 12.04 64bit with openjdk7
- [COOK-1265] - Oracle Java should symlink the jar command
v1.5.0
------
- [COOK-1146] - Oracle now prevents download of JDK via non-browser
- [COOK-1114] - fix File.exists?
v1.4.2
------
- [COOK-1051] - fix attributes typo and platform case switch consistency
v1.4.0
------
- [COOK-858] - numerous updates: handle jdk6 and 7, switch from sun to oracle, make openjdk default, add `java_ark` LWRP.
- [COOK-942] - FreeBSD support
- [COOK-520] - ArchLinux support

View File

@ -0,0 +1,12 @@
Contributing
============
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. [**Add tests!**](https://github.com/agileorbit-cookbooks/java/blob/master/TESTING.md)
5. Push to the branch (`git push origin my-new-feature`)
6. Create new Pull Request
As this cookbook is no longer maintained by Chef, you **do not** need to sign any sort of contributor agreement. Simply make your change and open a pull request.
Contributions will only be accepted if they are fully tested as specified in [TESTING.md](https://github.com/agileorbit-cookbooks/java/blob/master/TESTING.md)

View File

@ -0,0 +1,11 @@
source 'https://rubygems.org'
gem 'berkshelf', '~> 2.0'
gem 'chefspec', '~> 3.1'
gem 'foodcritic', '~> 3.0'
gem 'rubocop', '~> 0.12'
group :integration do
gem 'test-kitchen', '~> 1.2.1'
gem 'kitchen-vagrant', '~> 0.14.0'
end

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -0,0 +1,393 @@
java
=====
This cookbook installs a Java JDK/JRE. It defaults to installing
OpenJDK, but it can also install Oracle and IBM JDKs.
Usage
-----
Simply include the `java` recipe wherever you would like Java installed, such as a run list (`recipe[java]`) or a cookbook (`include_recipe 'java'`). By default, OpenJDK 6 is installed. The `install_flavor` attribute is used to determine which JDK to install (OpenJDK, Oracle, IBM, or Windows), and `jdk_version` specifies which version to install (currently 6 and 7 are supported for all JDK types, 8 for Oracle only).
### Examples
To install Oracle Java 7 (note that when installing Oracle JDK, `accept_oracle_download_terms` must be set -- see below for details):
```ruby
name "java"
description "Install Oracle Java"
default_attributes(
"java" => {
"install_flavor" => "oracle",
"jdk_version" => "7",
"oracle" => {
"accept_oracle_download_terms" => true
}
}
)
run_list(
"recipe[java]"
)
```
To install IBM flavored Java:
```ruby
name "java"
description "Install IBM Java on Ubuntu"
default_attributes(
"java" => {
"install_flavor" => "ibm",
"ibm" => {
"accept_ibm_download_terms" => true,
"url" => "http://fileserver.example.com/ibm-java-x86_64-sdk-7.0-4.1.bin",
"checksum" => "The SHA256 checksum of the bin"
}
}
)
run_list(
"recipe[java]"
)
```
Requirements
-----
Chef 0.10.10+ and Ohai 6.10+ for `platform_family` use.
### Platform
* Debian, Ubuntu
* CentOS, Red Hat, Fedora, Scientific, Amazon, XenServer
* ArchLinux
* FreeBSD
* SmartOS
* Windows
Attributes
-----
See `attributes/default.rb` for default values.
* `node['java']['install_flavor']` - Flavor of JVM you would like
installed (`oracle`, `oracle_rpm`, `openjdk`, `ibm`, `windows`), default `openjdk`
on Linux/Unix platforms, `windows` on Windows platforms.
* `node['java']['jdk_version']` - JDK version to install, defaults to
`'6'`.
* `node['java']['java_home']` - Default location of the
"`$JAVA_HOME`".
* `node['java']['set_etc_environment']` - Optionally sets
JAVA_HOME in `/etc/environment` for Default `false`.
* `node['java']['openjdk_packages']` - Array of OpenJDK package names
to install in the `java::openjdk` recipe. This is set based on the
platform.
* `node['java']['tarball']` - Name of the tarball to retrieve from
your internal repository, default `jdk1.6.0_29_i386.tar.gz`
* `node['java']['tarball_checksum']` - Checksum for the tarball, if
you use a different tarball, you also need to create a new sha256
checksum
* `node['java']['jdk']` - Version and architecture specific attributes
for setting the URL on Oracle's site for the JDK, and the checksum of
the .tar.gz.
* `node['java']['oracle']['accept_oracle_download_terms']` - Indicates
that you accept Oracle's EULA
* `node['java']['windows']['url']` - The internal location of your
java install for windows
* `node['java']['windows']['package_name']` - The package name used by
windows_package to check in the registry to determine if the install
has already been run
* `node['java']['windows']['checksum']` - The checksum for the package to
download on Windows machines (default is nil, which does not perform
checksum validation)
* `node['java']['ibm']['url']` - The URL which to download the IBM
JDK/SDK. See the `ibm` recipe section below.
* `node['java']['ibm']['accept_ibm_download_terms']` - Indicates that
you accept IBM's EULA (for `java::ibm`)
* `node['java']['oracle_rpm']['type']` - Type of java RPM (`jre` or `jdk`), default `jdk`
* `node['java']['oracle_rpm']['package_version']` - optional, can be set
to pin a version different from the up-to-date one available in the YUM repo,
it might be needed to also override the node['java']['java_home'] attribute
to a value consistent with the defined version
* `node['java']['oracle_rpm']['package_name']` - optional, can be set
to define a package name different from the RPM published by Oracle.
* `node['java']['accept_license_agreement']` - Indicates that you accept
the EULA for openjdk package installation.
* `node['java']['set_default']` - Indicates whether or not you want the
JDK installed to be default on the system. Defaults to true.
Recipes
-----
### default
Include the default recipe in a run list or recipe to get `java`. By default
the `openjdk` flavor of Java is installed, but this can be changed by
using the `install_flavor` attribute. By default on Windows platform
systems, the `install_flavor` is `windows`.
OpenJDK is the default because of licensing changes made upstream by
Oracle. See notes on the `oracle` recipe below.
NOTE: In most cases, including just the default recipe will be sufficient.
It's possible to include the install_type recipes directly, as long as
the necessary attributes (such as java_home) are set.
### set_attributes_from_version
Sets default attributes based on the JDK version. This is included by `default.rb`. This logic must be in
a recipe instead of attributes/default.rb. See [#95](https://github.com/agileorbit-cookbooks/java/pull/95)
for details.
### default_java_symlink
Updates /usr/lib/jvm/default-java to point to JAVA_HOME.
### purge_packages
Purges deprecated Sun Java packages.
### openjdk
This recipe installs the `openjdk` flavor of Java. It also uses the
`alternatives` system on RHEL/Debian families to set the default Java.
On platforms such as SmartOS that require the acceptance of a license
agreement during package installation, set
`node['java']['accept_license_agreement']` to true in order to indicate
that you accept the license.
### oracle
This recipe installs the `oracle` flavor of Java. This recipe does not
use distribution packages as Oracle changed the licensing terms with
JDK 1.6u27 and prohibited the practice for both RHEL and Debian family
platforms.
As of 26 March 2012 you can no longer directly download the JDK from
Oracle's website without using a special cookie. This cookbook uses
that cookie to download the oracle recipe on your behalf, however the
`java::oracle` recipe forces you to set either override the
`node['java']['oracle']['accept_oracle_download_terms']` to true or
set up a private repository accessible by HTTP.
override the `accept_oracle_download_terms` in, e.g., `roles/base.rb`
```ruby
default_attributes(
:java => {
:oracle => {
"accept_oracle_download_terms" => true
}
}
)
```
For both RHEL and Debian families, this recipe pulls the binary
distribution from the Oracle website, and installs it in the default
`JAVA_HOME` for each distribution. For Debian, this is
`/usr/lib/jvm/default-java`. For RHEl, this is `/usr/lib/jvm/java`.
After putting the binaries in place, the `java::oracle` recipe updates
`/usr/bin/java` to point to the installed JDK using the
`update-alternatives` script. This is all handled in the `java_ark`
LWRP.
### oracle_i386
This recipe installs the 32-bit Java virtual machine without setting
it as the default. This can be useful if you have applications on the
same machine that require different versions of the JVM.
This recipe operates in a similar manner to `java::oracle`.
### oracle_rpm
This recipe installs the Oracle JRE or JDK provided by a custom YUM
repositories.
It also uses the `alternatives` system on RHEL families to set
the default Java.
### windows
Because there is no easy way to pull the java msi off oracle's site,
this recipe requires you to host it internally on your own http repo.
**IMPORTANT NOTE**
If you use the `windows` recipe, you'll need to make sure you've uploaded
the `aws` and `windows` cookbooks. As of version 1.18.0, this cookbook
references them with `suggests` instead of `depends`, as they are only
used by the `windows` recipe.
### ibm
The `java::ibm` recipe is used to install the IBM version of Java.
Note that IBM requires you to create an account *and* log in to
download the binary installer for your platform. You must accept the
license agreement with IBM to use their version of Java. In this
cookbook, you indicate this by setting
`node['java']['ibm']['accept_ibm_download_terms']` to `true`. You must
also host the binary on your own HTTP server to have an automated
installation. The `node['java']['ibm']['url']` attribute must be set
to a valid https/http URL; the URL is checked for validity in the recipe.
At this time the `java::ibm` recipe does not support multiple SDK
installations.
Resources/Providers
-----
### java_ark
This cookbook contains the `java_ark` LWRP. Generally speaking this
LWRP is deprecated in favor of `ark` from the
[ark cookbook](https://github.com/opscode-cookbooks/ark), but it is
still used in this cookbook for handling the Oracle JDK installation.
By default, the extracted directory is extracted to
`app_root/extracted_dir_name` and symlinked to `app_root/default`
#### Actions
- `:install`: extracts the tarball and makes necessary symlinks
- `:remove`: removes the tarball and run update-alternatives for all
symlinked `bin_cmds`
#### Attribute Parameters
- `url`: path to tarball, .tar.gz, .bin (oracle-specific), and .zip
currently supported
- `checksum`: SHA256 checksum, not used for security but avoid
redownloading the archive on each chef-client run
- `app_home`: the default for installations of this type of
application, for example, `/usr/lib/tomcat/default`. If your
application is not set to the default, it will be placed at the same
level in the directory hierarchy but the directory name will be
`app_root/extracted_directory_name + "_alt"`
- `app_home_mode`: file mode for app_home, is an integer
- `bin_cmds`: array of binary commands that should be symlinked to
`/usr/bin`, examples are mvn, java, javac, etc. These cmds must be in
the `bin` subdirectory of the extracted folder. Will be ignored if this
`java_ark` is not the default
- `owner`: owner of extracted directory, set to "root" by default
- `group`: group of extracted directory, set to `:owner` by default
- `default`: whether this the default installation of this package,
boolean true or false
#### Examples
```ruby
# install jdk6 from Oracle
java_ark "jdk" do
url 'http://download.oracle.com/otn-pub/java/jdk/6u29-b11/jdk-6u29-linux-x64.bin'
checksum 'a8603fa62045ce2164b26f7c04859cd548ffe0e33bfc979d9fa73df42e3b3365'
app_home '/usr/local/java/default'
bin_cmds ["java", "javac"]
action :install
end
```
### java_alternatives
The `java_alternatives` LWRP uses `update-alternatives` command
to set and unset command alternatives for various Java tools
such as java, javac, etc.
#### Actions
- `:set`: set alternatives for Java tools
- `:unset`: unset alternatives for Java tools
#### Attribute Parameters
- `java_location`: Java installation location.
- `bin_cmds`: array of Java tool names to set or unset alternatives on.
- `default`: whether to set the Java tools as system default. Boolean, defaults to `true`.
- `priority`: priority of the alternatives. Integer, defaults to `1061`.
#### Examples
```ruby
# set alternatives for java and javac commands
java_alternatives "set java alternatives" do
java_location '/usr/local/java'
bin_cmds ["java", "javac"]
action :set
end
```
Production Deployment with Oracle Java
-----
Oracle has been known to change the behavior of its download site frequently. It is recommended you store the archives on an artifact server or s3 bucket. You can then override the attributes in a cookbook, role, or environment:
```ruby
default['java']['jdk_version'] = '7'
default['java']['install_flavor'] = 'oracle'
default['java']['jdk']['7']['x86_64']['url'] = 'http://artifactory.example.com/artifacts/jdk-7u65-linux-x64.tar.gz'
default['java']['oracle']['accept_oracle_download_terms'] = true
```
Recommendations for inclusion in community cookbooks
-----
This cookbook is a dependency for many other cookbooks in the Java/Chef sphere. Here are some guidelines for including it into other cookbooks:
### Allow people to not use this cookbook
Many users manage Java on their own or have systems that already have java installed. Give these users an option to skip this cookbook, for example:
```ruby
include_recipe 'java' if node['maven']['install_java']
```
This would allow a users of the maven cookbook to choose if they want the maven cookbook to install java for them or leave that up to the consumer.
Another good example is from the [Jenkins Cookbook Java recipe](https://github.com/opscode-cookbooks/jenkins/commit/ca2a69d982011dc1bec6a6d0ee4da5c1a1599864).
### Pinning to major version of cookbook and Java
This cookbook follows semver. It is recommended to pin at the major version of this cookbook when including it in other cookbooks, eg: `depends 'java', '~> 1.0'`
It is acceptable to set the `node['java']['jdk_version']` to a specific version if required for your software to run, eg software xyz requires Java 8 to run. Refrain from pinning to specific patches of the JDK to allow users to consume security updates.
Development
-----
This cookbook uses
[test-kitchen](https://github.com/opscode/test-kitchen) for
integration tests and
[ChefSpec/RSpec](https://github.com/sethvargo/chefspec) for unit tests.
See [TESTING.md](https://github.com/agileorbit-cookbooks/java/blob/master/TESTING.md) for testing instructions.
At this time due to licensing concerns, the IBM recipe is not set up
in test kitchen. If you would like to test this locally, copy
.kitchen.yml to .kitchen.local.yml and add the following suite:
```yml
suites:
- name: ibm
run_list: ["recipe[java]"]
attributes:
java:
install_flavor: "ibm"
ibm:
accept_ibm_download_terms: true
url: "http://jenkins/ibm-java-x86_64-sdk-7.0-4.1.bin"
checksum: the-sha256-checksum
```
Log into the IBM DeveloperWorks site to download a copy of the IBM
Java SDK you wish to use/test, host it on an internal HTTP server, and
calculate the SHA256 checksum to use in the suite.
License and Author
-----
* Author: Seth Chisamore (<schisamo@opscode.com>)
* Author: Bryan W. Berry (<bryan.berry@gmail.com>)
* Author: Joshua Timberman (<joshua@opscode.com>)
* Author: Eric Helgeson (<erichelgeson@gmail.com>)
Copyright: 2014, Agile Orbit, LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -0,0 +1,41 @@
Testing the java cookbook
=====
This cookbook includes both unit tests via [ChefSpec](https://github.com/sethvargo/chefspec) and integration tests via [Test Kitchen](https://github.com/test-kitchen/test-kitchen). Contributions to this cookbook will only be accepted if all tests pass successfully:
```bash
kitchen test
chef exec rspec
```
Setting up the test environment
-----
Install the latest version of [Vagrant](http://www.vagrantup.com/downloads.html) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads) (free) or [VMWare Fusion](http://www.vmware.com/products/fusion) (paid).
The Chef tooling (chefspec/test kitchen/etc) is managed by the [Chef Development Kit](http://downloads.getchef.com/chef-dk/) - Version 0.2.0-2.
Clone the latest version of the cookbook from the repository.
```bash
git clone git@github.com:agileorbit-cookbooks/java.git
cd java
```
Running ChefSpec
-----
ChefSpec unit tests are located in `spec`. Each recipe has a `recipename_spec.rb` file that contains unit tests for that recipe. Your new functionality or bug fix should have corresponding test coverage - if it's a change, make sure it doesn't introduce a regression (existing tests should pass). If it's a change or introduction of new functionality, add new tests as appropriate.
To run ChefSpec for the whole cookbook:
`chef exec rspec`
To run ChefSpec for a specific recipe:
`chef exec rspec spec/set_java_home_spec.rb`
Running Test Kitchen
-----
Test Kitchen test suites are defined in [.kitchen.yml](https://github.com/agileorbit-cookbooks/java/blob/master/.kitchen.yml). Running `kitchen test` will cause Test Kitchen to spin up each platform VM in turn, running the `java::default` recipe with differing parameters in order to test all possible combinations of platform, install_flavor, and JDK version. If the Chef run completes successfully, corresponding tests in `test/integration` are executed. These must also pass.

View File

@ -0,0 +1,131 @@
#
# Author:: Seth Chisamore (<schisamo@opscode.com>)
# Cookbook Name:: java
# Attributes:: default
#
# Copyright 2010, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# default jdk attributes
default['java']['jdk_version'] = '6'
default['java']['arch'] = kernel['machine'] =~ /x86_64/ ? "x86_64" : "i586"
default['java']['openjdk_packages'] = []
default['java']['openjdk_version'] = nil
default['java']['accept_license_agreement'] = false
default['java']['set_default'] = true
default['java']['alternatives_priority'] = 1062
default['java']['set_etc_environment'] = false
# the following retry parameters apply when downloading oracle java
default['java']['ark_retries'] = 0
default['java']['ark_retry_delay'] = 2
case node['platform_family']
when "windows"
default['java']['install_flavor'] = "windows"
default['java']['windows']['url'] = nil
default['java']['windows']['checksum'] = nil
default['java']['windows']['package_name'] = "Java(TM) SE Development Kit 7 (64-bit)"
else
default['java']['install_flavor'] = "openjdk"
end
case node['java']['install_flavor']
when 'ibm', 'ibm_tar'
default['java']['ibm']['url'] = nil
default['java']['ibm']['checksum'] = nil
default['java']['ibm']['accept_ibm_download_terms'] = false
default['java']['java_home'] = "/opt/ibm/java"
default['java']['ibm']['6']['bin_cmds'] = [ "appletviewer", "apt", "ControlPanel", "extcheck", "HtmlConverter", "idlj", "jar", "jarsigner",
"java", "javac", "javadoc", "javah", "javap", "javaws", "jconsole", "jcontrol", "jdb", "jdmpview",
"jrunscript", "keytool", "native2ascii", "policytool", "rmic", "rmid", "rmiregistry",
"schemagen", "serialver", "tnameserv", "wsgen", "wsimport", "xjc" ]
default['java']['ibm']['7']['bin_cmds'] = node['java']['ibm']['6']['bin_cmds'] + [ "pack200", "unpack200" ]
when 'oracle_rpm'
# type of java RPM : jdk or jre
default['java']['oracle_rpm']['type'] = 'jdk'
# optional, can be overriden to pin to a version different
# from the up-to-date.
default['java']['oracle_rpm']['package_version'] = nil
# optional, some distros re-package the official Oracle's RPM
# with a different name
default['java']['oracle_rpm']['package_name'] = nil
# set the JAVA_HOME path, it may be overriden
# when a package version is provided.
default['java']['java_home'] = "/usr/java/latest"
end
# if you change this to true, you can download directly from Oracle
default['java']['oracle']['accept_oracle_download_terms'] = false
# direct download paths for oracle, you have been warned!
# jdk6 attributes
default['java']['jdk']['6']['bin_cmds'] = [ "appletviewer", "apt", "ControlPanel", "extcheck", "HtmlConverter", "idlj", "jar", "jarsigner",
"java", "javac", "javadoc", "javah", "javap", "javaws", "jconsole", "jcontrol", "jdb", "jhat",
"jinfo", "jmap", "jps", "jrunscript", "jsadebugd", "jstack", "jstat", "jstatd", "jvisualvm",
"keytool", "native2ascii", "orbd", "pack200", "policytool", "rmic", "rmid", "rmiregistry",
"schemagen", "serialver", "servertool", "tnameserv", "unpack200", "wsgen", "wsimport", "xjc"]
# x86_64
default['java']['jdk']['6']['x86_64']['url'] = 'http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin'
default['java']['jdk']['6']['x86_64']['checksum'] = '6b493aeab16c940cae9e3d07ad2a5c5684fb49cf06c5d44c400c7993db0d12e8'
# i586
default['java']['jdk']['6']['i586']['url'] = 'http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-i586.bin'
default['java']['jdk']['6']['i586']['checksum'] = 'd53b5a2518d80e1d95565f0adda54eee229dc5f4a1d1a3c2f7bf5045b168a357'
# jdk7 attributes
default['java']['jdk']['7']['bin_cmds'] = [ "appletviewer", "apt", "ControlPanel", "extcheck", "idlj", "jar", "jarsigner", "java", "javac",
"javadoc", "javafxpackager", "javah", "javap", "javaws", "jcmd", "jconsole", "jcontrol", "jdb",
"jhat", "jinfo", "jmap", "jps", "jrunscript", "jsadebugd", "jstack", "jstat", "jstatd", "jvisualvm",
"keytool", "native2ascii", "orbd", "pack200", "policytool", "rmic", "rmid", "rmiregistry",
"schemagen", "serialver", "servertool", "tnameserv", "unpack200", "wsgen", "wsimport", "xjc"]
# Oracle doesn't seem to publish SHA256 checksums for Java releases, so we use MD5 instead.
# Official checksums for the latest release can be found at http://www.oracle.com/technetwork/java/javase/downloads/java-se-binaries-checksum-1956892.html
# x86_64
default['java']['jdk']['7']['x86_64']['url'] = 'http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-linux-x64.tar.gz'
default['java']['jdk']['7']['x86_64']['checksum'] = '81e3e2df33e13781e5fac5756ed90e67'
# i586
default['java']['jdk']['7']['i586']['url'] = 'http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-linux-i586.tar.gz'
default['java']['jdk']['7']['i586']['checksum'] = '715b0e8ba2a06bded75f6a92427e2701'
# jdk8 attributes
default['java']['jdk']['8']['bin_cmds'] = [ "appletviewer", "apt", "ControlPanel", "extcheck", "idlj", "jar", "jarsigner", "java", "javac",
"javadoc", "javafxpackager", "javah", "javap", "javaws", "jcmd", "jconsole", "jcontrol", "jdb",
"jdeps", "jhat", "jinfo", "jjs", "jmap", "jmc", "jps", "jrunscript", "jsadebugd", "jstack",
"jstat", "jstatd", "jvisualvm", "keytool", "native2ascii", "orbd", "pack200", "policytool",
"rmic", "rmid", "rmiregistry", "schemagen", "serialver", "servertool", "tnameserv",
"unpack200", "wsgen", "wsimport", "xjc"]
# Oracle doesn't seem to publish SHA256 checksums for Java releases, so we use MD5 instead.
# Official checksums for the latest release can be found at http://www.oracle.com/technetwork/java/javase/downloads/javase8-binaries-checksum-2133161.html
# x86_64
default['java']['jdk']['8']['x86_64']['url'] = 'http://download.oracle.com/otn-pub/java/jdk/8u20-b26/jdk-8u20-linux-x64.tar.gz'
default['java']['jdk']['8']['x86_64']['checksum'] = 'ec7f89dc3697b402e2c851d0488f6299'
# i586
default['java']['jdk']['8']['i586']['url'] = 'http://download.oracle.com/otn-pub/java/jdk/8u20-b26/jdk-8u20-linux-i586.tar.gz'
default['java']['jdk']['8']['i586']['checksum'] = '5dafdef064e18468f21c65051a6918d7'

View File

@ -0,0 +1,120 @@
#
# Author:: Joshua Timberman <joshua@opscode.com>
# Copyright:: Copyright (c) 2013, Opscode, Inc. <legal@opscode.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
require 'chef/version_constraint'
require 'uri'
require 'pathname'
module Opscode
class OpenJDK
attr_accessor :java_home, :jdk_version
def initialize(node)
@node = node.to_hash
@java_home = @node['java']['java_home'] || '/usr/lib/jvm/default-java'
@jdk_version = @node['java']['jdk_version'].to_s || '6'
end
def java_location
File.join(java_home_parent(@java_home), openjdk_path, 'bin/java')
end
def alternatives_priority
if @jdk_version == '6'
# 'accepted' default for java 6
1061
elsif @jdk_version == '7'
# i just made this number up
1100
elsif @jdk_version.to_i > 7
# just a guard against the incoming java 8
# so this cookbook will actually work for.. new versions of java
1110
else
# it's not 6, it's not 7, it's not newer than
# 7, but we probably want to install it, so
# override 6's priority. arbitrary number.
1062
end
end
def java_home_parent(java_home)
Pathname.new(java_home).parent.to_s
end
def openjdk_path
case @node['platform_family']
when 'debian'
'java-%s-openjdk%s/jre' % [@jdk_version, arch_dir]
when 'rhel', 'fedora'
'jre-1.%s.0-openjdk%s' % [@jdk_version, arch_dir]
when 'smartos'
'jre'
else
'jre'
end
end
def arch_dir
@node['kernel']['machine'] == 'x86_64' ? sixty_four : thirty_two
end
def sixty_four
case @node['platform_family']
when 'debian'
old_version? ? '' : '-amd64'
when 'rhel', 'fedora'
'.x86_64'
else
'-x86_64'
end
end
def thirty_two
case @node['platform_family']
when 'debian'
old_version? ? '' : '-i386'
else
''
end
end
# This method is used above (#sixty_four, #thirty_two) so we know
# whether to specify the architecture as part of the path name.
def old_version?
case @node['platform']
when 'ubuntu'
Chef::VersionConstraint.new("< 11.0").include?(@node['platform_version'])
when 'debian'
Chef::VersionConstraint.new("< 7.0").include?(@node['platform_version'])
end
end
end
end
class Chef
class Recipe
def valid_ibm_jdk_uri?(url)
url =~ ::URI::ABS_URI && %w[file http https].include?(::URI.parse(url).scheme)
end
def platform_requires_license_acceptance?
%w(smartos).include?(node.platform)
end
end
end

View File

@ -0,0 +1,5 @@
if defined?(ChefSpec)
def set_java_alternatives(resource_name)
ChefSpec::Matchers::ResourceMatcher.new(:java_alternatives, :set, resource_name)
end
end

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,42 @@
name "java"
maintainer "Agile Orbit"
maintainer_email "info@agileorbit.com"
license "Apache 2.0"
description "Installs Java runtime."
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version "1.28.0"
recipe "java::default", "Installs Java runtime"
recipe "java::default_java_symlink", "Updates /usr/lib/jvm/default-java"
recipe "java::ibm", "Installs the JDK for IBM"
recipe "java::ibm_tar", "Installs the JDK for IBM from a tarball"
recipe "java::openjdk", "Installs the OpenJDK flavor of Java"
recipe "java::oracle", "Installs the Oracle flavor of Java"
recipe "java::oracle_i386", "Installs the 32-bit jvm without setting it as the default"
recipe "java::oracle_rpm", "Installs the Oracle RPM flavor of Java"
recipe "java::purge_packages", "Purges old Sun JDK packages"
recipe "java::set_attributes_from_version", "Sets various attributes that depend on jdk_version"
recipe "java::set_java_home", "Sets the JAVA_HOME environment variable"
recipe "java::windows", "Installs the JDK on Windows"
%w{
debian
ubuntu
centos
redhat
scientific
fedora
amazon
arch
oracle
freebsd
windows
suse
xenserver
smartos
}.each do |os|
supports os
end
suggests "windows"
suggests "aws"

View File

@ -0,0 +1,79 @@
#
# Cookbook Name:: java
# Provider:: alternatives
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'chef/mixin/shell_out'
include Chef::Mixin::ShellOut
action :set do
if new_resource.bin_cmds
# I couldn't find a way to cleanly avoid repeating this variable declaration in both :set and :unset
alternatives_cmd = node['platform_family'] == 'rhel' ? 'alternatives' : 'update-alternatives'
new_resource.bin_cmds.each do |cmd|
bin_path = "/usr/bin/#{cmd}"
alt_path = "#{new_resource.java_location}/bin/#{cmd}"
priority = new_resource.priority
if !::File.exist?(alt_path)
Chef::Log.debug "Skipping setting alternative for #{cmd}. Command #{alt_path} does not exist."
next
end
# install the alternative if needed
alternative_exists = shell_out("#{alternatives_cmd} --display #{cmd} | grep #{alt_path}").exitstatus == 0
unless alternative_exists
description = "Add alternative for #{cmd}"
converge_by(description) do
Chef::Log.debug "Adding alternative for #{cmd}"
shell_out("rm /var/lib/alternatives/#{cmd}")
install_cmd = shell_out("#{alternatives_cmd} --install #{bin_path} #{cmd} #{alt_path} #{priority}")
unless install_cmd.exitstatus == 0
Chef::Application.fatal!(%Q[ set alternative failed ])
end
end
new_resource.updated_by_last_action(true)
end
# set the alternative if default
if new_resource.default
alternative_is_set = shell_out("#{alternatives_cmd} --display #{cmd} | grep \"link currently points to #{alt_path}\"").exitstatus == 0
unless alternative_is_set
description = "Set alternative for #{cmd}"
converge_by(description) do
Chef::Log.debug "Setting alternative for #{cmd}"
set_cmd = shell_out("#{alternatives_cmd} --set #{cmd} #{alt_path}")
unless set_cmd.exitstatus == 0
Chef::Application.fatal!(%Q[ set alternative failed ])
end
end
new_resource.updated_by_last_action(true)
end
end
end
end
end
action :unset do
# I couldn't find a way to cleanly avoid repeating this variable declaration in both :set and :unset
alternatives_cmd = node['platform_family'] == 'rhel' ? 'alternatives' : 'update-alternatives'
new_resource.bin_cmds.each do |cmd|
alt_path = "#{new_resource.java_location}/bin/#{cmd}"
cmd = shell_out("#{alternatives_cmd} --remove #{cmd} #{alt_path}")
if cmd.exitstatus == 0
new_resource.updated_by_last_action(true)
end
end
end

View File

@ -0,0 +1,251 @@
#
# Author:: Bryan W. Berry (<bryan.berry@gmail.com>)
# Cookbook Name:: java
# Provider:: ark
#
# Copyright 2011, Bryan w. Berry
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'chef/mixin/shell_out'
include Chef::Mixin::ShellOut
def whyrun_supported?
true
end
def parse_app_dir_name url
file_name = url.split('/')[-1]
# funky logic to parse oracle's non-standard naming convention
# for jdk1.6
if file_name =~ /^(jre|jdk|server-jre).*$/
major_num = file_name.scan(/\d/)[0]
update_token = file_name.scan(/u(\d+)/)[0]
update_num = update_token ? update_token[0] : "0"
# pad a single digit number with a zero
if update_num.length < 2
update_num = "0" + update_num
end
package_name = (file_name =~ /^server-jre.*$/) ? "jdk" : file_name.scan(/[a-z]+/)[0]
if update_num == "00"
app_dir_name = "#{package_name}1.#{major_num}.0"
else
app_dir_name = "#{package_name}1.#{major_num}.0_#{update_num}"
end
else
app_dir_name = file_name.split(/(.tgz|.tar.gz|.zip)/)[0]
app_dir_name = app_dir_name.split("-bin")[0]
end
[app_dir_name, file_name]
end
def oracle_downloaded?(download_path, new_resource)
if ::File.exists? download_path
require 'digest'
if new_resource.checksum =~ /^[0-9a-f]{32}$/
downloaded_md5 = Digest::MD5.file(download_path).hexdigest
downloaded_md5 == new_resource.checksum
else
downloaded_sha = Digest::SHA256.file(download_path).hexdigest
downloaded_sha == new_resource.checksum
end
else
return false
end
end
def download_direct_from_oracle(tarball_name, new_resource)
download_path = "#{Chef::Config[:file_cache_path]}/#{tarball_name}"
cookie = "oraclelicense=accept-securebackup-cookie"
if node['java']['oracle']['accept_oracle_download_terms']
# install the curl package
p = package "curl" do
action :nothing
end
# no converge_by block since the package provider will take care of this run_action
p.run_action(:install)
description = "download oracle tarball straight from the server"
converge_by(description) do
Chef::Log.debug "downloading oracle tarball straight from the source"
cmd = shell_out!(
%Q[ curl --create-dirs -L --retry #{new_resource.retries} --retry-delay #{new_resource.retry_delay} --cookie "#{cookie}" #{new_resource.url} -o #{download_path} ]
)
end
else
Chef::Application.fatal!("You must set the attribute node['java']['oracle']['accept_oracle_download_terms'] to true if you want to download directly from the oracle site!")
end
end
action :install do
app_dir_name, tarball_name = parse_app_dir_name(new_resource.url)
app_root = new_resource.app_home.split('/')[0..-2].join('/')
app_dir = app_root + '/' + app_dir_name
if new_resource.group
app_group = new_resource.group
else
app_group = new_resource.owner
end
unless new_resource.default
Chef::Log.debug("processing alternate jdk")
app_dir = app_dir + "_alt"
app_home = new_resource.app_home + "_alt"
else
app_home = new_resource.app_home
end
unless ::File.exists?(app_dir)
Chef::Log.info "Adding #{new_resource.name} to #{app_dir}"
require 'fileutils'
unless ::File.exists?(app_root)
description = "create dir #{app_root} and change owner to #{new_resource.owner}:#{app_group}"
converge_by(description) do
FileUtils.mkdir app_root, :mode => new_resource.app_home_mode
FileUtils.chown new_resource.owner, app_group, app_root
end
end
if new_resource.url =~ /^http:\/\/download.oracle.com.*$/
download_path = "#{Chef::Config[:file_cache_path]}/#{tarball_name}"
if oracle_downloaded?(download_path, new_resource)
Chef::Log.debug("oracle tarball already downloaded, not downloading again")
else
download_direct_from_oracle tarball_name, new_resource
end
else
Chef::Log.debug("downloading tarball from an unofficial repository")
r = remote_file "#{Chef::Config[:file_cache_path]}/#{tarball_name}" do
source new_resource.url
checksum new_resource.checksum
retries new_resource.retries
retry_delay new_resource.retry_delay
mode 0755
action :nothing
end
#no converge by on run_action remote_file takes care of it.
r.run_action(:create_if_missing)
end
description = "extract compressed data into Chef file cache path and
move extracted data to #{app_dir}"
converge_by(description) do
case tarball_name
when /^.*\.bin/
cmd = shell_out(
%Q[ cd "#{Chef::Config[:file_cache_path]}";
bash ./#{tarball_name} -noregister
] )
unless cmd.exitstatus == 0
Chef::Application.fatal!("Failed to extract file #{tarball_name}!")
end
when /^.*\.zip/
cmd = shell_out(
%Q[ unzip "#{Chef::Config[:file_cache_path]}/#{tarball_name}" -d "#{Chef::Config[:file_cache_path]}" ]
)
unless cmd.exitstatus == 0
Chef::Application.fatal!("Failed to extract file #{tarball_name}!")
end
when /^.*\.(tar.gz|tgz)/
cmd = shell_out(
%Q[ tar xvzf "#{Chef::Config[:file_cache_path]}/#{tarball_name}" -C "#{Chef::Config[:file_cache_path]}" --no-same-owner]
)
unless cmd.exitstatus == 0
Chef::Application.fatal!("Failed to extract file #{tarball_name}!")
end
end
cmd = shell_out(
%Q[ mv "#{Chef::Config[:file_cache_path]}/#{app_dir_name}" "#{app_dir}" ]
)
unless cmd.exitstatus == 0
Chef::Application.fatal!(%Q[ Command \' mv "#{Chef::Config[:file_cache_path]}/#{app_dir_name}" "#{app_dir}" \' failed ])
end
# change ownership of extracted files
FileUtils.chown_R new_resource.owner, app_group, app_root
end
new_resource.updated_by_last_action(true)
end
#set up .jinfo file for update-java-alternatives
java_name = app_home.split('/')[-1]
jinfo_file = "#{app_root}/.#{java_name}.jinfo"
if platform_family?("debian") && !::File.exists?(jinfo_file)
description = "Add #{jinfo_file} for debian"
converge_by(description) do
Chef::Log.debug "Adding #{jinfo_file} for debian"
template jinfo_file do
cookbook "java"
source "oracle.jinfo.erb"
variables(
:priority => new_resource.alternatives_priority,
:bin_cmds => new_resource.bin_cmds,
:name => java_name,
:app_dir => app_home
)
action :create
end
end
new_resource.updated_by_last_action(true)
end
#link app_home to app_dir
Chef::Log.debug "app_home is #{app_home} and app_dir is #{app_dir}"
current_link = ::File.symlink?(app_home) ? ::File.readlink(app_home) : nil
if current_link != app_dir
description = "Symlink #{app_dir} to #{app_home}"
converge_by(description) do
Chef::Log.debug "Symlinking #{app_dir} to #{app_home}"
FileUtils.rm_f app_home
FileUtils.ln_sf app_dir, app_home
end
end
#update-alternatives
java_alternatives 'set-java-alternatives' do
java_location app_home
bin_cmds new_resource.bin_cmds
priority new_resource.alternatives_priority
default new_resource.default
action :set
end
end
action :remove do
app_dir_name, tarball_name = parse_app_dir_name(new_resource.url)
app_root = new_resource.app_home.split('/')[0..-2].join('/')
app_dir = app_root + '/' + app_dir_name
unless new_resource.default
Chef::Log.debug("processing alternate jdk")
app_dir = app_dir + "_alt"
app_home = new_resource.app_home + "_alt"
else
app_home = new_resource.app_home
end
if ::File.exists?(app_dir)
java_alternatives 'unset-java-alternatives' do
java_location app_home
bin_cmds new_resource.bin_cmds
action :unset
end
description = "remove #{new_resource.name} at #{app_dir}"
converge_by(description) do
Chef::Log.info "Removing #{new_resource.name} at #{app_dir}"
FileUtils.rm_rf app_dir
end
new_resource.updated_by_last_action(true)
end
end

View File

@ -0,0 +1,28 @@
#
# Author:: Seth Chisamore (<schisamo@opscode.com>)
# Cookbook Name:: java
# Recipe:: default
#
# Copyright 2008-2011, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
if node['java']['install_flavor'] != 'windows'
if node['java']['jdk_version'].to_i == 8 and node['java']['install_flavor'] != 'oracle'
Chef::Application.fatal!("JDK 8 is currently only provided with the Oracle JDK")
end
end
include_recipe "java::set_attributes_from_version"
include_recipe "java::#{node['java']['install_flavor']}"

View File

@ -0,0 +1,19 @@
# Cookbook Name:: java
# Recipe:: default_java_symlink
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
link '/usr/lib/jvm/default-java' do
to node['java']['java_home']
not_if { node['java']['java_home'] == '/usr/lib/jvm/default-java' }
end

View File

@ -0,0 +1,76 @@
# Author:: Joshua Timberman (<joshua@opscode.com>)
# Cookbook Name:: java
# Recipe:: ibm
#
# Copyright 2013, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'uri'
source_url = node['java']['ibm']['url']
jdk_uri = ::URI.parse(source_url)
jdk_filename = ::File.basename(jdk_uri.path)
unless valid_ibm_jdk_uri?(source_url)
raise "You must set the attribute `node['java']['ibm']['url']` to a valid HTTP URI"
end
# "installable package" installer needs rpm on Ubuntu
if platform_family?('debian') && jdk_filename !~ /archive/
package "rpm" do
action :install
end
end
template "#{Chef::Config[:file_cache_path]}/installer.properties" do
source "ibm_jdk.installer.properties.erb"
only_if { node['java']['ibm']['accept_ibm_download_terms'] }
end
remote_file "#{Chef::Config[:file_cache_path]}/#{jdk_filename}" do
source source_url
mode 00755
if node['java']['ibm']['checksum']
checksum node['java']['ibm']['checksum']
action :create
else
action :create_if_missing
end
notifies :run, "execute[install-ibm-java]", :immediately
end
java_alternatives 'set-java-alternatives' do
java_location node['java']['java_home']
default node['java']['set_default']
case node['java']['jdk_version'].to_s
when "6"
bin_cmds node['java']['ibm']['6']['bin_cmds']
when "7"
bin_cmds node['java']['ibm']['7']['bin_cmds']
end
action :nothing
end
execute "install-ibm-java" do
cwd Chef::Config[:file_cache_path]
environment({
"_JAVA_OPTIONS" => "-Dlax.debug.level=3 -Dlax.debug.all=true",
"LAX_DEBUG" => "1"
})
command "./#{jdk_filename} -f ./installer.properties -i silent"
notifies :set, 'java_alternatives[set-java-alternatives]', :immediately
creates "#{node['java']['java_home']}/jre/bin/java"
end
include_recipe "java::set_java_home"

View File

@ -0,0 +1,70 @@
# Cookbook Name:: java
# Recipe:: ibm_tar
#
# Copyright 2013, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'uri'
source_url = node['java']['ibm']['url']
jdk_uri = ::URI.parse(source_url)
jdk_filename = ::File.basename(jdk_uri.path)
unless valid_ibm_jdk_uri?(source_url)
raise "You must set the attribute `node['java']['ibm']['url']` to a valid URI"
end
unless jdk_filename =~ /\.(tar.gz|tgz)$/
raise "The attribute `node['java']['ibm']['url']` must specify a .tar.gz file"
end
remote_file "#{Chef::Config[:file_cache_path]}/#{jdk_filename}" do
source source_url
mode 00755
if node['java']['ibm']['checksum']
checksum node['java']['ibm']['checksum']
action :create
else
action :create_if_missing
end
notifies :create, "directory[create-java-home]", :immediately
notifies :run, "execute[untar-ibm-java]", :immediately
end
directory "create-java-home" do
path node['java']['java_home']
mode 00755
recursive true
end
java_alternatives 'set-java-alternatives' do
java_location node['java']['java_home']
default node['java']['set_default']
case node['java']['jdk_version'].to_s
when "6"
bin_cmds node['java']['ibm']['6']['bin_cmds']
when "7"
bin_cmds node['java']['ibm']['7']['bin_cmds']
end
action :nothing
end
execute "untar-ibm-java" do
cwd Chef::Config[:file_cache_path]
command "tar xzf ./#{jdk_filename} -C #{node['java']['java_home']} --strip 1"
notifies :set, 'java_alternatives[set-java-alternatives]', :immediately
creates "#{node['java']['java_home']}/jre/bin/java"
end
include_recipe "java::set_java_home"

View File

@ -0,0 +1,72 @@
# Author:: Bryan W. Berry (<bryan.berry@gmail.com>)
# Author:: Seth Chisamore (<schisamo@opscode.com>)
# Author:: Joshua Timberman (<joshua@opscode.com>)
#
# Cookbook Name:: java
# Recipe:: openjdk
#
# Copyright 2010-2013, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
unless node.recipe?('java::default')
Chef::Log.warn("Using java::default instead is recommended.")
# Even if this recipe is included by itself, a safety check is nice...
[ node['java']['openjdk_packages'], node['java']['java_home'] ].each do |v|
if v.nil? or v.empty?
include_recipe "java::set_attributes_from_version"
end
end
end
jdk = Opscode::OpenJDK.new(node)
if platform_requires_license_acceptance?
file "/opt/local/.dlj_license_accepted" do
owner "root"
group "root"
mode "0400"
action :create
only_if { node['java']['accept_license_agreement'] }
end
end
node['java']['openjdk_packages'].each do |pkg|
package pkg do
version node['java']['openjdk_version'] if node['java']['openjdk_version']
end
end
if platform_family?('debian', 'rhel', 'fedora')
java_alternatives 'set-java-alternatives' do
java_location jdk.java_home
default node['java']['set_default']
priority jdk.alternatives_priority
case node['java']['jdk_version'].to_s
when "6"
bin_cmds node['java']['jdk']['6']['bin_cmds']
when "7"
bin_cmds node['java']['jdk']['7']['bin_cmds']
end
action :set
end
end
if node['java']['set_default'] and platform_family?('debian')
include_recipe 'java::default_java_symlink'
end
# We must include this recipe AFTER updating the alternatives or else JAVA_HOME
# will not point to the correct java.
include_recipe 'java::set_java_home'

View File

@ -0,0 +1,67 @@
#
# Author:: Bryan W. Berry (<bryan.berry@gmail.com>)
# Cookbook Name:: java
# Recipe:: oracle
#
# Copyright 2011, Bryan w. Berry
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
unless node.recipe?('java::default')
Chef::Log.warn("Using java::default instead is recommended.")
# Even if this recipe is included by itself, a safety check is nice...
if node['java']['java_home'].nil? or node['java']['java_home'].empty?
include_recipe "java::set_attributes_from_version"
end
end
java_home = node['java']["java_home"]
arch = node['java']['arch']
case node['java']['jdk_version'].to_s
when "6"
tarball_url = node['java']['jdk']['6'][arch]['url']
tarball_checksum = node['java']['jdk']['6'][arch]['checksum']
bin_cmds = node['java']['jdk']['6']['bin_cmds']
when "7"
tarball_url = node['java']['jdk']['7'][arch]['url']
tarball_checksum = node['java']['jdk']['7'][arch]['checksum']
bin_cmds = node['java']['jdk']['7']['bin_cmds']
when "8"
tarball_url = node['java']['jdk']['8'][arch]['url']
tarball_checksum = node['java']['jdk']['8'][arch]['checksum']
bin_cmds = node['java']['jdk']['8']['bin_cmds']
end
if tarball_url =~ /example.com/
Chef::Application.fatal!("You must change the download link to your private repository. You can no longer download java directly from http://download.oracle.com without a web broswer")
end
include_recipe "java::set_java_home"
java_ark "jdk" do
url tarball_url
default node['java']['set_default']
checksum tarball_checksum
app_home java_home
bin_cmds bin_cmds
alternatives_priority node['java']['alternatives_priority']
retries node['java']['ark_retries']
retry_delay node['java']['ark_retry_delay']
action :install
end
if node['java']['set_default'] and platform_family?('debian')
include_recipe 'java::default_java_symlink'
end

View File

@ -0,0 +1,67 @@
#
# Author:: Bryan W. Berry (<bryan.berry@gmail.com>)
# Cookbook Name:: java
# Recipe:: oracle_i386
#
# Copyright 2010-2011, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
unless node.recipe?('java::default')
Chef::Log.warn("Using java::default instead is recommended.")
# Even if this recipe is included by itself, a safety check is nice...
if node['java']['java_home'].nil? or node['java']['java_home'].empty?
include_recipe "java::set_attributes_from_version"
end
end
java_home = node['java']["java_home"]
case node['java']['jdk_version'].to_s
when "6"
tarball_url = node['java']['jdk']['6']['i586']['url']
tarball_checksum = node['java']['jdk']['6']['i586']['checksum']
bin_cmds = node['java']['jdk']['6']['bin_cmds']
when "7"
tarball_url = node['java']['jdk']['7']['i586']['url']
tarball_checksum = node['java']['jdk']['7']['i586']['checksum']
bin_cmds = node['java']['jdk']['7']['bin_cmds']
when "8"
tarball_url = node['java']['jdk']['8']['i586']['url']
tarball_checksum = node['java']['jdk']['8']['i586']['checksum']
bin_cmds = node['java']['jdk']['8']['bin_cmds']
end
include_recipe "java::set_java_home"
yum_package "glibc" do
arch "i686"
only_if { platform_family?( "rhel", "fedora" ) }
end
java_ark "jdk-alt" do
url tarball_url
default node['java']['set_default']
checksum tarball_checksum
app_home java_home
bin_cmds bin_cmds
retries node['java']['ark_retries']
retry_delay node['java']['ark_retries']
action :install
default false
end
if node['java']['set_default'] and platform_family?('debian')
include_recipe 'java::default_java_symlink'
end

View File

@ -0,0 +1,58 @@
# Author:: Christophe Arguel (<christophe.arguel@free.fr>)
#
# Cookbook Name:: java
# Recipe:: oracle_rpm
#
# Copyright 2013, Christophe Arguel <christophe.arguel@free.fr>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
include_recipe 'java::set_java_home'
slave_cmds = case node['java']['oracle_rpm']['type']
when 'jdk'
%W[appletviewer apt ControlPanel extcheck idlj jar jarsigner javac javadoc javafxpackager javah javap java-rmi.cgi javaws jcmd jconsole jcontrol jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd jvisualvm keytool native2ascii orbd pack200 policytool rmic rmid rmiregistry schemagen serialver servertool tnameserv unpack200 wsgen wsimport xjc]
when 'jre'
%W[ControlPanel java_vm javaws jcontrol keytool orbd pack200 policytool rmid rmiregistry servertool tnameserv unpack200]
else
Chef::Application.fatal "Unsupported oracle RPM type (#{node['java']['oracle_rpm']['type']})"
end
if platform_family?('rhel', 'fedora') and node['java']['set_default']
bash 'update-java-alternatives' do
java_home = node['java']['java_home']
java_location = File.join(java_home, "bin", "java")
slave_lines = slave_cmds.inject("") do |slaves, cmd|
slaves << "--slave /usr/bin/#{cmd} #{cmd} #{File.join(java_home, "bin", cmd)} \\\n"
end
code <<-EOH.gsub(/^\s+/, '')
update-alternatives --install /usr/bin/java java #{java_location} 1061 \
#{slave_lines} && \
update-alternatives --set java #{java_location}
EOH
action :nothing
end
end
package_name = node['java']['oracle_rpm']['package_name'] || node['java']['oracle_rpm']['type']
package package_name do
action :install
version node['java']['oracle_rpm']['package_version'] if node['java']['oracle_rpm']['package_version']
notifies :run, 'bash[update-java-alternatives]', :immediately if platform_family?('rhel', 'fedora') and node['java']['set_default']
end

View File

@ -0,0 +1,20 @@
# Cookbook Name:: java
# Recipe:: purge_packages
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
%w[sun-java6-jdk sun-java6-bin sun-java6-jre].each do |pkg|
package pkg do
action :purge
end
end

View File

@ -0,0 +1,53 @@
# Cookbook Name:: java
# Recipe:: set_attributes_from_version
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Calculate variables that depend on jdk_version
# If you need to override this in an attribute file you must use
# force_default or higher precedence.
case node['platform_family']
when "rhel", "fedora"
case node['java']['install_flavor']
when "oracle"
node.default['java']['java_home'] = "/usr/lib/jvm/java"
when "oracle_rpm"
node.default['java']['java_home'] = "/usr/java/latest"
else
node.default['java']['java_home'] = "/usr/lib/jvm/java-1.#{node['java']['jdk_version']}.0"
end
node.default['java']['openjdk_packages'] = ["java-1.#{node['java']['jdk_version']}.0-openjdk", "java-1.#{node['java']['jdk_version']}.0-openjdk-devel"]
when "freebsd"
node.default['java']['java_home'] = "/usr/local/openjdk#{node['java']['jdk_version']}"
node.default['java']['openjdk_packages'] = ["openjdk#{node['java']['jdk_version']}"]
when "arch"
node.default['java']['java_home'] = "/usr/lib/jvm/java-#{node['java']['jdk_version']}-openjdk"
node.default['java']['openjdk_packages'] = ["openjdk#{node['java']['jdk_version']}"]
when "debian"
node.default['java']['java_home'] = "/usr/lib/jvm/java-#{node['java']['jdk_version']}-#{node['java']['install_flavor']}"
# Newer Debian & Ubuntu adds the architecture to the path
if node['platform'] == 'debian' && Chef::VersionConstraint.new(">= 7.0").include?(node['platform_version']) ||
node['platform'] == 'ubuntu' && Chef::VersionConstraint.new(">= 12.04").include?(node['platform_version'])
node.default['java']['java_home'] = "#{node['java']['java_home']}-#{node['kernel']['machine'] == 'x86_64' ? 'amd64' : 'i386'}"
end
node.default['java']['openjdk_packages'] = ["openjdk-#{node['java']['jdk_version']}-jdk", "openjdk-#{node['java']['jdk_version']}-jre-headless"]
when "smartos"
node.default['java']['java_home'] = "/opt/local/java/sun6"
node.default['java']['openjdk_packages'] = ["sun-jdk#{node['java']['jdk_version']}", "sun-jre#{node['java']['jdk_version']}"]
when "windows"
# Do nothing otherwise we will fall through to the else and set java_home to an invalid path, causing the installer to popup a dialog
else
node.default['java']['java_home'] = "/usr/lib/jvm/default-java"
node.default['java']['openjdk_packages'] = ["openjdk-#{node['java']['jdk_version']}-jdk"]
end

View File

@ -0,0 +1,44 @@
# Author:: Joshua Timberman (<joshua@opscode.com>)
# Cookbook Name:: java
# Recipe:: set_java_home
#
# Copyright 2013, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
ruby_block "set-env-java-home" do
block do
ENV["JAVA_HOME"] = node['java']['java_home']
end
not_if { ENV["JAVA_HOME"] == node['java']['java_home'] }
end
directory "/etc/profile.d" do
mode 00755
end
file "/etc/profile.d/jdk.sh" do
content "export JAVA_HOME=#{node['java']['java_home']}"
mode 00755
end
if node['java']['set_etc_environment']
ruby_block "Set JAVA_HOME in /etc/environment" do
block do
file = Chef::Util::FileEdit.new("/etc/environment")
file.insert_line_if_no_match(/^JAVA_HOME=/, "JAVA_HOME=#{node['java']['java_home']}")
file.search_file_replace_line(/^JAVA_HOME=/, "JAVA_HOME=#{node['java']['java_home']}")
file.write_file
end
end
end

View File

@ -0,0 +1,77 @@
#
# Author:: Kendrick Martin (<kendrick.martin@webtrends.com>)
# Cookbook Name:: java
# Recipe:: windows
#
# Copyright 2008-2012 Webtrends, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
require 'uri'
Chef::Log.fatal("No download url set for java installer.") unless node['java'] && node['java']['windows'] && node['java']['windows']['url']
pkg_checksum = node['java']['windows']['checksum']
aws_access_key_id = node['java']['windows']['aws_access_key_id']
aws_secret_access_key = node['java']['windows']['aws_secret_access_key']
uri = ::URI.parse(node['java']['windows']['url'])
cache_file_path = File.join(Chef::Config[:file_cache_path], File.basename(::URI.unescape(uri.path)))
if aws_access_key_id && aws_secret_access_key
include_recipe 'aws::default' # install right_aws gem for aws_s3_file
aws_s3_file cache_file_path do
aws_access_key_id aws_access_key_id
aws_secret_access_key aws_secret_access_key
checksum pkg_checksum if pkg_checksum
bucket node['java']['windows']['bucket']
remote_path node['java']['windows']['remote_path']
backup false
action :create
end
else
remote_file cache_file_path do
checksum pkg_checksum if pkg_checksum
source node['java']['windows']['url']
backup false
action :create
end
end
if node['java'].attribute?("java_home")
java_home_win = win_friendly_path(node['java']['java_home'])
# The EXE installer expects escaped quotes, so we need to double escape
# them here. The final string looks like :
# /v"/qn INSTALLDIR=\"C:\Program Files\Java\""
additional_options = "/v\"/qn INSTALLDIR=\\\"#{java_home_win}\\\"\""
env "JAVA_HOME" do
value java_home_win
end
# update path
windows_path "#{java_home_win}\\bin" do
action :add
end
end
windows_package node['java']['windows']['package_name'] do
source cache_file_path
checksum node['java']['windows']['checksum']
action :install
installer_type :custom
options "/s #{additional_options}"
end

View File

@ -0,0 +1,29 @@
#
# Cookbook Name:: java
# Provider:: alternatives
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
actions :set, :unset
attribute :java_location, :kind_of => String, :default => nil
attribute :bin_cmds, :kind_of => Array, :default => nil
attribute :default, :equal_to => [true, false], :default => true
attribute :priority, :kind_of => Integer, :default => 1061
# we have to set default for the supports attribute
# in initializer since it is a 'reserved' attribute name
def initialize(*args)
super
@action = :set
end

View File

@ -0,0 +1,55 @@
#
# Author:: Bryan W. Berry (<bryan.berry@gmail.com>)
# Cookbook Name:: java
# Resource:: ark
#
# Copyright 2011, Bryan w. Berry
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
actions :install, :remove
state_attrs :alternatives_priority,
:app_home,
:app_home_mode,
:bin_cmds,
:checksum,
:md5,
:default,
:mirrorlist,
:owner,
:group,
:url
attribute :url, :regex => /^(file|http|https?):\/\/.*(gz|tar.gz|tgz|bin|zip)$/, :default => nil
attribute :mirrorlist, :kind_of => Array, :default => nil
attribute :checksum, :regex => /^[0-9a-f]{32}$|^[a-zA-Z0-9]{40,64}$/, :default => nil
attribute :md5, :regex => /^[0-9a-f]{32}$|^[a-zA-Z0-9]{40,64}$/, :default => nil
attribute :app_home, :kind_of => String, :default => nil
attribute :app_home_mode, :kind_of => Integer, :default => 0755
attribute :bin_cmds, :kind_of => Array, :default => []
attribute :owner, :default => 'root'
# Will default to :owner if :group is not passed
attribute :group, :default => nil
attribute :default, :equal_to => [true, false], :default => true
attribute :alternatives_priority, :kind_of => Integer, :default => 1
attribute :retries, :kind_of => Integer, :default => 0
attribute :retry_delay, :kind_of => Integer, :default => 2
# we have to set default for the supports attribute
# in initializer since it is a 'reserved' attribute name
def initialize(*args)
super
@action = :install
@supports = {:report => true, :exception => true}
end

View File

@ -0,0 +1,3 @@
INSTALLER_UI=silent
USER_INSTALL_DIR=<%= node['java']['java_home'] %>
-fileOverwrite_<%= node['java']['java_home'] %>_uninstall/uninstall.lax=Yes

View File

@ -0,0 +1,6 @@
name=<%= @name %>
priority=<%= @priority %>
section=main
<% @bin_cmds.each do |cmd| -%>jdk <%= cmd %> <%= @app_dir %>/bin/<%= cmd %>
<% end -%>

View File

@ -0,0 +1,434 @@
mysql Cookbook CHANGELOG
========================
This file is used to list changes made in each version of the mysql cookbook.
v5.5.3 (2014-09-24)
------------------
- Reverting back to Upstart on Ubuntu 14.04
v5.5.2 (2014-09-8)
------------------
- Reverting commit that broke Debian pass_string
v5.5.1 (2014-09-2)
------------------
- Switching Ubuntu service provider to use SysVinit instead of Upstart
v5.5.0 (2014-08-27)
-------------------
- Adding package version and action parameters to mysql_service resource
- Fixing Debian pass_string
v5.4.4 (2014-08-27)
-------------------
- Changing module namespace to MysqlCookbook
v5.4.3 (2014-08-25)
-------------------
- More refactoring. Moving helper function bits into resource parsed_parameters
v5.4.2 (2014-08-25)
-------------------
- Moving provider local variables into definitions for RHEL provider
v5.4.1 (2014-08-25)
-------------------
- Refactoring resources into the LWRP style with parsed parameters
- Moving provider local variables into definitions
v5.4.0 (2014-08-25)
-------------------
- #212 - support for centos-7 (mysql55 and mysql56)
- Adding (untested) Debian-6 support
- Adding Suse support to metadata.rb
- Adding ability to change MySQL root password
- Added libmysqlclient-devel package to SuSE client provider
- Appeasing AppArmor
- Reducing duplication in client provider
v5.3.6 (2014-06-18)
-------------------
- Fixing pid path location. Updating tests to include real RHEL
v5.3.4 (2014-06-16)
-------------------
- Fixing specs for Amazon Linux server package names
v5.3.2 (2014-06-16)
-------------------
- Fixing Amazon Linux support
v5.3.0 (2014-06-11)
-------------------
- #189 - Fix server_repl_password description
- #191 - Adding support for server55 and server56 on el-6
- #193 - Fix syntax in mysql_service example
- #199 - Adding Suse support
v5.2.12 (2014-05-19)
--------------------
PR #192 - recipes/server.rb should honor parameter node['mysql']['version']
v5.2.10 (2014-05-15)
--------------------
- COOK-4394 - restore freebsd support
v5.2.8 (2014-05-15)
-------------------
- [COOK-4653] - Missing mySQL 5.6 support for Ubuntu 14.04
v5.2.6 (2014-05-07)
-------------------
- [COOK-4625] - Fix password resource parameter consumption on Debian and Ubuntu
- Fix up typos and version numbers in PLATFORMS.md
- Fix up specs from COOK-4613 changes
v5.2.4 (2014-05-02)
-------------------
- [COOK-4613] - Fix permissions on mysql data_dir to allow global access to mysql.sock
v5.2.2 (2014-04-24)
-------------------
- [COOK-4564] - Using positive tests for datadir move
v5.2.0 (2014-04-22)
-------------------
- [COOK-4551] - power grants.sql from resource parameters
v5.1.12 (2014-04-21)
--------------------
- [COOK-4554] - Support for Debian Sid
v5.1.10 (2014-04-21)
--------------------
- [COOK-4565] Support for Ubuntu 14.04
- [COOK-4565] Adding Specs and TK platform
- Removing non-LTS 13.10 specs and TK platform
v5.1.8 (2014-04-12)
-------------------
Adding Ubuntu 13.04 to Platforminfo
v5.1.6 (2014-04-11)
-------------------
- [COOK-4548] - Add template[/etc/mysql/debian.cnf] to Ubuntu provider
v5.1.4 (2014-04-11)
-------------------
- [COOK-4547] - Shellescape server_root_password
v5.1.2 (2014-04-09)
-------------------
- [COOK-4519] - Fix error in run_dir for Ubuntu
- [COOK-4531] - Fix pid and run_dir for Debian
v5.1.0 (2014-04-08)
-------------------
[COOK-4523] - Allow for both :restart and :reload
v5.0.6 (2014-04-07)
-------------------
- [COOK-4519] - Updating specs to reflect pid file change on Ubuntu
v5.0.4 (2014-04-07)
-------------------
- [COOK-4519] - Fix path to pid file on Ubuntu
v5.0.2 (2014-04-01)
-------------------
- Moving server_deprecated into recipes directory
v5.0.0 (2014-03-31)
-------------------
- Rewriting as a library cookbook
- Exposing mysql_service and mysql_client resources
- User now needs to supply configuration
- Moving attribute driven recipe to server-deprecated
v4.1.2 (2014-02-28)
-------------------
- [COOK-4349] - Fix invalid platform check
- [COOK-4184] - Better handling of Ubuntu upstart service
- [COOK-2100] - Changing innodb_log_file_size tunable results in inability to start MySQL
v4.1.1 (2014-02-25)
-------------------
- **[COOK-2966] - Address foodcritic failures'
- **[COOK-4182] - Template parse failure in /etc/init/mysql.conf (data_dir)'
- **[COOK-4198] - Added missing tunable'
- **[COOK-4206] - create root@127.0.0.1, as well as root@localhost'
v4.0.20 (2014-01-18)
--------------------
* [COOK-3931] - MySQL Server Recipe Regression for Non-LTS Ubuntu Versions
* [COOK-3945] - MySQL cookbook fails on Ubuntu 13.04/13.10
* [COOK-3966] - mysql::server recipe can't find a template with debian 7.x
* [COOK-3985] - Missing /etc/mysql/debian.cnf template on mysql::_server_debian.rb recipe (mysql 4.0.4)
* [COOK-3974] - debian.cnf not updated
* [COOK-4001] - Pull request: Fixes for broken mysql::server on Debian
* [COOK-4071] - Mysql cookbook doesn't work on debian 7.2
v4.0.14
-------
Fixing style cops
v4.0.12
-------
### Bug
- **[COOK-4068](https://tickets.opscode.com/browse/COOK-4068)** - rework MySQL Windows recipe
### Improvement
- **[COOK-3801](https://tickets.opscode.com/browse/COOK-3801)** - Add innodb_adaptive_flushing_method and innodb_adaptive_checkpoint
v4.0.10
-------
fixing metadata version error. locking to 3.0
v4.0.8
------
Locking yum dependency to '< 3'
v4.0.6
------
# Bug
- [COOK-3943] Notifying service restart on grants update
v4.0.4
------
[COOK-3952] - Adding 'recursive true' to directory resources
v4.0.2
------
### BUGS
- Adding support for Amazon Linux in attributes/server_rhel.rb
- Fixing bug where unprivileged users cannot connect over a local socket. Adding integration test.
- Fixing bug in mysql_grants_cmd generation
v4.0.0
------
- [COOK-3928] Heavily refactoring for readability. Moving platform implementation into separate recipes
- Moving integration tests from minitest to serverspec, removing "improper" tests
- Moving many attributes into the ['mysql']['server']['whatever'] namespace
- [COOK-3481] - Merged Lucas Welsh's Windows bits and moved into own recipe
- [COOK-3697] - Adding security hardening attributes
- [COOK-3780] - Fixing data_dir on Debian and Ubuntu
- [COOK-3807] - Don't use execute[assign-root-password] on Debian and Ubuntu
- [COOK-3881] - Fixing /etc being owned by mysql user
v3.0.12
-------
### Bug
- **[COOK-3752](https://tickets.opscode.com/browse/COOK-3752)** - mysql service fails to start in mysql::server recipe
v3.0.10
-------
- Fix a failed release attempt for v3.0.8
v3.0.8
------
### Bug
- **[COOK-3749](https://tickets.opscode.com/browse/COOK-3749)** - Fix a regression with Chef 11-specific features
v3.0.6
------
### Bug
- **[COOK-3674](https://tickets.opscode.com/browse/COOK-3674)** - Fix an issue where the MySQL server fails to set the root password correctly when `data_dir` is a non-default value
- **[COOK-3647](https://tickets.opscode.com/browse/COOK-3647)** - Fix README typo (databas => database)
- **[COOK-3477](https://tickets.opscode.com/browse/COOK-3477)** - Fix log-queries-not-using-indexes not working
- **[COOK-3436](https://tickets.opscode.com/browse/COOK-3436)** - Pull percona repo in compilation phase
- **[COOK-3208](https://tickets.opscode.com/browse/COOK-3208)** - Fix README typo (LitenPort => ListenPort)
- **[COOK-3149](https://tickets.opscode.com/browse/COOK-3149)** - Create my.cnf before installing
- **[COOK-2681](https://tickets.opscode.com/browse/COOK-2681)** - Fix log_slow_queries for 5.5+
- **[COOK-2606](https://tickets.opscode.com/browse/COOK-2606)** - Use proper bind address on cloud providers
### Improvement
- **[COOK-3498](https://tickets.opscode.com/browse/COOK-3498)** - Add support for replicate_* variables in my.cnf
v3.0.4
------
### Bug
- **[COOK-3310](https://tickets.opscode.com/browse/COOK-3310)** - Fix missing `GRANT` option
- **[COOK-3233](https://tickets.opscode.com/browse/COOK-3233)** - Fix escaping special characters
- **[COOK-3156](https://tickets.opscode.com/browse/COOK-3156)** - Fix GRANTS file when `remote_root_acl` is specified
- **[COOK-3134](https://tickets.opscode.com/browse/COOK-3134)** - Fix Chef 11 support
- **[COOK-2318](https://tickets.opscode.com/browse/COOK-2318)** - Remove redundant `if` block around `node.mysql.tunable.log_bin`
v3.0.2
------
### Bug
- [COOK-2158]: apt-get update is run twice at compile time
- [COOK-2832]: mysql grants.sql file has errors depending on attrs
- [COOK-2995]: server.rb is missing a platform_family comparison value
### Sub-task
- [COOK-2102]: `innodb_flush_log_at_trx_commit` value is incorrectly set based on CPU count
v3.0.0
------
**Note** This is a backwards incompatible version with previous versions of the cookbook. Tickets that introduce incompatibility are COOK-2615 and COOK-2617.
- [COOK-2478] - Duplicate 'read_only' server attribute in base and tunable
- [COOK-2471] - Add tunable to set slave_compressed_protocol for reduced network traffic
- [COOK-1059] - Update attributes in mysql cookbook to support missing options for my.cnf usable by Percona
- [COOK-2590] - Typo in server recipe to do with conf_dir and confd_dir
- [COOK-2602] - Add `lower_case_table_names` tunable
- [COOK-2430] - Add a tunable to create a network ACL when allowing `remote_root_access`
- [COOK-2619] - mysql: isamchk deprecated
- [COOK-2515] - Better support for SUSE distribution for mysql cookbook
- [COOK-2557] - mysql::percona_repo attributes missing and key server typo
- [COOK-2614] - Duplicate `innodb_file_per_table`
- [COOK-2145] - MySQL cookbook should remove anonymous and password less accounts
- [COOK-2553] - Enable include directory in my.cnf template for any platform
- [COOK-2615] - Rename `key_buffer` to `key_buffer_size`
- [COOK-2626] - Percona repo URL is being constructed incorrectly
- [COOK-2616] - Unneeded attribute thread_cache
- [COOK-2618] - myisam-recover not using attribute value
- [COOK-2617] - open-files is a duplicate of open-files-limit
v2.1.2
------
- [COOK-2172] - Mysql cookbook duplicates `binlog_format` configuration
v2.1.0
------
- [COOK-1669] - Using platform("ubuntu") in default attributes always returns true
- [COOK-1694] - Added additional my.cnf fields and reorganized cookbook to avoid race conditions with mysql startup and sql script execution
- [COOK-1851] - Support server-id and binlog_format settings
- [COOK-1929] - Update msyql server attributes file because setting attributes without specifying a precedence is deprecated
- [COOK-1999] - Add read_only tunable useful for replication slave servers
v2.0.2
------
- [COOK-1967] - mysql: trailing comma in server.rb platform family
v2.0.0
------
**Important note for this release**
Under Chef Solo, you must set the node attributes for the root, debian and repl passwords or the run will completely fail. See COOK-1737 for background on this.
- [COOK-1390] - MySQL service cannot start after reboot
- [COOK-1610] - Set root password outside preseed (blocker for drop-in mysql replacements)
- [COOK-1624] - Mysql cookbook fails to even compile on windows
- [COOK-1669] - Using platform("ubuntu") in default attributes always returns true
- [COOK-1686] - Add mysql service start
- [COOK-1687] - duplicate `innodb_buffer_pool_size` attribute
- [COOK-1704] - mysql cookbook fails spec tests when minitest-handler cookbook enabled
- [COOK-1737] - Fail a chef-solo run when `server_root_password`, `server_debian_password`, and/or `server_repl_password` is not set
- [COOK-1769] - link to database recipe in mysql README goes to old opscode/cookbooks repo instead of opscode-cookbook organization
- [COOK-1963] - use `platform_family`
v1.3.0
------
**Important note for this release**
This version no longer installs Ruby bindings in the client recipe by default. Use the ruby recipe if you'd like the RubyGem. If you'd like packages from your distribution, use them in your application's specific cookbook/recipe, or modify the client packages attribute. This resolves the following tickets:
- COOK-932
- COOK-1009
- COOK-1384
Additionally, this cookbook now has tests (COOK-1439) for use under test-kitchen.
The following issues are also addressed in this release.
- [COOK-1443] - MySQL (>= 5.1.24) does not support `innodb_flush_method` = fdatasync
- [COOK-1175] - Add Mac OS X support
- [COOK-1289] - handle additional tunable attributes
- [COOK-1305] - add auto-increment-increment and auto-increment-offset attributes
- [COOK-1397] - make the port an attribute
- [COOK-1439] - Add MySQL cookbook tests for test-kitchen support
- [COOK-1236] - Move package names into attributes to allow percona to free-ride
- [COOK-934] - remove deprecated mysql/libraries/database.rb, use the database cookbook instead.
- [COOK-1475] - fix restart on config change
v1.2.6
------
- [COOK-1113] - Use an attribute to determine if upstart is used
- [COOK-1121] - Add support for Windows
- [COOK-1140] - Fix conf.d on Debian
- [COOK-1151] - Fix server_ec2 handling /var/lib/mysql bind mount
- [COOK-1321] - Document setting password attributes for solo
v1.2.4
------
- [COOK-992] - fix FATAL nameerror
- [COOK-827] - `mysql:server_ec2` recipe can't mount `data_dir`
- [COOK-945] - FreeBSD support
v1.2.2
------
- [COOK-826] mysql::server recipe doesn't quote password string
- [COOK-834] Add 'scientific' and 'amazon' platforms to mysql cookbook
v1.2.1
------
- [COOK-644] Mysql client cookbook 'package missing' error message is confusing
- [COOK-645] RHEL6/CentOS6 - mysql cookbook contains 'skip-federated' directive which is unsupported on MySQL 5.1
v1.2.0
------
- [COOK-684] remove mysql_database LWRP
v1.0.8
------
- [COOK-633] ensure "cloud" attribute is available
v1.0.7
------
- [COOK-614] expose all mysql tunable settings in config
- [COOK-617] bind to private IP if available
v1.0.6
------
- [COOK-605] install mysql-client package on ubuntu/debian
v1.0.5
------
- [COOK-465] allow optional remote root connections to mysql
- [COOK-455] improve platform version handling
- externalize conf_dir attribute for easier cross platform support
- change datadir attribute to data_dir for consistency
v1.0.4
------
- fix regressions on debian platform
- [COOK-578] wrap root password in quotes
- [COOK-562] expose all tunables in my.cnf

View File

@ -0,0 +1,215 @@
MySQL cookbook
=====================
The MySQL cookbook exposes the `mysql_service` and `mysql_client`
resources. These resources are utilized by the `mysql::client`
and `mysql::server` recipes, or can be consumed in other recipes by
depending on the MySQL cookbook.
This cookbook does its best to follow platform native idioms at all
times. This means things like logs, pid files, sockets, and service
managers work "as expected" by an administrator familiar with a given
platform.
Scope
-----
This cookbook is concerned with the "MySQL Community Server",
particularly those shipped with F/OSS Unix and Linux distributions. It
does not address forks and value-added repackaged MySQL distributions
like Drizzle, MariaDB, or Percona.
This cookbook does not try to encompass every single configuration
option available for MySQL. Instead, it provides a "just enough" to
get a MySQL server running, then allows the user to specify additional
custom configuration.
Requirements
------------
* Chef 11 or higher
* Ruby 1.9 (preferably from the Chef full-stack installer)
Resources
---------------------
The resources that ship in this cookbook are examples of 'singleton
resources'. This means that there can only be one instance of them
configured on a machine. The providers that handle the implementation
of the `mysql_service` and `mysql_client` resources do so by following
platform native idioms. These usually only allow for one instance of a
service to be running at a given time.
### mysql_service
The `mysql_service` resource configures the basic plumbing
needed to run a simple mysql_service with a minimal configuration.
Please note that when using `notifies` or `subscribes`, the resource
is `mysql_service`. This means that this cookbook does _not_ setup
`service[mysql]`.
### Example
mysql_service 'default' do
version '5.1'
port '3307'
data_dir '/data'
template_source 'custom.erb'
allow_remote_root true
root_network_acl ['10.9.8.7/6', '1.2.3.4/5']
remove_anonymous_users false
remove_test_database false
server_root_password 'decrypt_me_from_a_databag_maybe'
server_repl_password 'sync_me_baby_one_more_time'
action :create
end
The `version` parameter will allow the user to select from the
versions available for the platform, where applicable. When omitted,
it will install the default MySQL version for the target platform.
Available version numbers are `5.0`, `5.1`, `5.5`, and `5.6`,
depending on platform. See PLATFORMS.md for details.
The `port` parameter determines the listen port for the mysqld
service. When omitted, it will default to '3306'.
The `data_dir` parameter determines where the actual data files are
kept on the machine. This is useful when mounting external storage.
When omitted, it will default to the platform's native location.
The `template_source` parameter allows the user to override the
default minimal template used by the `mysql_service` resource. When
omitted, it will select one shipped with the cookbook based on the
MySQL version.
The `allow_remote_root` parameter allows the user to specify whether
remote connections from the mysql root user. When set to true, it is
recommended that it be used in combination with the `root_network_acl`
parameter. When omitted, it will default to false.
The `remove_anonymous_users` parameter allows the user to remove
anonymous users often installed by default with during the mysql db
initialization. When omitted, it defaults to true.
The `remove_test_database` parameter allows the user to specify
whether or not the test database is removed. When omitted, it defaults
to true.
The `root_network_acl` parameter allows the user to specify a list of
subnets to accept connections for the root user from. When omitted, it
defaults to none.
The `server_root_password` parameter allows the user to specify the
root password for the mysql database. This can be set explicitly in a
recipe, driven from a node attribute, or from data_bags. When omitted,
it defaults to `ilikerandompasswords`. Please be sure to change it.
The `server_debian_password` parameter allows the user to specify the
debian-sys-maint users password, used in log rotations and service
management on Debian and Debian derived platforms.
The `server_repl_password` parameter allows the user to specify the
password used by `'repl'@'%'`, used in clustering scenarios. When
omitted, it does not create the repl user or set a password.
The mysql_service resource supports :create, :restart, and :reload actions.
### mysql_client
The `mysql_client` resource installs or removes the MySQL client binaries and
development libraries
Recipes
-------
### mysql::server
This recipe calls a `mysql_service` resource, passing parameters
from node attributes.
### mysql::client
This recipe calls a `mysql_client` resource, with action :create
Usage
-----
The `mysql::server` recipe and `mysql_service` resources are designed to
provide a minimal configuration. The default `my.cnf` dropped off has
an `!includedir` directive. Site-specific configuration should be
placed in the platform's native location.
### run_list
Include `'recipe[mysql::server]'` or `'recipe[mysql::client]'` in your run_list.
### Wrapper cookbook
node.set['mysql']['server_root_password'] = 'yolo'
node.set['mysql']['port'] = '3308'
node.set['mysql']['data_dir'] = '/data'
include_recipe 'mysql::server'
template '/etc/mysql/conf.d/mysite.cnf' do
owner 'mysql'
owner 'mysql'
source 'mysite.cnf.erb'
notifies :restart, 'mysql_service[default]'
end
### Used directly in a recipe
template '/etc/mysql/conf.d/mysite.cnf' do
owner 'mysql'
owner 'mysql'
source 'mysite.cnf.erb'
notifies :restart, 'mysql_service[default]'
end
mysql_service 'default' do
version '5.5'
port '3307'
data_dir '/data'
template_source 'custom.erb'
action :create
end
Attributes
----------
default['mysql']['service_name'] = 'default'
default['mysql']['server_root_password'] = 'ilikerandompasswords'
default['mysql']['server_debian_password'] = 'postinstallscriptsarestupid'
default['mysql']['data_dir'] = '/var/lib/mysql'
default['mysql']['port'] = '3306'
### used in grants.sql
default['mysql']['allow_remote_root'] = false
default['mysql']['remove_anonymous_users'] = true
default['mysql']['root_network_acl'] = nil
License & Authors
-----------------
- Author:: Joshua Timberman (<joshua@opscode.com>)
- Author:: AJ Christensen (<aj@opscode.com>)
- Author:: Seth Chisamore (<schisamo@opscode.com>)
- Author:: Brian Bianco (<brian.bianco@gmail.com>)
- Author:: Jesse Howarth (<him@jessehowarth.com>)
- Author:: Andrew Crump (<andrew@kotirisoftware.com>)
- Author:: Christoph Hartmann (<chris@lollyrock.com>)
- Author:: Sean OMeara (<someara@opscode.com>)
```text
Copyright:: 2009-2014 Chef Software, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
=)

View File

@ -0,0 +1,26 @@
#
default['mysql']['service_name'] = 'default'
# passwords
default['mysql']['server_root_password'] = 'ilikerandompasswords'
default['mysql']['server_debian_password'] = nil
default['mysql']['server_repl_password'] = nil
# used in grants.sql
default['mysql']['allow_remote_root'] = false
default['mysql']['remove_anonymous_users'] = true
default['mysql']['root_network_acl'] = nil
case node['platform']
when 'smartos'
default['mysql']['data_dir'] = '/opt/local/lib/mysql'
else
default['mysql']['data_dir'] = '/var/lib/mysql'
end
# port
default['mysql']['port'] = '3306'
# server package version and action
default['mysql']['server_package_version'] = nil
default['mysql']['server_package_action'] = 'install'

View File

@ -0,0 +1,201 @@
module Opscode
module Mysql
module Helpers
def package_name_for(platform, platform_family, platform_version, version)
keyname = keyname_for(platform, platform_family, platform_version)
PlatformInfo.mysql_info[platform_family][keyname][version]['package_name']
rescue NoMethodError
nil
end
def keyname_for(platform, platform_family, platform_version)
case
when platform_family == 'rhel'
platform == 'amazon' ? platform_version : platform_version.to_i.to_s
when platform_family == 'suse'
platform_version
when platform_family == 'fedora'
platform_version
when platform_family == 'debian'
if platform == 'ubuntu'
platform_version
elsif platform_version =~ /sid$/
platform_version
else
platform_version.to_i.to_s
end
when platform_family == 'smartos'
platform_version
when platform_family == 'omnios'
platform_version
when platform_family == 'freebsd'
platform_version.to_i.to_s
end
rescue NoMethodError
nil
end
end
class PlatformInfo
def self.mysql_info
@mysql_info ||= {
'rhel' => {
'5' => {
'5.0' => {
'package_name' => 'mysql-server'
},
'5.1' => {
'package_name' => 'mysql51-mysql-server'
},
'5.5' => {
'package_name' => 'mysql55-mysql-server'
}
},
'6' => {
'5.1' => {
'package_name' => 'mysql-server'
},
'5.5' => {
'package_name' => 'mysql-community-server'
},
'5.6' => {
'package_name' => 'mysql-community-server'
}
},
'7' => {
'5.5' => {
'package_name' => 'mysql-community-server'
},
'5.6' => {
'package_name' => 'mysql-community-server'
}
},
'2013.03' => {
'5.5' => {
'package_name' => 'mysql-server'
}
},
'2013.09' => {
'5.1' => {
'package_name' => 'mysql-server'
},
'5.5' => {
'package_name' => 'mysql-community-server'
},
'5.6' => {
'package_name' => 'mysql-community-server'
}
},
'2014.03' => {
'5.1' => {
'package_name' => 'mysql51-server'
},
'5.5' => {
'package_name' => 'mysql-community-server'
},
'5.6' => {
'package_name' => 'mysql-community-server'
}
}
},
'fedora' => {
'19' => {
'5.5' => {
'package_name' => 'community-mysql-server'
}
},
'20' => {
'5.5' => {
'package_name' => 'community-mysql-server'
}
}
},
'suse' => {
'11.3' => {
'5.5' => {
'package_name' => 'mysql'
}
}
},
'debian' => {
'6' => {
'5.1' => {
'package_name' => 'mysql-server-5.1'
}
},
'7' => {
'5.5' => {
'package_name' => 'mysql-server-5.5'
}
},
'jessie/sid' => {
'5.5' => {
'package_name' => 'mysql-server-5.5'
}
},
'10.04' => {
'5.1' => {
'package_name' => 'mysql-server-5.1'
}
},
'12.04' => {
'5.5' => {
'package_name' => 'mysql-server-5.5'
}
},
'13.04' => {
'5.5' => {
'package_name' => 'mysql-server-5.5'
}
},
'13.10' => {
'5.5' => {
'package_name' => 'mysql-server-5.5'
}
},
'14.04' => {
'5.5' => {
'package_name' => 'mysql-server-5.5'
},
'5.6' => {
'package_name' => 'mysql-server-5.6'
}
}
},
'smartos' => {
'5.11' => {
'5.5' => {
'package_name' => 'mysql-server'
},
'5.6' => {
'package_name' => 'mysql-server'
}
}
},
'omnios' => {
'151006' => {
'5.5' => {
'package_name' => 'database/mysql-55'
},
'5.6' => {
'package_name' => 'database/mysql-56'
}
}
},
'freebsd' => {
'9' => {
'5.5' => {
'package_name' => 'mysql55-server'
}
},
'10' => {
'5.5' => {
'package_name' => 'mysql55-server'
}
}
}
}
end
end
end
end

View File

@ -0,0 +1,41 @@
module MysqlCookbook
module Helpers
module Debian
def include_dir
include_dir = '/etc/mysql/conf.d'
include_dir
end
def pid_file
pid_file = '/var/run/mysqld/mysql.pid'
pid_file
end
def prefix_dir
prefix_dir = '/usr'
prefix_dir
end
def run_dir
run_dir = '/var/run/mysqld'
run_dir
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
def socket_file
socket_file = '/var/run/mysqld/mysqld.sock'
socket_file
end
end
end
end

View File

@ -0,0 +1,46 @@
module MysqlCookbook
module Helpers
module Fedora
def include_dir
include_dir = '/etc/my.cnf.d'
include_dir
end
def lc_messages_dir
lc_messages_dir = nil
lc_messages_dir
end
def pid_file
pid_file = '/var/run/mysqld/mysqld.pid'
pid_file
end
def prefix_dir
prefix_dir = '/usr'
prefix_dir
end
def run_dir
run_dir = '/var/run/mysqld'
run_dir
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
def socket_file
socket_file = '/var/lib/mysql/mysql.sock'
socket_file
end
end
end
end

View File

@ -0,0 +1,56 @@
module MysqlCookbook
module Helpers
module FreeBSD
def base_dir
base_dir = '/usr/local'
base_dir
end
def include_dir
include_dir = '/usr/local/etc/mysql/conf.d'
include_dir
end
def my_cnf
my_cnf = '/usr/local/etc/my.cnf'
my_cnf
end
def pid_file
pid_file = '/var/db/mysql/mysqld.pid'
pid_file
end
def prefix_dir
prefix_dir = '/usr/local'
prefix_dir
end
def rc_name
rc_name = 'mysql-server'
rc_name
end
def run_dir
run_dir = '/var/run/mysqld'
run_dir
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
def socket_file
socket_file = '/tmp/mysqld.sock'
socket_file
end
end
end
end

View File

@ -0,0 +1,61 @@
module MysqlCookbook
module Helpers
module OmniOS
def base_dir
base_dir = "/opt/mysql#{pkg_ver_string}"
base_dir
end
def include_dir
include_dir = "/opt/mysql#{pkg_ver_string}/etc/mysql/conf.d"
include_dir
end
def my_cnf
case new_resource.parsed_version
when '5.5'
my_cnf = "#{base_dir}/etc/my.cnf"
when '5.6'
my_cnf = "#{base_dir}/my.cnf"
end
my_cnf
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
def pid_file
pid_file = '/var/run/mysql/mysql.pid'
pid_file
end
def pkg_ver_string
pkg_ver_string = new_resource.parsed_version.gsub('.', '')
pkg_ver_string
end
def prefix_dir
prefix_dir = "/opt/mysql#{pkg_ver_string}"
prefix_dir
end
def run_dir
run_dir = '/var/run/mysql'
run_dir
end
def socket_file
socket_file = '/tmp/mysql.sock'
socket_file
end
end
end
end

View File

@ -0,0 +1,116 @@
module MysqlCookbook
module Helpers
module Rhel
def base_dir
case node['platform_version'].to_i
when 5
case new_resource.parsed_version
when '5.0'
base_dir = ''
when '5.1'
base_dir = '/opt/rh/mysql51/root'
when '5.5'
base_dir = '/opt/rh/mysql55/root'
end
end
base_dir
end
def include_dir
case node['platform_version'].to_i
when 2014, 2013, 7, 6
include_dir = '/etc/mysql/conf.d'
when 5
include_dir = "#{base_dir}/etc/mysql/conf.d"
end
include_dir
end
def prefix_dir
case node['platform_version'].to_i
when 2014, 2013, 7, 6
prefix_dir = '/usr'
when 5
case new_resource.parsed_version
when '5.0'
prefix_dir = '/usr'
when '5.1'
prefix_dir = '/opt/rh/mysql51/root/usr'
when '5.5'
prefix_dir = '/opt/rh/mysql55/root/usr'
end
end
prefix_dir
end
def lc_messages_dir
case node['platform_version'].to_i
when 2014, 2013, 7, 6, 5
lc_messages_dir = nil
end
lc_messages_dir
end
def run_dir
case node['platform_version'].to_i
when 2014, 2013, 7, 6
run_dir = '/var/run/mysqld'
when 5
case new_resource.parsed_version
when '5.0'
run_dir = '/var/run/mysqld'
when '5.1'
run_dir = '/opt/rh/mysql51/root/var/run/mysqld/'
when '5.5'
run_dir = '/opt/rh/mysql55/root/var/run/mysqld/'
end
end
run_dir
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
def pid_file
case node['platform_version'].to_i
when 2014, 2013, 7, 6, 5
pid_file = '/var/run/mysqld/mysql.pid'
end
pid_file
end
def socket_file
case node['platform_version'].to_i
when 2014, 2013, 7, 6, 5
socket_file = '/var/lib/mysql/mysql.sock'
end
socket_file
end
def service_name
case node['platform_version'].to_i
when 2014, 2013, 7, 6
service_name = 'mysqld'
when 5
case new_resource.parsed_version
when '5.0'
service_name = 'mysqld'
when '5.1'
service_name = 'mysql51-mysqld'
when '5.5'
service_name = 'mysql55-mysqld'
end
end
service_name
end
end
end
end

View File

@ -0,0 +1,41 @@
module MysqlCookbook
module Helpers
module SmartOS
def include_dir
include_dir = "#{prefix_dir}/etc/mysql/conf.d"
include_dir
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open("#{prefix_dir}/etc/.mysql_root").read.chomp if ::File.exist?("#{prefix_dir}/etc/.mysql_root")
pass_string
end
def pid_file
pid_file = '/var/mysql/mysql.pid'
pid_file
end
def prefix_dir
prefix_dir = '/opt/local'
prefix_dir
end
def run_dir
run_dir = '/var/run/mysql'
run_dir
end
def socket_file
socket_file = '/tmp/mysql.sock'
socket_file
end
end
end
end

View File

@ -0,0 +1,16 @@
module MysqlCookbook
module Helpers
module Suse
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
end
end
end

View File

@ -0,0 +1,41 @@
module MysqlCookbook
module Helpers
module Ubuntu
def include_dir
include_dir = '/etc/mysql/conf.d'
include_dir
end
def pid_file
pid_file = '/var/run/mysqld/mysql.pid'
pid_file
end
def prefix_dir
prefix_dir = '/usr'
prefix_dir
end
def run_dir
run_dir = '/var/run/mysqld'
run_dir
end
def pass_string
if new_resource.parsed_server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
end
pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
pass_string
end
def socket_file
socket_file = '/var/run/mysqld/mysqld.sock'
socket_file
end
end
end
end

View File

@ -0,0 +1,17 @@
if defined?(ChefSpec)
def create_mysql_client(resource_name)
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client, :create, resource_name)
end
def delete_mysql_client(resource_name)
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client, :delete, resource_name)
end
def create_mysql_service(resource_name)
ChefSpec::Matchers::ResourceMatcher.new(:mysql_service, :create, resource_name)
end
def enable_mysql_service(resource_name)
ChefSpec::Matchers::ResourceMatcher.new(:mysql_service, :enable, resource_name)
end
end

View File

@ -0,0 +1,31 @@
class Chef
class Provider
class MysqlClient < Chef::Provider::LWRPBase
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
action :create do
packages.each do |p|
package p do
action :install
end
end
end
action :delete do
packages.each do |p|
package p do
action :remove
end
end
end
def packages
%w()
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Debian < Chef::Provider::MysqlClient
def packages
%w(mysql-client libmysqlclient-dev)
end
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Fedora < Chef::Provider::MysqlClient
def packages
%w(community-mysql community-mysql-devel)
end
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class FreeBSD < Chef::Provider::MysqlClient
def packages
%w(mysql55-client)
end
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Omnios < Chef::Provider::MysqlClient
def packages
%w(database/mysql-55 database/mysql-55/library)
end
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Rhel < Chef::Provider::MysqlClient
def packages
%w(mysql mysql-devel)
end
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Smartos < Chef::Provider::MysqlClient
def packages
%w(mysql-client)
end
end
end
end
end

View File

@ -0,0 +1,35 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Suse < Chef::Provider::MysqlClient
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
action :create do
converge_by 'suse pattern' do
%w(mysql-client libmysqlclient-devel).each do |p|
package p do
action :install
end
end
end
end
action :delete do
converge_by 'suse pattern' do
%w(mysql-client libmysqlclient-devel).each do |p|
package p do
action :remove
end
end
end
end
end
end
end
end

View File

@ -0,0 +1,13 @@
require 'chef/provider/lwrp_base'
class Chef
class Provider
class MysqlClient
class Ubuntu < Chef::Provider::MysqlClient
def packages
%w(mysql-client-5.5 libmysqlclient-dev)
end
end
end
end
end

View File

@ -0,0 +1,8 @@
class Chef
class Provider
class MysqlService < Chef::Provider::LWRPBase
def action_create
end
end
end
end

View File

@ -0,0 +1,184 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_debian'
class Chef
class Provider
class MysqlService
class Debian < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::Debian
action :create do
package 'debconf-utils' do
action :install
end
directory '/var/cache/local/preseeding' do
owner 'root'
group 'root'
mode '0755'
action :create
recursive true
end
template '/var/cache/local/preseeding/mysql-server.seed' do
cookbook 'mysql'
source 'debian/mysql-server.seed.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[preseed mysql-server]', :immediately
end
execute 'preseed mysql-server' do
command '/usr/bin/debconf-set-selections /var/cache/local/preseeding/mysql-server.seed'
action :nothing
end
# package automatically initializes database and starts service.
# ... because that's totally super convenient.
package new_resource.parsed_package_name do
action :install
end
# service
service 'mysql' do
provider Chef::Provider::Service::Init::Debian
supports :restart => true
action [:start, :enable]
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
action :nothing
notifies :run, 'execute[create root marker]'
end
template '/etc/mysql/debian.cnf' do
cookbook 'mysql'
source 'debian/debian.cnf.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
end
#
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
action :create
recursive true
end
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
template '/etc/mysql/my.cnf' do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file,
:socket_file => socket_file,
:port => new_resource.parsed_port,
:include_dir => include_dir
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, 'service[mysql]'
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
service mysql stop \
&& mv /var/lib/mysql/* #{new_resource.parsed_data_dir}
EOH
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
action :nothing
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
end
action :restart do
service 'mysql' do
provider Chef::Provider::Service::Init::Debian
supports :restart => true
action :restart
end
end
action :reload do
service 'mysql' do
provider Chef::Provider::Service::Init::Debian
action :reload
end
end
end
end
end

View File

@ -0,0 +1,148 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_fedora'
class Chef
class Provider
class MysqlService
class Fedora < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::Fedora
action :create do
package new_resource.parsed_package_name do
action new_resource.parsed_package_action
version new_resource.parsed_package_version
end
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
action :create
recursive true
end
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0755'
action :create
recursive true
end
service 'mysqld' do
supports :restart => true
action [:start, :enable]
end
execute 'wait for mysql' do
command "until [ -S #{socket_file} ] ; do sleep 1 ; done"
timeout 10
action :run
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
action :nothing
notifies :run, 'execute[create root marker]'
end
template '/etc/my.cnf' do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:data_dir => new_resource.parsed_data_dir,
:include_dir => include_dir,
:lc_messages_dir => lc_messages_dir,
:pid_file => pid_file,
:port => new_resource.parsed_port,
:prefix_dir => prefix_dir,
:socket_file => socket_file
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, 'service[mysqld]'
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
service mysqld stop \
&& for i in `ls /var/lib/mysql | grep -v mysql.sock` ; do mv /var/lib/mysql/$i #{new_resource.parsed_data_dir} ; done
EOH
action :nothing
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
end
action :restart do
service 'mysqld' do
supports :restart => true
action :restart
end
end
action :reload do
service 'mysqld' do
action :reload
end
end
end
end
end

View File

@ -0,0 +1,134 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_debian'
include Opscode::Mysql::Helpers
class Chef
class Provider
class MysqlService
class FreeBSD < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::FreeBSD
action :create do
package new_resource.parsed_package_name do
action :install
end
[include_dir, new_resource.parsed_data_dir].each do |dir|
directory dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
end
template my_cnf do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:base_dir => base_dir,
:include_dir => include_dir,
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file,
:socket_file => socket_file,
:port => new_resource.parsed_port,
:lc_messages_dir => "#{base_dir}/share/mysql"
)
action :create
notifies :restart, 'service[mysql]'
end
execute 'initialize mysql database' do
cwd new_resource.parsed_data_dir
command "#{prefix_dir}/bin/mysql_install_db --basedir=#{base_dir} --user=mysql"
creates "#{new_resource.parsed_data_dir}/mysql/user.frm"
end
service 'mysql' do
service_name rc_name
supports :status => true, :restart => true, :reload => false
action [:start, :enable]
end
execute 'wait for mysql' do
command "while [ ! -S #{socket_file} ] ; do sleep 1 ; done"
timeout 10
action :run
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group node['root_group']
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
retries 5
retry_delay 2
action :nothing
notifies :run, 'execute[create root marker]'
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
end
action :restart do
service 'mysql' do
service_name rc_name
supports :restart => true
action :restart
end
end
action :reload do
service 'mysql' do
service_name rc_name
supports :reload => true
action :reload
end
end
end
end
end

View File

@ -0,0 +1,213 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_omnios'
include Opscode::Mysql::Helpers
class Chef
class Provider
class MysqlService
class Omnios < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::OmniOS
action :create do
package new_resource.parsed_package_name do
action :install
end
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
action :create
recursive true
end
# data_dir
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory "#{new_resource.parsed_data_dir}/data" do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory "#{new_resource.parsed_data_dir}/data/mysql" do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory "#{new_resource.parsed_data_dir}/data/test" do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
template my_cnf do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:base_dir => base_dir,
:include_dir => include_dir,
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file,
:socket_file => socket_file,
:port => new_resource.parsed_port,
:lc_messages_dir => "#{base_dir}/share"
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, 'service[mysql]'
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
/usr/sbin/svcadm disable mysql \
&& mv /var/mysql/* #{new_resource.parsed_data_dir}
EOH
action :nothing
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
end
execute 'initialize mysql database' do
cwd new_resource.parsed_data_dir
command "#{prefix_dir}/scripts/mysql_install_db --basedir=#{base_dir} --user=mysql"
creates "#{new_resource.parsed_data_dir}/mysql/user.frm"
end
template '/lib/svc/method/mysqld' do
cookbook 'mysql'
source 'omnios/svc.method.mysqld.erb'
cookbook 'mysql'
owner 'root'
group 'root'
mode '0555'
variables(
:base_dir => base_dir,
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file
)
action :create
end
template '/tmp/mysql.xml' do
cookbook 'mysql'
source 'omnios/mysql.xml.erb'
owner 'root'
mode '0644'
variables(:version => new_resource.parsed_version)
action :create
notifies :run, 'execute[import mysql manifest]', :immediately
end
execute 'import mysql manifest' do
command 'svccfg import /tmp/mysql.xml'
action :nothing
end
service 'mysql' do
supports :restart => true
action [:start, :enable]
end
execute 'wait for mysql' do
command "until [ -S #{socket_file} ] ; do sleep 1 ; done"
timeout 10
action :run
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
retries 5
retry_delay 2
action :nothing
notifies :run, 'execute[create root marker]'
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
action :restart do
service 'mysql' do
supports :restart => true
action :restart
end
end
action :reload do
service 'mysql' do
supports :reload => true
action :reload
end
end
end
end
end
end

View File

@ -0,0 +1,162 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_rhel'
class Chef
class Provider
class MysqlService
class Rhel < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::Rhel
action :create do
# we need to enable the yum-mysql-community repository to get packages
unless node['platform_version'].to_i == 5
case new_resource.parsed_version
when '5.5'
recipe_eval do
run_context.include_recipe 'yum-mysql-community::mysql55'
end
when '5.6'
recipe_eval do
run_context.include_recipe 'yum-mysql-community::mysql56'
end
end
end
package new_resource.parsed_package_name do
action new_resource.parsed_package_action
version new_resource.parsed_package_version
end
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
recursive true
action :create
end
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0755'
recursive true
action :create
end
service service_name do
supports :restart => true
action [:start, :enable]
end
execute 'wait for mysql' do
command "until [ -S #{socket_file} ] ; do sleep 1 ; done"
timeout 10
action :run
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
action :nothing
notifies :run, 'execute[create root marker]'
end
template "#{base_dir}/etc/my.cnf" do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:base_dir => base_dir,
:data_dir => new_resource.parsed_data_dir,
:include_dir => include_dir,
:lc_messages_dir => lc_messages_dir,
:pid_file => pid_file,
:port => new_resource.parsed_port,
:socket_file => socket_file
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, "service[#{service_name}]"
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
service #{service_name} stop \
&& for i in `ls #{base_dir}/var/lib/mysql | grep -v mysql.sock` ; do mv #{base_dir}/var/lib/mysql/$i #{new_resource.parsed_data_dir} ; done
EOH
action :nothing
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
action :restart do
service service_name do
supports :restart => true
action :restart
end
end
action :reload do
service service_name do
action :reload
end
end
end
end
end
end

View File

@ -0,0 +1,208 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_smartos'
class Chef
class Provider
class MysqlService
class Smartos < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::SmartOS
action :create do
package new_resource.parsed_package_name do
version new_resource.parsed_version
action :install
end
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
action :create
recursive true
end
# data_dir
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory "#{new_resource.parsed_data_dir}/data" do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory "#{new_resource.parsed_data_dir}/data/mysql" do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
directory "#{new_resource.parsed_data_dir}/data/test" do
owner 'mysql'
group 'mysql'
mode '0750'
action :create
recursive true
end
# FIXME: support user supplied template
template "#{prefix_dir}/etc/my.cnf" do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file,
:socket_file => socket_file,
:port => new_resource.parsed_port,
:include_dir => include_dir
)
action :create
notifies :run, 'bash[move mysql data to datadir]', :immediately
notifies :restart, 'service[mysql]'
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
/usr/sbin/svcadm disable mysql \
&& mv /opt/local/lib/mysql/* #{new_resource.parsed_data_dir}
EOH
action :nothing
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
end
execute 'initialize mysql database' do
cwd new_resource.parsed_data_dir
command "#{prefix_dir}/bin/mysql_install_db --datadir=#{new_resource.parsed_data_dir} --user=mysql"
creates "#{new_resource.parsed_data_dir}/mysql/user.frm"
end
template '/opt/local/lib/svc/method/mysqld' do
cookbook 'mysql'
source 'smartos/svc.method.mysqld.erb'
owner 'root'
group 'root'
mode '0555'
variables(
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file
)
action :create
end
template '/tmp/mysql.xml' do
cookbook 'mysql'
source 'smartos/mysql.xml.erb'
owner 'root'
group 'root'
mode '0644'
variables(:version => new_resource.parsed_version)
action :create
notifies :run, 'execute[import mysql manifest]', :immediately
end
execute 'import mysql manifest' do
command 'svccfg import /tmp/mysql.xml'
action :nothing
end
service 'mysql' do
supports :reload => true
action [:start, :enable]
end
execute 'wait for mysql' do
command "until [ -S #{socket_file} ] ; do sleep 1 ; done"
timeout 10
action :run
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
template "#{prefix_dir}/etc/mysql_grants.sql" do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]', :immediately
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < #{prefix_dir}/etc/mysql_grants.sql"
command cmd
action :nothing
notifies :run, 'execute[create root marker]'
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << " > #{prefix_dir}/etc/.mysql_root"
cmd << " ;/bin/chmod 0600 #{prefix_dir}/etc/.mysql_root"
command cmd
action :nothing
end
end
action :restart do
service 'mysql' do
supports :restart => true
action :restart
end
end
action :reload do
service 'mysql' do
supports :reload => true
action :reload
end
end
end
end
end
end

View File

@ -0,0 +1,169 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers'
require_relative 'helpers_suse'
extend Opscode::Mysql::Helpers
class Chef
class Provider
class MysqlService
class Suse < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::Suse
action :create do
package 'mysql' do
action :install
end
file '/etc/mysqlaccess.conf' do
action :delete
end
file '/etc/mysql/default_plugins.cnf' do
action :delete
end
file '/etc/mysql/secure_file_priv.conf' do
action :delete
end
directory '/etc/mysql/conf.d' do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory '/var/run/mysql' do
owner 'mysql'
group 'mysql'
mode '0755'
recursive true
action :create
end
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0755'
recursive true
action :create
end
template '/etc/my.cnf' do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:data_dir => new_resource.parsed_data_dir,
:include_dir => '/etc/mysql/conf.d',
:pid_file => '/var/run/mysql/mysql.pid',
:port => new_resource.parsed_port,
:socket_file => '/var/lib/mysql/mysql.sock'
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, 'service[mysql]'
end
execute 'initialize mysql database' do
cwd new_resource.parsed_data_dir
command '/usr/bin/mysql_install_db --user=mysql'
creates "#{new_resource.parsed_data_dir}/mysql/user.frm"
action :run
end
service 'mysql' do
supports :restart => true, :reload => true
action [:start, :enable]
notifies :run, 'execute[wait for mysql]', :immediately
end
execute 'wait for mysql' do
command 'until [ -S /var/lib/mysql/mysql.sock ] ; do sleep 1 ; done'
timeout 10
action :nothing
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = '/usr/bin/mysql'
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
action :nothing
notifies :run, 'execute[create root marker]'
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
service mysql stop \
&& for i in `ls /var/lib/mysql | grep -v mysql.sock` ; do mv /var/lib/mysql/$i #{new_resource.parsed_data_dir} ; done
EOH
action :nothing
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
end
execute 'assign-root-password' do
cmd = '/usr/bin/mysqladmin'
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "/usr/bin/mysql -u root -e 'show databases;'"
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
end
action :restart do
service 'mysql' do
supports :restart => true
action :restart
end
end
action :reload do
service 'mysql' do
supports :reload => true
action :reload
end
end
end
end
end

View File

@ -0,0 +1,210 @@
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers_ubuntu'
class Chef
class Provider
class MysqlService
class Ubuntu < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
include MysqlCookbook::Helpers::Ubuntu
action :create do
package 'debconf-utils' do
action :install
end
directory '/var/cache/local/preseeding' do
owner 'root'
group 'root'
mode '0755'
action :create
recursive true
end
template '/var/cache/local/preseeding/mysql-server.seed' do
cookbook 'mysql'
source 'debian/mysql-server.seed.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[preseed mysql-server]', :immediately
end
execute 'preseed mysql-server' do
command '/usr/bin/debconf-set-selections /var/cache/local/preseeding/mysql-server.seed'
action :nothing
end
# package automatically initializes database and starts service.
# ... because that's totally super convenient.
package new_resource.parsed_package_name do
action new_resource.parsed_package_action
version new_resource.parsed_package_version
end
# service
service 'mysql' do
provider Chef::Provider::Service::Upstart
supports :restart => true
action [:start, :enable]
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.parsed_server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
action :nothing
notifies :run, 'execute[create root marker]'
end
# apparmor
directory '/etc/apparmor.d' do
owner 'root'
group 'root'
mode '0755'
action :create
end
template '/etc/apparmor.d/usr.sbin.mysqld' do
cookbook 'mysql'
source 'apparmor/usr.sbin.mysqld.erb'
owner 'root'
group 'root'
mode '0644'
action :create
notifies :reload, 'service[apparmor-mysql]', :immediately
end
service 'apparmor-mysql' do
service_name 'apparmor'
action :nothing
supports :reload => true
end
template '/etc/mysql/debian.cnf' do
cookbook 'mysql'
source 'debian/debian.cnf.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
end
#
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
action :create
recursive true
end
directory new_resource.parsed_data_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
template '/etc/mysql/my.cnf' do
if new_resource.parsed_template_source.nil?
source "#{new_resource.parsed_version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.parsed_template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:data_dir => new_resource.parsed_data_dir,
:pid_file => pid_file,
:socket_file => socket_file,
:port => new_resource.parsed_port,
:include_dir => include_dir
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, 'service[mysql]'
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
service mysql stop \
&& mv /var/lib/mysql/* #{new_resource.parsed_data_dir}
EOH
action :nothing
creates "#{new_resource.parsed_data_dir}/ibdata1"
creates "#{new_resource.parsed_data_dir}/ib_logfile0"
creates "#{new_resource.parsed_data_dir}/ib_logfile1"
end
execute 'create root marker' do
cmd = '/bin/echo'
cmd << " '#{Shellwords.escape(new_resource.parsed_server_root_password)}'"
cmd << ' > /etc/.mysql_root'
cmd << ' ;/bin/chmod 0600 /etc/.mysql_root'
command cmd
action :nothing
end
end
end
action :restart do
service 'mysql' do
provider Chef::Provider::Service::Upstart
supports :restart => true
action :restart
end
end
action :reload do
service 'mysql' do
provider Chef::Provider::Service::Upstart
supports :reload => true
action :reload
end
end
end
end
end

View File

@ -0,0 +1,11 @@
require 'chef/resource/lwrp_base'
class Chef
class Resource
class MysqlClient < Chef::Resource::LWRPBase
self.resource_name = :mysql_client
actions :create, :delete
default_action :create
end
end
end

View File

@ -0,0 +1,136 @@
require 'chef/resource/lwrp_base'
require_relative 'helpers'
class Chef
class Resource
class MysqlService < Chef::Resource::LWRPBase
self.resource_name = :mysql_service
actions :create, :restart, :reload
default_action :create
attribute :allow_remote_root, :kind_of => [TrueClass, FalseClass], :default => false
attribute :data_dir, :kind_of => String, :default => nil
attribute :package_name, :kind_of => String, :default => nil
attribute :port, :kind_of => String, :default => '3306'
attribute :remove_anonymous_users, :kind_of => [TrueClass, FalseClass], :default => true
attribute :remove_test_database, :kind_of => [TrueClass, FalseClass], :default => true
attribute :root_network_acl, :kind_of => Array, :default => []
attribute :server_debian_password, :kind_of => String, :default => 'gnuslashlinux4ev4r'
attribute :server_repl_password, :kind_of => String, :default => nil
attribute :server_root_password, :kind_of => String, :default => 'ilikerandompasswords'
attribute :service_name, :kind_of => String, :name_attribute => true
attribute :template_source, :kind_of => String, :default => nil
attribute :version, :kind_of => String, :default => nil
attribute :package_version, :kind_of => String, :default => nil
attribute :package_action, :kind_of => String, :default => nil
end
include Opscode::Mysql::Helpers
def parsed_allow_remote_root
return allow_remote_root unless allow_remote_root.nil?
end
def parsed_data_dir
return data_dir if data_dir
case node['platform_family']
when 'rhel', 'fedora', 'suse', 'debian', 'omnios'
data_dir = '/var/lib/mysql'
when 'smartos'
data_dir = '/opt/local/lib/mysql'
when 'freebsd'
data_dir = '/var/db/mysql'
end
data_dir
end
def parsed_package_name
return package_name if package_name
package_name_for(
node['platform'],
node['platform_family'],
node['platform_version'],
parsed_version
)
end
def parsed_package_version
return package_version if package_version
end
def parsed_package_action
return package_action if package_action
end
def parsed_port
return port if port
end
def parsed_remove_anonymous_users
return remove_anonymous_users unless remove_anonymous_users.nil?
end
def parsed_remove_test_database
return remove_test_database unless remove_test_database.nil?
end
def parsed_root_network_acl
return root_network_acl if root_network_acl
end
def parsed_server_debian_password
return server_debian_password if server_debian_password
end
def parsed_server_repl_password
return server_repl_password if server_repl_password
end
def parsed_server_root_password
return server_root_password if server_root_password
end
def parsed_service_name
return service_name if service_name
end
def parsed_template_source
return template_source if template_source
end
def parsed_version
return version if version
case node['platform_family']
when 'rhel'
case node['platform_version'].to_i
when 5
default_version = '5.0'
when 2013, 6
default_version = '5.1'
when 2014, 7
default_version = '5.5'
end
when 'fedora'
default_version = '5.5'
when 'suse'
default_version = '5.5'
when 'debian'
return '5.1' if node['platform_version'].to_i == 6
return '5.5' if node['platform_version'].to_i == 7
case node['platform_version']
when 'jessie/sid', '12.04', '13.04', '13.10', '14.04'
default_version = '5.5'
when '10.04'
default_version = '5.1'
end
when 'smartos'
default_version = '5.5'
when 'omnios'
default_version = '5.5'
when 'freebsd'
default_version = '5.5'
end
default_version
end
end
end

View File

@ -0,0 +1,30 @@
# provider mappings
# client
Chef::Platform.set :platform => :debian, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Debian
Chef::Platform.set :platform => :fedora, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Fedora
Chef::Platform.set :platform => :freebsd, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::FreeBSD
Chef::Platform.set :platform => :omnios, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Omnios
Chef::Platform.set :platform => :rhel, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Rhel
Chef::Platform.set :platform => :amazon, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Rhel
Chef::Platform.set :platform => :redhat, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Rhel
Chef::Platform.set :platform => :centos, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Rhel
Chef::Platform.set :platform => :oracle, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Rhel
Chef::Platform.set :platform => :scientific, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Rhel
Chef::Platform.set :platform => :smartos, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Smartos
Chef::Platform.set :platform => :suse, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Suse
Chef::Platform.set :platform => :ubuntu, :resource => :mysql_client, :provider => Chef::Provider::MysqlClient::Ubuntu
# service
Chef::Platform.set :platform => :debian, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Debian
Chef::Platform.set :platform => :fedora, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Fedora
Chef::Platform.set :platform => :freebsd, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::FreeBSD
Chef::Platform.set :platform => :omnios, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Omnios
Chef::Platform.set :platform => :amazon, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :redhat, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :centos, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :oracle, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :scientific, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :smartos, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Smartos
Chef::Platform.set :platform => :suse, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Suse
Chef::Platform.set :platform => :ubuntu, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Ubuntu

View File

@ -0,0 +1,41 @@
{
"name": "mysql",
"version": "5.5.3",
"description": "Provides mysql_service and mysql_client resources",
"long_description": "",
"maintainer": "Chef Software, Inc.",
"maintainer_email": "cookbooks@getchef.com",
"license": "Apache 2.0",
"platforms": {
"amazon": ">= 0.0.0",
"redhat": ">= 0.0.0",
"centos": ">= 0.0.0",
"scientific": ">= 0.0.0",
"fedora": ">= 0.0.0",
"debian": ">= 0.0.0",
"ubuntu": ">= 0.0.0",
"smartos": ">= 0.0.0",
"omnios": ">= 0.0.0",
"freebsd": ">= 0.0.0",
"suse": ">= 0.0.0"
},
"dependencies": {
"yum-mysql-community": ">= 0.0.0"
},
"recommendations": {
},
"suggestions": {
},
"conflicting": {
},
"providing": {
},
"replacing": {
},
"attributes": {
},
"groupings": {
},
"recipes": {
}
}

View File

@ -0,0 +1,21 @@
name 'mysql'
maintainer 'Chef Software, Inc.'
maintainer_email 'cookbooks@getchef.com'
license 'Apache 2.0'
description 'Provides mysql_service and mysql_client resources'
version '5.5.3'
supports 'amazon'
supports 'redhat'
supports 'centos'
supports 'scientific'
supports 'fedora'
supports 'debian'
supports 'ubuntu'
supports 'smartos'
supports 'omnios'
supports 'freebsd'
supports 'suse'
depends 'yum-mysql-community'

View File

@ -0,0 +1,22 @@
#
# Cookbook Name:: mysql
# Recipe:: client
#
# Copyright 2008-2013, Chef Software, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
mysql_client 'default' do
action :create
end

View File

@ -0,0 +1,34 @@
#
# Cookbook Name:: mysql
# Recipe:: server
#
# Copyright 2008-2013, Chef Software, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
mysql_service node['mysql']['service_name'] do
version node['mysql']['version']
port node['mysql']['port']
data_dir node['mysql']['data_dir']
server_root_password node['mysql']['server_root_password']
server_debian_password node['mysql']['server_debian_password']
server_repl_password node['mysql']['server_repl_password']
allow_remote_root node['mysql']['allow_remote_root']
remove_anonymous_users node['mysql']['remove_anonymous_users']
remove_test_database node['mysql']['remove_test_database']
root_network_acl node['mysql']['root_network_acl']
package_version node['mysql']['server_package_version']
package_action node['mysql']['server_package_action']
action :create
end

View File

@ -0,0 +1,23 @@
# Mysql Cookbook
# mysql::server_deprecated
#
# Copyright 2008-2013, Chef Software, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
mysql_service node['mysql']['service_name'] do
port node['mysql']['port']
data_dir node['mysql']['data_dir']
template_source 'deprecated/my.cnf.erb'
end

View File

@ -0,0 +1,38 @@
[client]
<% if @port %>
port = <%= @port %>
<% end %>
<% if @socket_file %>
socket = <%= @socket_file %>
<% end %>
[mysqld_safe]
socket = <%= @socket_file %>
<% if @nice %>
nice = 0
<% end %>
[mysqld]
user = mysql
pid-file = <%= @pid_file %>
socket = <%= @socket_file %>
<% if @port %>
port = <%= @port %>
<% end %>
<% if @basedir %>
basedir = <%= @base_dir %>
<% end %>
<% if @data_dir %>
datadir = <%= @data_dir %>
<% end %>
<% if @tmpdir %>
tmpdir = /tmp
<% end %>
<% if @lc_messages_dir %>
lc-messages-dir = <%= @lc_messages_dir %>
<% end %>
[mysql]
<% if @include_dir %>
!includedir <%= @include_dir %>
<% end %>

View File

@ -0,0 +1,38 @@
[client]
<% if @port %>
port = <%= @port %>
<% end %>
<% if @socket_file %>
socket = <%= @socket_file %>
<% end %>
[mysqld_safe]
socket = <%= @socket_file %>
<% if @nice %>
nice = 0
<% end %>
[mysqld]
user = mysql
pid-file = <%= @pid_file %>
socket = <%= @socket_file %>
<% if @port %>
port = <%= @port %>
<% end %>
<% if @basedir %>
basedir = <%= @base_dir %>
<% end %>
<% if @data_dir %>
datadir = <%= @data_dir %>
<% end %>
<% if @tmpdir %>
tmpdir = /tmp
<% end %>
<% if @lc_messages_dir %>
lc-messages-dir = <%= @lc_messages_dir %>
<% end %>
[mysql]
<% if @include_dir %>
!includedir <%= @include_dir %>
<% end %>

View File

@ -0,0 +1,38 @@
[client]
<% if @port %>
port = <%= @port %>
<% end %>
<% if @socket_file %>
socket = <%= @socket_file %>
<% end %>
[mysqld_safe]
socket = <%= @socket_file %>
<% if @nice %>
nice = 0
<% end %>
[mysqld]
user = mysql
pid-file = <%= @pid_file %>
socket = <%= @socket_file %>
<% if @port %>
port = <%= @port %>
<% end %>
<% if @basedir %>
basedir = <%= @base_dir %>
<% end %>
<% if @data_dir %>
datadir = <%= @data_dir %>
<% end %>
<% if @tmpdir %>
tmpdir = /tmp
<% end %>
<% if @lc_messages_dir %>
lc-messages-dir = <%= @lc_messages_dir %>
<% end %>
[mysql]
<% if @include_dir %>
!includedir <%= @include_dir %>
<% end %>

View File

@ -0,0 +1,39 @@
[client]
<% if @port %>
port = <%= @port %>
<% end %>
<% if @socket %>
socket = <%= @socket_file %>
<% end %>
[mysqld_safe]
socket = <%= @socket_file %>
<% if @nice %>
nice = 0
<% end %>
[mysqld]
user = mysql
pid-file = <%= @pid_file %>
socket = <%= @socket_file %>
<% if @port %>
port = <%= @port %>
<% end %>
<% if @basedir %>
basedir = <%= @base_dir %>
<% end %>
<% if @data_dir %>
datadir = <%= @data_dir %>
<% end %>
<% if @tmpdir %>
tmpdir = /tmp
<% end %>
<% if @lc_messages_dir %>
lc-messages-dir = <%= @lc_messages_dir %>
<% end %>
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
<% if @include_dir %>
!includedir <%= @include_dir %>
<% end %>

Some files were not shown because too many files have changed in this diff Show More