Repository: ambari Updated Branches: refs/heads/trunk 509e02bc0 -> 14f369426
AMBARI-5095. Added latest repository url lookup (ncole) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/14f36942 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/14f36942 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/14f36942 Branch: refs/heads/trunk Commit: 14f369426e1e1a7e537a595eec5f59a25760f970 Parents: 509e02b Author: Nate Cole <nc...@hortonworks.com> Authored: Fri Mar 14 16:31:19 2014 -0400 Committer: Nate Cole <nc...@hortonworks.com> Committed: Mon Mar 24 12:55:31 2014 -0400 ---------------------------------------------------------------------- .../server/api/services/AmbariMetaInfo.java | 37 +++++- .../server/controller/RepositoryResponse.java | 12 +- .../internal/RepositoryResourceProvider.java | 6 + .../ambari/server/state/RepositoryInfo.java | 20 +++- .../server/state/stack/LatestRepoCallable.java | 112 +++++++++++++++++++ .../server/state/stack/RepositoryXml.java | 26 ++++- .../src/main/resources/properties.json | 1 + .../server/api/services/AmbariMetaInfoTest.java | 21 +++- .../RepositoryResourceProviderTest.java | 4 +- .../resources/stacks/HDP/2.1.1/repos/hdp.json | 10 ++ .../stacks/HDP/2.1.1/repos/repoinfo.xml | 13 ++- 11 files changed, 238 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java index 8e1e787..f62bfd0 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java @@ -31,6 +31,9 @@ import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import javax.xml.bind.JAXBException; @@ -50,6 +53,7 @@ import org.apache.ambari.server.state.RepositoryInfo; import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.Stack; import org.apache.ambari.server.state.StackInfo; +import org.apache.ambari.server.state.stack.LatestRepoCallable; import org.apache.ambari.server.state.stack.MetricDefinition; import org.apache.ambari.server.state.stack.RepositoryXml; import org.apache.ambari.server.state.stack.RepositoryXml.Os; @@ -108,6 +112,7 @@ public class AmbariMetaInfo { private static final List<String> ALL_SUPPORTED_OS = Arrays.asList( "centos5", "redhat5", "centos6", "redhat6", "oraclelinux5", "oraclelinux6", "suse11", "sles11", "ubuntu12"); + private final ActionDefinitionManager adManager = new ActionDefinitionManager(); private String serverVersion = "undefined"; private List<StackInfo> stacksResult = new ArrayList<StackInfo>(); @@ -677,6 +682,15 @@ public class AmbariMetaInfo { "stackRoot = " + stackRootAbsPath); } + ExecutorService es = Executors.newSingleThreadExecutor(new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "Stack Version Loading Thread"); + } + }); + + List<LatestRepoCallable> lookupList = new ArrayList<LatestRepoCallable>(); + for (StackInfo stack : stacks) { LOG.debug("Adding new stack to known stacks" + ", stackName = " + stack.getName() @@ -698,8 +712,8 @@ public class AmbariMetaInfo { + ", stackVersion=" + stack.getVersion() + ", repoFolder=" + repositoryFolder.getPath()); - List<RepositoryInfo> repositoryInfoList = getRepository - (repositoryFolder, stack.getVersion()); + List<RepositoryInfo> repositoryInfoList = getRepository(repositoryFolder, + stack, lookupList); stack.getRepositories().addAll(repositoryInfoList); } else { @@ -719,6 +733,10 @@ public class AmbariMetaInfo { resolveHooksFolder(stack); stack.setStackHooksFolder(stackHooksToUse); } + + es.invokeAll(lookupList); + + es.shutdown(); } @@ -726,9 +744,10 @@ public class AmbariMetaInfo { return serverVersion; } - private List<RepositoryInfo> getRepository(File repositoryFile, String stackVersion) + private List<RepositoryInfo> getRepository(File repositoryFile, StackInfo stack, + List<LatestRepoCallable> lookupList) throws JAXBException { - + RepositoryXml rxml = StackExtensionHelper.unmarshal(RepositoryXml.class, repositoryFile); List<RepositoryInfo> list = new ArrayList<RepositoryInfo>(); @@ -743,10 +762,11 @@ public class AmbariMetaInfo { ri.setOsType(os.trim()); ri.setRepoId(r.getRepoId()); ri.setRepoName(r.getRepoName()); - + ri.setLatestBaseUrl(r.getBaseUrl()); + if (null != metainfoDAO) { LOG.debug("Checking for override for base_url"); - String key = generateRepoMetaKey(r.getRepoName(), stackVersion, + String key = generateRepoMetaKey(r.getRepoName(), stack.getVersion(), o.getType(), r.getRepoId(), REPOSITORY_XML_PROPERTY_BASEURL); MetainfoEntity entity = metainfoDAO.findByKey(key); if (null != entity) { @@ -763,6 +783,11 @@ public class AmbariMetaInfo { } } } + + if (null != rxml.getLatestURI() && list.size() > 0) { + lookupList.add(new LatestRepoCallable(rxml.getLatestURI(), + repositoryFile.getParentFile(), stack)); + } return list; http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java index bc3ee39..9adeb07 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java @@ -28,16 +28,18 @@ public class RepositoryResponse { private String repoName; private String mirrorsList; private String defaultBaseUrl; + private String latestBaseUrl; public RepositoryResponse(String baseUrl, String osType, String repoId, - String repoName, String mirrorsList, String defaultBaseUrl) { + String repoName, String mirrorsList, String defaultBaseUrl, String latestBaseUrl) { setBaseUrl(baseUrl); setOsType(osType); setRepoId(repoId); setRepoName(repoName); setMirrorsList(mirrorsList); setDefaultBaseUrl(defaultBaseUrl); + setLatestBaseUrl(latestBaseUrl); } public String getStackName() { @@ -109,6 +111,14 @@ public class RepositoryResponse { public void setDefaultBaseUrl(String url) { this.defaultBaseUrl = url; } + + public String getLatestBaseUrl() { + return latestBaseUrl; + } + + public void setLatestBaseUrl(String url) { + latestBaseUrl = url; + } http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java index 878e7ef..474fe75 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java @@ -74,7 +74,10 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid public static final String REPOSITORY_VERIFY_BASE_URL_PROPERTY_ID = PropertyHelper .getPropertyId("Repositories", "verify_base_url"); + public static final String REPOSITORY_LATEST_BASE_URL_PROPERTY_ID = PropertyHelper + .getPropertyId("Repositories", "latest_base_url"); + private static Set<String> pkPropertyIds = new HashSet<String>( Arrays.asList(new String[] { STACK_NAME_PROPERTY_ID, STACK_VERSION_PROPERTY_ID, OS_TYPE_PROPERTY_ID, @@ -162,6 +165,9 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid setResourceProperty(resource, REPOSITORY_DEFAULT_BASE_URL_PROPERTY_ID, response.getDefaultBaseUrl(), requestedIds); + + setResourceProperty(resource, REPOSITORY_LATEST_BASE_URL_PROPERTY_ID, + response.getLatestBaseUrl(), requestedIds); resources.add(resource); } http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java index f612bb4..5347682 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java @@ -27,6 +27,7 @@ public class RepositoryInfo { private String repoName; private String mirrorsList; private String defaultBaseUrl; + private String latestBaseUrl; /** * @return the baseUrl @@ -112,6 +113,20 @@ public class RepositoryInfo { defaultBaseUrl = url; } + /** + * @return the latest determined base url + */ + public String getLatestBaseUrl() { + return latestBaseUrl; + } + + /** + * @param url the latest determined base url + */ + public void setLatestBaseUrl(String url) { + latestBaseUrl = url; + } + @Override public String toString() { return "[ repoInfo: " @@ -126,6 +141,9 @@ public class RepositoryInfo { public RepositoryResponse convertToResponse() { - return new RepositoryResponse(getBaseUrl(), getOsType(), getRepoId(), getRepoName(), getMirrorsList(), getDefaultBaseUrl()); + return new RepositoryResponse(getBaseUrl(), getOsType(), getRepoId(), + getRepoName(), getMirrorsList(), getDefaultBaseUrl(), getLatestBaseUrl()); } + + } http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java new file mode 100644 index 0000000..d1b5fdb --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java @@ -0,0 +1,112 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ambari.server.state.stack; + +import java.io.File; +import java.io.FileReader; +import java.io.InputStreamReader; +import java.lang.reflect.Type; +import java.util.Map; +import java.util.concurrent.Callable; + +import org.apache.ambari.server.controller.internal.URLStreamProvider; +import org.apache.ambari.server.state.RepositoryInfo; +import org.apache.ambari.server.state.StackInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +/** + * Encapsulates the work to resolve the latest repo information for a stack. + * This class must be used AFTER the stack has created its owned repositories. + */ +public class LatestRepoCallable implements Callable<Void> { + private static final int LOOKUP_CONNECTION_TIMEOUT = 2000; + private static final int LOOKUP_READ_TIMEOUT = 1000; + + private final static Logger LOG = LoggerFactory.getLogger(LatestRepoCallable.class); + + private String sourceUri = null; + private File stackRepoFolder = null; + private StackInfo stack = null; + + public LatestRepoCallable(String latestSourceUri, File stackRepoFolder, StackInfo stack) { + this.sourceUri = latestSourceUri; + this.stackRepoFolder = stackRepoFolder; + this.stack = stack; + } + + @Override + public Void call() throws Exception { + + Type type = new TypeToken<Map<String, Map<String, Object>>>(){}.getType(); + Gson gson = new Gson(); + + Map<String, Map<String, Object>> latestUrlMap = null; + + try { + if (sourceUri.startsWith("http")) { + + URLStreamProvider streamProvider = new URLStreamProvider( + LOOKUP_CONNECTION_TIMEOUT, LOOKUP_READ_TIMEOUT, + null, null, null); + + LOG.info("Loading latest URL info from " + sourceUri); + latestUrlMap = gson.fromJson(new InputStreamReader( + streamProvider.readFrom(sourceUri)), type); + } else { + File jsonFile = null; + if (sourceUri.charAt(0) == '.') { + jsonFile = new File(stackRepoFolder, sourceUri); + } else { + jsonFile = new File(sourceUri); + } + + if (jsonFile.exists()) { + LOG.info("Loading latest URL info from " + jsonFile); + latestUrlMap = gson.fromJson(new FileReader(jsonFile), type); + } + } + } catch (Exception e) { + LOG.error("Could not load the URI " + sourceUri + " (" + e.getMessage() + ")"); + throw e; + } + + + if (null != latestUrlMap) { + for (RepositoryInfo ri : stack.getRepositories()) { + if (latestUrlMap.containsKey(ri.getRepoId())) { + Map<String, Object> valueMap = latestUrlMap.get(ri.getRepoId()); + if (valueMap.containsKey("latest")) { + + @SuppressWarnings("unchecked") + Map<String, String> osMap = (Map<String, String>) valueMap.get("latest"); + if (osMap.containsKey(ri.getOsType())) { + ri.setLatestBaseUrl(osMap.get(ri.getOsType())); + } + } + } + } + } + + return null; + } + +} http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/java/org/apache/ambari/server/state/stack/RepositoryXml.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/RepositoryXml.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/RepositoryXml.java index abca8f9..bd98a9f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/RepositoryXml.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/RepositoryXml.java @@ -27,13 +27,23 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** - * Represents the repository file <code>$STACK_VERSION/metainfo.xml</code>. + * Represents the repository file <code>$STACK_VERSION/repos/repoinfo.xml</code>. */ @XmlRootElement(name="reposinfo") @XmlAccessorType(XmlAccessType.FIELD) public class RepositoryXml { + + @XmlElement(name="latest") + private String latestUri; @XmlElement(name="os") private List<Os> oses = new ArrayList<Os>(); + + /** + * @return the latest URI defined, if any. + */ + public String getLatestURI() { + return latestUri; + } /** * @return the list of <code>os</code> elements. @@ -42,7 +52,6 @@ public class RepositoryXml { return oses; } - /** * The <code>os</code> tag. */ @@ -77,10 +86,11 @@ public class RepositoryXml { */ @XmlAccessorType(XmlAccessType.FIELD) public static class Repo { - private String baseurl; - private String mirrorslist; - private String repoid; - private String reponame; + private String baseurl = null; + private String mirrorslist = null; + private String repoid = null; + private String reponame = null; + private String latest = null; private Repo() { } @@ -113,6 +123,10 @@ public class RepositoryXml { return reponame; } + public String getLatestUri() { + return latest; + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/main/resources/properties.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json index ffb81f0..a3f4fdd 100644 --- a/ambari-server/src/main/resources/properties.json +++ b/ambari-server/src/main/resources/properties.json @@ -182,6 +182,7 @@ "Repositories/mirrors_list", "Repositories/default_base_url", "Repositories/verify_base_url", + "Repositories/latest_base_url", "_" ], "StackService":[ http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java index 515fd68..60936a1 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java @@ -27,7 +27,6 @@ import static org.junit.Assert.fail; import java.io.File; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; @@ -43,7 +42,16 @@ import junit.framework.Assert; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.StackAccessException; import org.apache.ambari.server.api.util.StackExtensionHelper; -import org.apache.ambari.server.state.*; +import org.apache.ambari.server.state.AutoDeployInfo; +import org.apache.ambari.server.state.ComponentInfo; +import org.apache.ambari.server.state.CustomCommandDefinition; +import org.apache.ambari.server.state.DependencyInfo; +import org.apache.ambari.server.state.OperatingSystemInfo; +import org.apache.ambari.server.state.PropertyInfo; +import org.apache.ambari.server.state.RepositoryInfo; +import org.apache.ambari.server.state.ServiceInfo; +import org.apache.ambari.server.state.Stack; +import org.apache.ambari.server.state.StackInfo; import org.apache.ambari.server.state.stack.MetricDefinition; import org.apache.commons.io.FileUtils; import org.junit.Before; @@ -1279,4 +1287,13 @@ public class AmbariMetaInfoTest { Assert.assertTrue(found); } + @Test + public void testLatestRepo() throws Exception { + + for (RepositoryInfo ri : metaInfo.getRepositories("HDP", "2.1.1", "centos6")) { + Assert.assertEquals("http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.1.1.0-118", + ri.getLatestBaseUrl()); + } + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java index 391ff99..de707d8 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java @@ -57,7 +57,7 @@ public class RepositoryResourceProviderTest { AmbariManagementController managementController = EasyMock.createMock(AmbariManagementController.class); RepositoryResponse rr = new RepositoryResponse(VAL_BASE_URL, VAL_OS, - VAL_REPO_ID, VAL_REPO_NAME, null, null); + VAL_REPO_ID, VAL_REPO_NAME, null, null, null); rr.setStackName(VAL_STACK_NAME); rr.setStackVersion(VAL_STACK_VERSION); Set<RepositoryResponse> allResponse = new HashSet<RepositoryResponse>(); @@ -128,7 +128,7 @@ public class RepositoryResourceProviderTest { AmbariManagementController managementController = EasyMock.createMock(AmbariManagementController.class); RepositoryResponse rr = new RepositoryResponse(VAL_BASE_URL, VAL_OS, - VAL_REPO_ID, VAL_REPO_NAME, null, null); + VAL_REPO_ID, VAL_REPO_NAME, null, null ,null); Set<RepositoryResponse> allResponse = new HashSet<RepositoryResponse>(); allResponse.add(rr); http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/hdp.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/hdp.json b/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/hdp.json new file mode 100644 index 0000000..8c47ae6 --- /dev/null +++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/hdp.json @@ -0,0 +1,10 @@ +{ + "HDP-2.1.1": { + "latest": { + "centos6": "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.1.1.0-118", + "redhat6": "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.1.1.0-118", + "oraclelinux6": "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.1.1.0-118", + "suse11": "http://s3.amazonaws.com/dev.hortonworks.com/HDP/suse11/2.x/BUILDS/2.1.1.0-118" + } + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/14f36942/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/repoinfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/repoinfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/repoinfo.xml index 1025240..44ca5c8 100644 --- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/repoinfo.xml +++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/repos/repoinfo.xml @@ -16,45 +16,46 @@ limitations under the License. --> <reposinfo> + <latest>./hdp.json</latest> <os type="centos6"> <repo> <baseurl>http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0</baseurl> - <repoid>HDP-2.0.8</repoid> + <repoid>HDP-2.1.1</repoid> <reponame>HDP</reponame> </repo> </os> <os type="centos5"> <repo> <baseurl>http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.0</baseurl> - <repoid>HDP-2.0.8</repoid> + <repoid>HDP-2.1.1</repoid> <reponame>HDP</reponame> </repo> </os> <os type="redhat6"> <repo> <baseurl>http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0</baseurl> - <repoid>HDP-2.0.8</repoid> + <repoid>HDP-2.1.1</repoid> <reponame>HDP</reponame> </repo> </os> <os type="redhat5"> <repo> <baseurl>http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.0</baseurl> - <repoid>HDP-2.0.8</repoid> + <repoid>HDP-2.1.1</repoid> <reponame>HDP</reponame> </repo> </os> <os type="suse11"> <repo> <baseurl>http://public-repo-1.hortonworks.com/HDP/suse11/2.x/updates/2.0.6.0</baseurl> - <repoid>HDP-2.0.8</repoid> + <repoid>HDP-2.1.1</repoid> <reponame>HDP</reponame> </repo> </os> <os type="sles11"> <repo> <baseurl>http://public-repo-1.hortonworks.com/HDP/suse11/2.x/updates/2.0.6.0</baseurl> - <repoid>HDP-2.0.8</repoid> + <repoid>HDP-2.1.1</repoid> <reponame>HDP</reponame> </repo> </os>