grim/convey

Parents b7ba6b711cfa
Children f25d35ba9313
Add a utility function to parse an image name into the registry, name, and tag
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docker/util.go Sat Jul 22 13:29:17 2017 -0500
@@ -0,0 +1,44 @@
+/*
+ * Convey
+ * Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package docker
+
+import (
+ "strings"
+)
+
+// ParseImage will convert an image like python:3 to it's registry, name, and tag
+func ParseImage(image string) (string, string, string) {
+ registry := ""
+ name := ""
+ tag := ""
+
+ parts := strings.SplitN(image, "/", 2)
+ if len(parts) == 2 {
+ registry = parts[0]
+ image = parts[1]
+ }
+
+ parts = strings.SplitN(image, ":", 2)
+
+ name = parts[0]
+ if len(parts) > 1 {
+ tag = parts[1]
+ }
+
+ return registry, name, tag
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docker/util_test.go Sat Jul 22 13:29:17 2017 -0500
@@ -0,0 +1,75 @@
+/*
+ * Convey
+ * Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package docker
+
+import (
+ "testing"
+
+ . "github.com/onsi/gomega"
+)
+
+type parseImageData struct {
+ input string
+ registry string
+ name string
+ tag string
+}
+
+func (s *dockerSuite) TestParseImage(t *testing.T) {
+ data := []parseImageData{
+ {
+ input: "",
+ registry: "",
+ name: "",
+ tag: "",
+ }, {
+ input: "python",
+ registry: "",
+ name: "python",
+ tag: "",
+ }, {
+ input: "python:3",
+ registry: "",
+ name: "python",
+ tag: "3",
+ }, {
+ input: "registry.docker.io/python:3",
+ registry: "registry.docker.io",
+ name: "python",
+ tag: "3",
+ }, {
+ input: "registry.docker.io/rw_grim/convey:latest",
+ registry: "registry.docker.io",
+ name: "rw_grim/convey",
+ tag: "latest",
+ }, {
+ input: "registry.my.tld:5000/something/fancy:commit:deadbeef",
+ registry: "registry.my.tld:5000",
+ name: "something/fancy",
+ tag: "commit:deadbeef",
+ },
+ }
+
+ for _, test := range data {
+ registry, name, tag := ParseImage(test.input)
+
+ Expect(registry).To(Equal(test.registry))
+ Expect(name).To(Equal(test.name))
+ Expect(tag).To(Equal(test.tag))
+ }
+}