1
0
mirror of https://github.com/rancher/os.git synced 2025-07-16 16:11:03 +00:00
This commit is contained in:
Serhiy Berezin 2016-12-02 01:17:16 +00:00
commit de1bbbea38
377 changed files with 49251 additions and 2299 deletions

View File

@ -1,15 +1,6 @@
FROM ubuntu:16.04 FROM ubuntu:16.04
# FROM arm64=aarch64/ubuntu:16.04 arm=armhf/ubuntu:16.04 # FROM arm64=aarch64/ubuntu:16.04 arm=armhf/ubuntu:16.04
ENV DAPPER_ENV VERSION DEV_BUILD
ENV DAPPER_DOCKER_SOCKET true
ENV DAPPER_SOURCE /go/src/github.com/rancher/os
ENV DAPPER_OUTPUT ./bin ./dist ./build/initrd
ENV DAPPER_RUN_ARGS --privileged
ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache
ENV SHELL /bin/bash
WORKDIR ${DAPPER_SOURCE}
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
build-essential \ build-essential \
@ -38,6 +29,17 @@ RUN apt-get update && \
wget \ wget \
xorriso xorriso
########## Dapper Configuration #####################
ENV DAPPER_ENV VERSION DEV_BUILD RUNTEST
ENV DAPPER_DOCKER_SOCKET true
ENV DAPPER_SOURCE /go/src/github.com/rancher/os
ENV DAPPER_OUTPUT ./bin ./dist ./build/initrd
ENV DAPPER_RUN_ARGS --privileged
ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache
ENV SHELL /bin/bash
WORKDIR ${DAPPER_SOURCE}
########## General Configuration ##################### ########## General Configuration #####################
ARG DAPPER_HOST_ARCH=amd64 ARG DAPPER_HOST_ARCH=amd64
ARG HOST_ARCH=${DAPPER_HOST_ARCH} ARG HOST_ARCH=${DAPPER_HOST_ARCH}
@ -53,7 +55,7 @@ ARG DOCKER_BUILD_VERSION=1.10.3
ARG DOCKER_BUILD_PATCH_VERSION=v${DOCKER_BUILD_VERSION}-ros1 ARG DOCKER_BUILD_PATCH_VERSION=v${DOCKER_BUILD_VERSION}-ros1
ARG SELINUX_POLICY_URL=https://github.com/rancher/refpolicy/releases/download/v0.0.3/policy.29 ARG SELINUX_POLICY_URL=https://github.com/rancher/refpolicy/releases/download/v0.0.3/policy.29
ARG KERNEL_URL_amd64=https://github.com/rancher/os-kernel/releases/download/Ubuntu-4.4.0-42.62-rancher1-1/linux-4.4.21-rancher-x86.tar.gz ARG KERNEL_URL_amd64=https://github.com/rancher/os-kernel/releases/download/v4.8.11/linux-4.8.11-rancher-x86.tar.gz
ARG KERNEL_URL_arm64=https://github.com/imikushin/os-kernel/releases/download/Estuary-4.4.0-arm64.8/linux-4.4.0-rancher-arm64.tar.gz ARG KERNEL_URL_arm64=https://github.com/imikushin/os-kernel/releases/download/Estuary-4.4.0-arm64.8/linux-4.4.0-rancher-arm64.tar.gz
ARG DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz ARG DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz
@ -70,9 +72,9 @@ ARG OS_SERVICES_REPO=https://raw.githubusercontent.com/${OS_REPO}/os-services
ARG IMAGE_NAME=${OS_REPO}/os ARG IMAGE_NAME=${OS_REPO}/os
ARG DFS_IMAGE=${OS_REPO}/docker:v${DOCKER_VERSION}-2 ARG DFS_IMAGE=${OS_REPO}/docker:v${DOCKER_VERSION}-2
ARG OS_BASE_URL_amd64=https://github.com/rancher/os-base/releases/download/v2016.08.1-1/os-base_amd64.tar.xz ARG OS_BASE_URL_amd64=https://github.com/rancher/os-base/releases/download/v2016.08.1-2/os-base_amd64.tar.xz
ARG OS_BASE_URL_arm64=https://github.com/rancher/os-base/releases/download/v2016.08.1-1/os-base_arm64.tar.xz ARG OS_BASE_URL_arm64=https://github.com/rancher/os-base/releases/download/v2016.08.1-2/os-base_arm64.tar.xz
ARG OS_BASE_URL_arm=https://github.com/rancher/os-base/releases/download/v2016.08.1-1/os-base_arm.tar.xz ARG OS_BASE_URL_arm=https://github.com/rancher/os-base/releases/download/v2016.08.1-2/os-base_arm.tar.xz
###################################################### ######################################################
# Set up environment and export all ARGS as ENV # Set up environment and export all ARGS as ENV
@ -140,6 +142,9 @@ RUN curl -fL ${!BUILD_DOCKER_URL} > /usr/bin/docker && \
# Install Trash # Install Trash
RUN go get github.com/rancher/trash RUN go get github.com/rancher/trash
# Install golint
RUN go get github.com/golang/lint/golint
RUN go get gopkg.in/check.v1 RUN go get gopkg.in/check.v1
# Install dapper # Install dapper

View File

@ -1,8 +1,8 @@
TARGETS := $(shell ls scripts | grep -vE 'clean|run|help') TARGETS := $(shell ls scripts | grep -vE 'clean|run|help|docs')
.dapper: .dapper:
@echo Downloading dapper @echo Downloading dapper
@curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m` > .dapper.tmp @curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m|sed 's/v7l//'` > .dapper.tmp
@@chmod +x .dapper.tmp @@chmod +x .dapper.tmp
@./.dapper.tmp -v @./.dapper.tmp -v
@mv .dapper.tmp .dapper @mv .dapper.tmp .dapper
@ -25,6 +25,9 @@ run: build/initrd/.id .dapper
./.dapper -m bind build-target ./.dapper -m bind build-target
./scripts/run ./scripts/run
docs:
./scripts/docs
shell-bind: .dapper shell-bind: .dapper
./.dapper -m bind -s ./.dapper -m bind -s

View File

@ -14,40 +14,48 @@ it would really be bad if somebody did `docker rm -f $(docker ps -qa)` and delet
## Latest Release ## Latest Release
**v0.6.1 - Docker 1.12.1 - Linux 4.4.19** **v0.7.1 - Docker 1.12.3 - Linux 4.4.24**
### ISO ### ISO
https://releases.rancher.com/os/latest/rancheros.iso https://releases.rancher.com/os/latest/rancheros.iso
https://releases.rancher.com/os/v0.6.1/rancheros.iso https://releases.rancher.com/os/v0.7.1/rancheros.iso
### Additional Downloads ### Additional Downloads
#### Latest #### Latest Links
##### v0.7.1
* https://releases.rancher.com/os/latest/initrd * https://releases.rancher.com/os/latest/initrd
* https://releases.rancher.com/os/latest/iso-checksums.txt * https://releases.rancher.com/os/latest/iso-checksums.txt
* https://releases.rancher.com/os/latest/rancheros-openstack.img * https://releases.rancher.com/os/latest/rancheros-openstack.img
* https://releases.rancher.com/os/latest/rancheros-raspberry-pi.zip
* https://releases.rancher.com/os/latest/rancheros-v0.6.1.tar.gz
* https://releases.rancher.com/os/latest/rancheros.iso * https://releases.rancher.com/os/latest/rancheros.iso
* https://releases.rancher.com/os/latest/rootfs_arm.tar.gz * https://releases.rancher.com/os/latest/rancheros-v0.7.1.tar.gz
* https://releases.rancher.com/os/latest/rootfs_arm64.tar.gz
* https://releases.rancher.com/os/latest/rootfs.tar.gz * https://releases.rancher.com/os/latest/rootfs.tar.gz
* https://releases.rancher.com/os/latest/vmlinuz * https://releases.rancher.com/os/latest/vmlinuz
#### v0.6.1 ##### v0.7.0
* https://releases.rancher.com/os/v0.6.1/initrd
* https://releases.rancher.com/os/v0.6.1/iso-checksums.txt * https://releases.rancher.com/os/latest/rancheros-raspberry-pi.zip
* https://releases.rancher.com/os/v0.6.1/rancheros-openstack.img * https://releases.rancher.com/os/latest/rootfs_arm.tar.gz
* https://releases.rancher.com/os/v0.6.1/rancheros-raspberry-pi.zip * https://releases.rancher.com/os/latest/rootfs_arm64.tar.gz
* https://releases.rancher.com/os/v0.6.1/rancheros-v0.6.1.tar.gz
* https://releases.rancher.com/os/v0.6.1/rancheros.iso #### v0.7.1 Links
* https://releases.rancher.com/os/v0.6.1/rootfs_arm.tar.gz
* https://releases.rancher.com/os/v0.6.1/rootfs_arm64.tar.gz * https://releases.rancher.com/os/v0.7.1/initrd
* https://releases.rancher.com/os/v0.6.1/rootfs.tar.gz * https://releases.rancher.com/os/v0.7.1/iso-checksums.txt
* https://releases.rancher.com/os/v0.6.1/vmlinuz * https://releases.rancher.com/os/v0.7.1/rancheros-openstack.img
* https://releases.rancher.com/os/v0.7.1/rancheros.iso
* https://releases.rancher.com/os/v0.7.1/rancheros-v0.7.1.tar.gz
* https://releases.rancher.com/os/v0.7.1/rootfs.tar.gz
* https://releases.rancher.com/os/v0.7.1/vmlinuz
#### v0.7.0 Links
* https://releases.rancher.com/os/v0.7.0/rancheros-raspberry-pi.zip
* https://releases.rancher.com/os/v0.7.0/rootfs_arm.tar.gz
* https://releases.rancher.com/os/v0.7.0/rootfs_arm64.tar.gz
**Note**: you can use `http` instead of `https` in the above URLs, e.g. for iPXE. **Note**: you can use `http` instead of `https` in the above URLs, e.g. for iPXE.
@ -59,22 +67,24 @@ SSH keys are added to the **`rancher`** user, so you must log in using the **ran
Region | Type | AMI | Region | Type | AMI |
-------|------|------ -------|------|------
ap-northeast-1 | HVM | [ami-75954214](https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchInstanceWizard:ami=ami-75954214) ap-northeast-1 | HVM | [ami-be5bf2df](https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchInstanceWizard:ami=ami-be5bf2df)
ap-northeast-2 | HVM | [ami-690dd807](https://console.aws.amazon.com/ec2/home?region=ap-northeast-2#launchInstanceWizard:ami=ami-690dd807) ap-northeast-2 | HVM | [ami-247fab4a](https://console.aws.amazon.com/ec2/home?region=ap-northeast-2#launchInstanceWizard:ami=ami-247fab4a)
ap-south-1 | HVM | [ami-ed8cf982](https://console.aws.amazon.com/ec2/home?region=ap-south-1#launchInstanceWizard:ami=ami-ed8cf982) ap-south-1 | HVM | [ami-dbf682b4](https://console.aws.amazon.com/ec2/home?region=ap-south-1#launchInstanceWizard:ami=ami-dbf682b4)
ap-southeast-1 | HVM | [ami-27bc6644](https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchInstanceWizard:ami=ami-27bc6644) ap-southeast-1 | HVM | [ami-c6d073a5](https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchInstanceWizard:ami=ami-c6d073a5)
ap-southeast-2 | HVM | [ami-67172604](https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchInstanceWizard:ami=ami-67172604) ap-southeast-2 | HVM | [ami-51132c32](https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchInstanceWizard:ami=ami-51132c32)
eu-central-1 | HVM | [ami-e88d7f87](https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchInstanceWizard:ami=ami-e88d7f87) eu-central-1 | HVM | [ami-2025df4f](https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchInstanceWizard:ami=ami-2025df4f)
eu-west-1 | HVM | [ami-934837e0](https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchInstanceWizard:ami=ami-934837e0) eu-west-1 | HVM | [ami-c62170b5](https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchInstanceWizard:ami=ami-c62170b5)
sa-east-1 | HVM | [ami-6949d905](https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchInstanceWizard:ami=ami-6949d905) sa-east-1 | HVM | [ami-52b8273e](https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchInstanceWizard:ami=ami-52b8273e)
us-east-1 | HVM | [ami-a8d2a4bf](https://console.aws.amazon.com/ec2/home?region=us-east-1#launchInstanceWizard:ami=ami-a8d2a4bf) us-east-1 | HVM | [ami-dfdff3c8](https://console.aws.amazon.com/ec2/home?region=us-east-1#launchInstanceWizard:ami=ami-dfdff3c8)
us-west-1 | HVM | [ami-fccb879c](https://console.aws.amazon.com/ec2/home?region=us-west-1#launchInstanceWizard:ami=ami-fccb879c) us-east-2 | HVM | [ami-674c1602](https://console.aws.amazon.com/ec2/home?region=us-east-2#launchInstanceWizard:ami=ami-674c1602)
us-west-2 | HVM | [ami-1ed3007e](https://console.aws.amazon.com/ec2/home?region=us-west-2#launchInstanceWizard:ami=ami-1ed3007e) us-west-1 | HVM | [ami-da2075ba](https://console.aws.amazon.com/ec2/home?region=us-west-1#launchInstanceWizard:ami=ami-da2075ba)
us-west-2 | HVM | [ami-ab3192cb](https://console.aws.amazon.com/ec2/home?region=us-west-2#launchInstanceWizard:ami=ami-ab3192cb)
### Google Compute Engine ### Google Compute Engine
We are providing a disk image that users can download and import for use in Google Compute Engine. The image can be obtained from the release artifacts for RancherOS. We are providing a disk image that users can download and import for use in Google Compute Engine. The image can be obtained from the release artifacts for RancherOS.
[Download Image](https://github.com/rancher/os/releases/download/v0.6.1/rancheros-v0.6.1.tar.gz) [Download Image](https://github.com/rancher/os/releases/download/v0.7.1/rancheros-v0.7.1.tar.gz)
Please follow the directions at our [docs to launch in GCE](http://docs.rancher.com/os/running-rancheros/cloud/gce/). Please follow the directions at our [docs to launch in GCE](http://docs.rancher.com/os/running-rancheros/cloud/gce/).
@ -85,6 +95,8 @@ Please refer to our [RancherOS Documentation](http://docs.rancher.com/os/) websi
## Support, Discussion, and Community ## Support, Discussion, and Community
If you need any help with RancherOS or Rancher, please join us at either our [Rancher forums](http://forums.rancher.com) or [#rancher IRC channel](http://webchat.freenode.net/?channels=rancher) where most of our team hangs out at. If you need any help with RancherOS or Rancher, please join us at either our [Rancher forums](http://forums.rancher.com) or [#rancher IRC channel](http://webchat.freenode.net/?channels=rancher) where most of our team hangs out at.
For issues relating to security, please email security@rancher.com instead of posting an open issue in Github.
Please submit any **RancherOS** bugs, issues, and feature requests to [rancher/os](//github.com/rancher/os/issues). Please submit any **RancherOS** bugs, issues, and feature requests to [rancher/os](//github.com/rancher/os/issues).
Please submit any **Rancher** bugs, issues, and feature requests to [rancher/rancher](//github.com/rancher/rancher/issues). Please submit any **Rancher** bugs, issues, and feature requests to [rancher/rancher](//github.com/rancher/rancher/issues).

View File

@ -1,20 +1,108 @@
package cloudinitexecute package cloudinitexecute
import ( import (
"io/ioutil"
"os" "os"
"os/exec" "path"
"strconv"
"strings"
log "github.com/Sirupsen/logrus" "github.com/rancher/os/log"
"github.com/rancher/os/util"
) )
func authorizeSSHKeys(user string, authorizedKeys []string, name string) { const (
for _, authorizedKey := range authorizedKeys { sshDirName = ".ssh"
cmd := exec.Command("update-ssh-keys", user, authorizedKey) authorizedKeysFileName = "authorized_keys"
cmd.Stdout = os.Stdout )
cmd.Stderr = os.Stderr
err := cmd.Run() func authorizeSSHKeys(username string, authorizedKeys []string, name string) error {
if err != nil { var uid int
log.WithFields(log.Fields{"err": err, "user": user, "auth_key": authorizedKey}).Error("Error updating SSH authorized_keys") var gid int
var homeDir string
bytes, err := ioutil.ReadFile("/etc/passwd")
if err != nil {
return err
}
for _, line := range strings.Split(string(bytes), "\n") {
if strings.HasPrefix(line, username) {
split := strings.Split(line, ":")
if len(split) < 6 {
break
}
uid, err = strconv.Atoi(split[2])
if err != nil {
return err
}
gid, err = strconv.Atoi(split[3])
if err != nil {
return err
}
homeDir = split[5]
} }
} }
sshDir := path.Join(homeDir, sshDirName)
authorizedKeysFile := path.Join(sshDir, authorizedKeysFileName)
if _, err := os.Stat(sshDir); os.IsNotExist(err) {
if err = os.Mkdir(sshDir, 0700); err != nil {
return err
}
} else if err != nil {
return err
}
if err = os.Chown(sshDir, uid, gid); err != nil {
return err
}
for _, authorizedKey := range authorizedKeys {
if err = authorizeSSHKey(authorizedKey, authorizedKeysFile, uid, gid); err != nil {
log.Errorf("Failed to authorize SSH key %s: %v", authorizedKey, err)
}
}
return nil
}
func authorizeSSHKey(authorizedKey, authorizedKeysFile string, uid, gid int) error {
authorizedKeysFileInfo, err := os.Stat(authorizedKeysFile)
if os.IsNotExist(err) {
keysFile, err := os.Create(authorizedKeysFile)
if err != nil {
return err
}
if err = keysFile.Chmod(0600); err != nil {
return err
}
if err = keysFile.Close(); err != nil {
return err
}
authorizedKeysFileInfo, err = os.Stat(authorizedKeysFile)
if err != nil {
return err
}
} else if err != nil {
return err
}
bytes, err := ioutil.ReadFile(authorizedKeysFile)
if err != nil {
return err
}
if !strings.Contains(string(bytes), authorizedKey) {
bytes = append(bytes, []byte(authorizedKey)...)
bytes = append(bytes, '\n')
}
perm := authorizedKeysFileInfo.Mode().Perm()
if err = util.WriteFileAtomic(authorizedKeysFile, bytes, perm); err != nil {
return err
}
return os.Chown(authorizedKeysFile, uid, gid)
} }

View File

@ -9,10 +9,10 @@ import (
"path" "path"
"strings" "strings"
log "github.com/Sirupsen/logrus"
"github.com/coreos/coreos-cloudinit/system" "github.com/coreos/coreos-cloudinit/system"
rancherConfig "github.com/rancher/os/config" rancherConfig "github.com/rancher/os/config"
"github.com/rancher/os/docker" "github.com/rancher/os/docker"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -37,6 +37,7 @@ func init() {
func Main() { func Main() {
flags.Parse(os.Args[1:]) flags.Parse(os.Args[1:])
log.InitLogger()
log.Infof("Running cloud-init-execute: pre-console=%v, console=%v", preConsole, console) log.Infof("Running cloud-init-execute: pre-console=%v, console=%v", preConsole, console)
cfg := rancherConfig.LoadConfig() cfg := rancherConfig.LoadConfig()
@ -56,8 +57,12 @@ func Main() {
func ApplyConsole(cfg *rancherConfig.CloudConfig) { func ApplyConsole(cfg *rancherConfig.CloudConfig) {
if len(cfg.SSHAuthorizedKeys) > 0 { if len(cfg.SSHAuthorizedKeys) > 0 {
authorizeSSHKeys("rancher", cfg.SSHAuthorizedKeys, sshKeyName) if err := authorizeSSHKeys("rancher", cfg.SSHAuthorizedKeys, sshKeyName); err != nil {
authorizeSSHKeys("docker", cfg.SSHAuthorizedKeys, sshKeyName) log.Error(err)
}
if err := authorizeSSHKeys("docker", cfg.SSHAuthorizedKeys, sshKeyName); err != nil {
log.Error(err)
}
} }
WriteFiles(cfg, "console") WriteFiles(cfg, "console")
@ -94,18 +99,7 @@ func ApplyConsole(cfg *rancherConfig.CloudConfig) {
} }
} }
for _, runcmd := range cfg.Runcmd { util.RunCommandSequence(cfg.Runcmd)
if len(runcmd) == 0 {
continue
}
cmd := exec.Command(runcmd[0], runcmd[1:]...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Errorf("Failed to run %s: %v", runcmd, err)
}
}
} }
func WriteFiles(cfg *rancherConfig.CloudConfig, container string) { func WriteFiles(cfg *rancherConfig.CloudConfig, container string) {

View File

@ -17,15 +17,14 @@ package cloudinitsave
import ( import (
"errors" "errors"
"flag"
"os" "os"
"strings" "strings"
"sync" "sync"
"syscall"
"time" "time"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
log "github.com/Sirupsen/logrus"
"github.com/coreos/coreos-cloudinit/config" "github.com/coreos/coreos-cloudinit/config"
"github.com/coreos/coreos-cloudinit/datasource" "github.com/coreos/coreos-cloudinit/datasource"
"github.com/coreos/coreos-cloudinit/datasource/configdrive" "github.com/coreos/coreos-cloudinit/datasource/configdrive"
@ -36,9 +35,12 @@ import (
"github.com/coreos/coreos-cloudinit/datasource/proc_cmdline" "github.com/coreos/coreos-cloudinit/datasource/proc_cmdline"
"github.com/coreos/coreos-cloudinit/datasource/url" "github.com/coreos/coreos-cloudinit/datasource/url"
"github.com/coreos/coreos-cloudinit/pkg" "github.com/coreos/coreos-cloudinit/pkg"
"github.com/rancher/netconf" "github.com/docker/docker/pkg/mount"
"github.com/rancher/os/cmd/cloudinitsave/gce" "github.com/rancher/os/cmd/cloudinitsave/gce"
"github.com/rancher/os/cmd/network"
rancherConfig "github.com/rancher/os/config" rancherConfig "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/netconf"
"github.com/rancher/os/util" "github.com/rancher/os/util"
) )
@ -46,73 +48,43 @@ const (
datasourceInterval = 100 * time.Millisecond datasourceInterval = 100 * time.Millisecond
datasourceMaxInterval = 30 * time.Second datasourceMaxInterval = 30 * time.Second
datasourceTimeout = 5 * time.Minute datasourceTimeout = 5 * time.Minute
configDevName = "config-2"
configDev = "LABEL=" + configDevName
configDevMountPoint = "/media/config-2"
) )
var (
network bool
flags *flag.FlagSet
)
func init() {
flags = flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
flags.BoolVar(&network, "network", true, "use network based datasources")
}
func Main() { func Main() {
flags.Parse(os.Args[1:]) log.InitLogger()
log.Info("Running cloud-init-save")
log.Infof("Running cloud-init-save: network=%v", network) cfg := rancherConfig.LoadConfig()
network.ApplyNetworkConfig(cfg)
if err := saveCloudConfig(); err != nil { if err := SaveCloudConfig(true); err != nil {
log.Errorf("Failed to save cloud-config: %v", err) log.Errorf("Failed to save cloud-config: %v", err)
} }
} }
func saveFiles(cloudConfigBytes, scriptBytes []byte, metadata datasource.Metadata) error { func MountConfigDrive() error {
os.MkdirAll(rancherConfig.CloudConfigDir, os.ModeDir|0600) if err := os.MkdirAll(configDevMountPoint, 644); err != nil {
if len(scriptBytes) > 0 {
log.Infof("Writing to %s", rancherConfig.CloudConfigScriptFile)
if err := util.WriteFileAtomic(rancherConfig.CloudConfigScriptFile, scriptBytes, 500); err != nil {
log.Errorf("Error while writing file %s: %v", rancherConfig.CloudConfigScriptFile, err)
return err
}
}
if len(cloudConfigBytes) > 0 {
if err := util.WriteFileAtomic(rancherConfig.CloudConfigBootFile, cloudConfigBytes, 400); err != nil {
return err
}
log.Infof("Written to %s:\n%s", rancherConfig.CloudConfigBootFile, string(cloudConfigBytes))
}
metaDataBytes, err := yaml.Marshal(metadata)
if err != nil {
return err return err
} }
if err = util.WriteFileAtomic(rancherConfig.MetaDataFile, metaDataBytes, 400); err != nil { configDev := util.ResolveDevice(configDev)
return err
}
log.Infof("Written to %s:\n%s", rancherConfig.MetaDataFile, string(metaDataBytes))
return nil if configDev == "" {
} return mount.Mount(configDevName, configDevMountPoint, "9p", "trans=virtio,version=9p2000.L")
func currentDatasource() (datasource.Datasource, error) {
cfg := rancherConfig.LoadConfig()
dss := getDatasources(cfg)
if len(dss) == 0 {
return nil, nil
} }
ds := selectDatasource(dss) return mount.Mount(configDev, configDevMountPoint, "iso9660,vfat", "")
return ds, nil
} }
func saveCloudConfig() error { func UnmountConfigDrive() error {
userDataBytes, metadata, err := fetchUserData() return syscall.Unmount(configDevMountPoint, 0)
}
func SaveCloudConfig(network bool) error {
userDataBytes, metadata, err := fetchUserData(network)
if err != nil { if err != nil {
return err return err
} }
@ -146,9 +118,67 @@ func saveCloudConfig() error {
return saveFiles(userDataBytes, scriptBytes, metadata) return saveFiles(userDataBytes, scriptBytes, metadata)
} }
func fetchUserData() ([]byte, datasource.Metadata, error) { func RequiresNetwork(datasource string) bool {
parts := strings.SplitN(datasource, ":", 2)
requiresNetwork, ok := map[string]bool{
"ec2": true,
"file": false,
"url": true,
"cmdline": true,
"configdrive": false,
"digitalocean": true,
"gce": true,
"packet": true,
}[parts[0]]
return ok && requiresNetwork
}
func saveFiles(cloudConfigBytes, scriptBytes []byte, metadata datasource.Metadata) error {
os.MkdirAll(rancherConfig.CloudConfigDir, os.ModeDir|0600)
if len(scriptBytes) > 0 {
log.Infof("Writing to %s", rancherConfig.CloudConfigScriptFile)
if err := util.WriteFileAtomic(rancherConfig.CloudConfigScriptFile, scriptBytes, 500); err != nil {
log.Errorf("Error while writing file %s: %v", rancherConfig.CloudConfigScriptFile, err)
return err
}
}
if len(cloudConfigBytes) > 0 {
if err := util.WriteFileAtomic(rancherConfig.CloudConfigBootFile, cloudConfigBytes, 400); err != nil {
return err
}
log.Infof("Written to %s:\n%s", rancherConfig.CloudConfigBootFile, string(cloudConfigBytes))
}
metaDataBytes, err := yaml.Marshal(metadata)
if err != nil {
return err
}
if err = util.WriteFileAtomic(rancherConfig.MetaDataFile, metaDataBytes, 400); err != nil {
return err
}
log.Infof("Written to %s:\n%s", rancherConfig.MetaDataFile, string(metaDataBytes))
return nil
}
func currentDatasource(network bool) (datasource.Datasource, error) {
cfg := rancherConfig.LoadConfig()
dss := getDatasources(cfg, network)
if len(dss) == 0 {
return nil, nil
}
ds := selectDatasource(dss)
return ds, nil
}
func fetchUserData(network bool) ([]byte, datasource.Metadata, error) {
var metadata datasource.Metadata var metadata datasource.Metadata
ds, err := currentDatasource() ds, err := currentDatasource(network)
if err != nil || ds == nil { if err != nil || ds == nil {
log.Errorf("Failed to select datasource: %v", err) log.Errorf("Failed to select datasource: %v", err)
return nil, metadata, err return nil, metadata, err
@ -170,7 +200,7 @@ func fetchUserData() ([]byte, datasource.Metadata, error) {
// getDatasources creates a slice of possible Datasources for cloudinit based // getDatasources creates a slice of possible Datasources for cloudinit based
// on the different source command-line flags. // on the different source command-line flags.
func getDatasources(cfg *rancherConfig.CloudConfig) []datasource.Datasource { func getDatasources(cfg *rancherConfig.CloudConfig, network bool) []datasource.Datasource {
dss := make([]datasource.Datasource, 0, 5) dss := make([]datasource.Datasource, 0, 5)
for _, ds := range cfg.Rancher.CloudInit.Datasources { for _, ds := range cfg.Rancher.CloudInit.Datasources {
@ -231,8 +261,8 @@ func getDatasources(cfg *rancherConfig.CloudConfig) []datasource.Datasource {
} }
func enableDoLinkLocal() { func enableDoLinkLocal() {
err := netconf.ApplyNetworkConfigs(&netconf.NetworkConfig{ err := netconf.ApplyNetworkConfigs(&rancherConfig.NetworkConfig{
Interfaces: map[string]netconf.InterfaceConfig{ Interfaces: map[string]rancherConfig.InterfaceConfig{
"eth0": { "eth0": {
IPV4LL: true, IPV4LL: true,
}, },

View File

@ -31,15 +31,15 @@ const (
userdataPath = apiVersion + "instance/attributes/user-data" userdataPath = apiVersion + "instance/attributes/user-data"
) )
type metadataService struct { type MetadataService struct {
metadata.MetadataService metadata.MetadataService
} }
func NewDatasource(root string) *metadataService { func NewDatasource(root string) *MetadataService {
return &metadataService{metadata.NewDatasource(root, apiVersion, userdataPath, metadataPath, http.Header{"Metadata-Flavor": {"Google"}})} return &MetadataService{metadata.NewDatasource(root, apiVersion, userdataPath, metadataPath, http.Header{"Metadata-Flavor": {"Google"}})}
} }
func (ms metadataService) FetchMetadata() (datasource.Metadata, error) { func (ms MetadataService) FetchMetadata() (datasource.Metadata, error) {
public, err := ms.fetchIP("instance/network-interfaces/0/access-configs/0/external-ip") public, err := ms.fetchIP("instance/network-interfaces/0/access-configs/0/external-ip")
if err != nil { if err != nil {
return datasource.Metadata{}, err return datasource.Metadata{}, err
@ -53,16 +53,16 @@ func (ms metadataService) FetchMetadata() (datasource.Metadata, error) {
return datasource.Metadata{}, err return datasource.Metadata{}, err
} }
projectSshKeys, err := ms.fetchString("project/attributes/sshKeys") projectSSHKeys, err := ms.fetchString("project/attributes/sshKeys")
if err != nil { if err != nil {
return datasource.Metadata{}, err return datasource.Metadata{}, err
} }
instanceSshKeys, err := ms.fetchString("instance/attributes/sshKeys") instanceSSHKeys, err := ms.fetchString("instance/attributes/sshKeys")
if err != nil { if err != nil {
return datasource.Metadata{}, err return datasource.Metadata{}, err
} }
keyStrings := strings.Split(projectSshKeys+"\n"+instanceSshKeys, "\n") keyStrings := strings.Split(projectSSHKeys+"\n"+instanceSSHKeys, "\n")
sshPublicKeys := map[string]string{} sshPublicKeys := map[string]string{}
i := 0 i := 0
@ -85,11 +85,11 @@ func (ms metadataService) FetchMetadata() (datasource.Metadata, error) {
}, nil }, nil
} }
func (ms metadataService) Type() string { func (ms MetadataService) Type() string {
return "gce-metadata-service" return "gce-metadata-service"
} }
func (ms metadataService) fetchString(key string) (string, error) { func (ms MetadataService) fetchString(key string) (string, error) {
data, err := ms.FetchData(ms.MetadataUrl() + key) data, err := ms.FetchData(ms.MetadataUrl() + key)
if err != nil { if err != nil {
return "", err return "", err
@ -98,7 +98,7 @@ func (ms metadataService) fetchString(key string) (string, error) {
return string(data), nil return string(data), nil
} }
func (ms metadataService) fetchIP(key string) (net.IP, error) { func (ms MetadataService) fetchIP(key string) (net.IP, error) {
str, err := ms.fetchString(key) str, err := ms.fetchString(key)
if err != nil { if err != nil {
return nil, err return nil, err
@ -110,12 +110,11 @@ func (ms metadataService) fetchIP(key string) (net.IP, error) {
if ip := net.ParseIP(str); ip != nil { if ip := net.ParseIP(str); ip != nil {
return ip, nil return ip, nil
} else {
return nil, fmt.Errorf("couldn't parse %q as IP address", str)
} }
return nil, fmt.Errorf("couldn't parse %q as IP address", str)
} }
func (ms metadataService) FetchUserdata() ([]byte, error) { func (ms MetadataService) FetchUserdata() ([]byte, error) {
data, err := ms.FetchData(ms.UserdataUrl()) data, err := ms.FetchData(ms.UserdataUrl())
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -8,20 +8,21 @@ import (
"path" "path"
"strings" "strings"
"github.com/rancher/os/log"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/Sirupsen/logrus"
"github.com/packethost/packngo/metadata" "github.com/packethost/packngo/metadata"
"github.com/rancher/netconf" "github.com/rancher/os/config"
rancherConfig "github.com/rancher/os/config" "github.com/rancher/os/netconf"
) )
func enablePacketNetwork(cfg *rancherConfig.RancherConfig) { func enablePacketNetwork(cfg *config.RancherConfig) {
bootStrapped := false bootStrapped := false
for _, v := range cfg.Network.Interfaces { for _, v := range cfg.Network.Interfaces {
if v.Address != "" { if v.Address != "" {
if err := netconf.ApplyNetworkConfigs(&cfg.Network); err != nil { if err := netconf.ApplyNetworkConfigs(&cfg.Network); err != nil {
logrus.Errorf("Failed to bootstrap network: %v", err) log.Errorf("Failed to bootstrap network: %v", err)
return return
} }
bootStrapped = true bootStrapped = true
@ -36,11 +37,11 @@ func enablePacketNetwork(cfg *rancherConfig.RancherConfig) {
c := metadata.NewClient(http.DefaultClient) c := metadata.NewClient(http.DefaultClient)
m, err := c.Metadata.Get() m, err := c.Metadata.Get()
if err != nil { if err != nil {
logrus.Errorf("Failed to get Packet metadata: %v", err) log.Errorf("Failed to get Packet metadata: %v", err)
return return
} }
bondCfg := netconf.InterfaceConfig{ bondCfg := config.InterfaceConfig{
Addresses: []string{}, Addresses: []string{},
BondOpts: map[string]string{ BondOpts: map[string]string{
"lacp_rate": "1", "lacp_rate": "1",
@ -51,11 +52,11 @@ func enablePacketNetwork(cfg *rancherConfig.RancherConfig) {
"mode": "4", "mode": "4",
}, },
} }
netCfg := netconf.NetworkConfig{ netCfg := config.NetworkConfig{
Interfaces: map[string]netconf.InterfaceConfig{}, Interfaces: map[string]config.InterfaceConfig{},
} }
for _, iface := range m.Network.Interfaces { for _, iface := range m.Network.Interfaces {
netCfg.Interfaces["mac="+iface.Mac] = netconf.InterfaceConfig{ netCfg.Interfaces["mac="+iface.Mac] = config.InterfaceConfig{
Bond: "bond0", Bond: "bond0",
} }
} }
@ -78,26 +79,26 @@ func enablePacketNetwork(cfg *rancherConfig.RancherConfig) {
netCfg.Interfaces["bond0"] = bondCfg netCfg.Interfaces["bond0"] = bondCfg
b, _ := yaml.Marshal(netCfg) b, _ := yaml.Marshal(netCfg)
logrus.Debugf("Generated network config: %s", string(b)) log.Debugf("Generated network config: %s", string(b))
cc := rancherConfig.CloudConfig{ cc := config.CloudConfig{
Rancher: rancherConfig.RancherConfig{ Rancher: config.RancherConfig{
Network: netCfg, Network: netCfg,
}, },
} }
// Post to phone home URL on first boot // Post to phone home URL on first boot
if _, err = os.Stat(rancherConfig.CloudConfigNetworkFile); err != nil { if _, err = os.Stat(config.CloudConfigNetworkFile); err != nil {
if _, err = http.Post(m.PhoneHomeURL, "application/json", bytes.NewReader([]byte{})); err != nil { if _, err = http.Post(m.PhoneHomeURL, "application/json", bytes.NewReader([]byte{})); err != nil {
logrus.Errorf("Failed to post to Packet phone home URL: %v", err) log.Errorf("Failed to post to Packet phone home URL: %v", err)
} }
} }
if err := os.MkdirAll(path.Dir(rancherConfig.CloudConfigNetworkFile), 0700); err != nil { if err := os.MkdirAll(path.Dir(config.CloudConfigNetworkFile), 0700); err != nil {
logrus.Errorf("Failed to create directory for file %s: %v", rancherConfig.CloudConfigNetworkFile, err) log.Errorf("Failed to create directory for file %s: %v", config.CloudConfigNetworkFile, err)
} }
if err := rancherConfig.WriteToFile(cc, rancherConfig.CloudConfigNetworkFile); err != nil { if err := config.WriteToFile(cc, config.CloudConfigNetworkFile); err != nil {
logrus.Errorf("Failed to save config file %s: %v", rancherConfig.CloudConfigNetworkFile, err) log.Errorf("Failed to save config file %s: %v", config.CloudConfigNetworkFile, err)
} }
} }

109
cmd/control/bootstrap.go Normal file
View File

@ -0,0 +1,109 @@
package control
import (
"io/ioutil"
"os"
"os/exec"
"strings"
"time"
"github.com/codegangsta/cli"
"github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util"
)
func bootstrapAction(c *cli.Context) error {
if err := UdevSettle(); err != nil {
log.Errorf("Failed to run udev settle: %v", err)
}
cfg := config.LoadConfig()
if cfg.Rancher.State.MdadmScan {
if err := mdadmScan(); err != nil {
log.Errorf("Failed to run mdadm scan: %v", err)
}
}
stateScript := cfg.Rancher.State.Script
if stateScript != "" {
if err := runStateScript(stateScript); err != nil {
log.Errorf("Failed to run state script: %v", err)
}
}
util.RunCommandSequence(cfg.Bootcmd)
if cfg.Rancher.State.Dev != "" && cfg.Rancher.State.Wait {
waitForRoot(cfg)
}
autoformatDevices := cfg.Rancher.State.Autoformat
if len(autoformatDevices) > 0 {
if err := autoformat(autoformatDevices); err != nil {
log.Errorf("Failed to run autoformat: %v", err)
}
}
if err := UdevSettle(); err != nil {
log.Errorf("Failed to run udev settle: %v", err)
}
return nil
}
func mdadmScan() error {
cmd := exec.Command("mdadm", "--assemble", "--scan")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func runStateScript(script string) error {
f, err := ioutil.TempFile("", "")
if err != nil {
return err
}
if _, err := f.WriteString(script); err != nil {
return err
}
if err := f.Chmod(os.ModePerm); err != nil {
return err
}
if err := f.Close(); err != nil {
return err
}
return util.RunScript(f.Name())
}
func waitForRoot(cfg *config.CloudConfig) {
var dev string
for i := 0; i < 30; i++ {
dev = util.ResolveDevice(cfg.Rancher.State.Dev)
if dev != "" {
break
}
time.Sleep(time.Millisecond * 1000)
}
if dev == "" {
return
}
for i := 0; i < 30; i++ {
if _, err := os.Stat(dev); err == nil {
break
}
time.Sleep(time.Millisecond * 1000)
}
}
func autoformat(autoformatDevices []string) error {
cmd := exec.Command("/usr/sbin/auto-format.sh")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Env = []string{
"AUTOFORMAT=" + strings.Join(autoformatDevices, " "),
}
return cmd.Run()
}

View File

@ -3,17 +3,19 @@ package control
import ( import (
"os" "os"
log "github.com/Sirupsen/logrus"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/rancher/os/cmd/control/service"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
) )
func Main() { func Main() {
log.InitLogger()
app := cli.NewApp() app := cli.NewApp()
app.Name = os.Args[0] app.Name = os.Args[0]
app.Usage = "Control and configure RancherOS" app.Usage = "Control and configure RancherOS"
app.Version = config.VERSION app.Version = config.Version
app.Author = "Rancher Labs, Inc." app.Author = "Rancher Labs, Inc."
app.EnableBashCompletion = true app.EnableBashCompletion = true
app.Before = func(c *cli.Context) error { app.Before = func(c *cli.Context) error {
@ -24,6 +26,13 @@ func Main() {
} }
app.Commands = []cli.Command{ app.Commands = []cli.Command{
{
Name: "bootstrap",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: bootstrapAction,
},
{ {
Name: "config", Name: "config",
ShortName: "c", ShortName: "c",
@ -37,14 +46,27 @@ func Main() {
HideHelp: true, HideHelp: true,
Subcommands: consoleSubcommands(), Subcommands: consoleSubcommands(),
}, },
{
Name: "console-init",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: consoleInitAction,
},
{ {
Name: "dev", Name: "dev",
ShortName: "d", Hidden: true,
Usage: "dev spec",
HideHelp: true, HideHelp: true,
SkipFlagParsing: true, SkipFlagParsing: true,
Action: devAction, Action: devAction,
}, },
{
Name: "docker-init",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: dockerInitAction,
},
{ {
Name: "engine", Name: "engine",
Usage: "manage which Docker engine is used", Usage: "manage which Docker engine is used",
@ -53,31 +75,59 @@ func Main() {
}, },
{ {
Name: "entrypoint", Name: "entrypoint",
Hidden: true,
HideHelp: true, HideHelp: true,
SkipFlagParsing: true, SkipFlagParsing: true,
Action: entrypointAction, Action: entrypointAction,
}, },
{ {
Name: "env", Name: "env",
ShortName: "e", Hidden: true,
Usage: "env command",
HideHelp: true, HideHelp: true,
SkipFlagParsing: true, SkipFlagParsing: true,
Action: envAction, Action: envAction,
}, },
serviceCommand(), service.Commands(),
{ {
Name: "os", Name: "os",
Usage: "operating system upgrade/downgrade", Usage: "operating system upgrade/downgrade",
HideHelp: true, HideHelp: true,
Subcommands: osSubcommands(), Subcommands: osSubcommands(),
}, },
{
Name: "preload-images",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: preloadImagesAction,
},
{
Name: "switch-console",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: switchConsoleAction,
},
{ {
Name: "tls", Name: "tls",
Usage: "setup tls configuration", Usage: "setup tls configuration",
HideHelp: true, HideHelp: true,
Subcommands: tlsConfCommands(), Subcommands: tlsConfCommands(),
}, },
{
Name: "udev-settle",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: udevSettleAction,
},
{
Name: "user-docker",
Hidden: true,
HideHelp: true,
SkipFlagParsing: true,
Action: userDockerAction,
},
installCommand, installCommand,
selinuxCommand(), selinuxCommand(),
} }

View File

@ -9,8 +9,8 @@ import (
"strings" "strings"
"text/template" "text/template"
log "github.com/Sirupsen/logrus"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/rancher/os/log"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/rancher/os/config" "github.com/rancher/os/config"
@ -76,6 +76,17 @@ func configSubcommands() []cli.Command {
}, },
}, },
}, },
{
Name: "validate",
Usage: "validate configuration from stdin",
Action: validate,
Flags: []cli.Flag{
cli.StringFlag{
Name: "input, i",
Usage: "File from which to read",
},
},
},
} }
} }
@ -85,9 +96,6 @@ func imagesFromConfig(cfg *config.CloudConfig) []string {
for _, service := range cfg.Rancher.BootstrapContainers { for _, service := range cfg.Rancher.BootstrapContainers {
imagesMap[service.Image] = 1 imagesMap[service.Image] = 1
} }
for _, service := range cfg.Rancher.Autoformat {
imagesMap[service.Image] = 1
}
for _, service := range cfg.Rancher.Services { for _, service := range cfg.Rancher.Services {
imagesMap[service.Image] = 1 imagesMap[service.Image] = 1
} }
@ -96,7 +104,7 @@ func imagesFromConfig(cfg *config.CloudConfig) []string {
i := 0 i := 0
for image := range imagesMap { for image := range imagesMap {
images[i] = image images[i] = image
i += 1 i++
} }
sort.Strings(images) sort.Strings(images)
return images return images
@ -186,18 +194,7 @@ func configGet(c *cli.Context) error {
} }
func merge(c *cli.Context) error { func merge(c *cli.Context) error {
input := os.Stdin bytes, err := inputBytes(c)
inputFile := c.String("input")
if inputFile != "" {
var err error
input, err = os.Open(inputFile)
if err != nil {
log.Fatal(err)
}
defer input.Close()
}
bytes, err := ioutil.ReadAll(input)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -227,3 +224,32 @@ func export(c *cli.Context) error {
return nil return nil
} }
func validate(c *cli.Context) error {
bytes, err := inputBytes(c)
if err != nil {
log.Fatal(err)
}
validationErrors, err := config.Validate(bytes)
if err != nil {
log.Fatal(err)
}
for _, validationError := range validationErrors.Errors() {
log.Error(validationError)
}
return nil
}
func inputBytes(c *cli.Context) ([]byte, error) {
input := os.Stdin
inputFile := c.String("input")
if inputFile != "" {
var err error
input, err = os.Open(inputFile)
if err != nil {
return nil, err
}
defer input.Close()
}
return ioutil.ReadAll(input)
}

View File

@ -1,21 +1,19 @@
package control package control
import ( import (
"bufio"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os"
"sort" "sort"
"strings" "strings"
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
"github.com/docker/libcompose/project/options" "github.com/docker/libcompose/project/options"
"github.com/rancher/os/compose" "github.com/rancher/os/compose"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util/network" "github.com/rancher/os/util/network"
) )
@ -61,12 +59,11 @@ func consoleSwitch(c *cli.Context) error {
} }
if !c.Bool("force") { if !c.Bool("force") {
in := bufio.NewReader(os.Stdin)
fmt.Println(`Switching consoles will fmt.Println(`Switching consoles will
1. destroy the current console container 1. destroy the current console container
2. log you out 2. log you out
3. restart Docker`) 3. restart Docker`)
if !yes(in, "Continue") { if !yes("Continue") {
return nil return nil
} }
} }
@ -82,11 +79,11 @@ func consoleSwitch(c *cli.Context) error {
Privileged: true, Privileged: true,
Net: "host", Net: "host",
Pid: "host", Pid: "host",
Image: config.OS_BASE, Image: config.OsBase,
Labels: map[string]string{ Labels: map[string]string{
config.SCOPE: config.SYSTEM, config.ScopeLabel: config.System,
}, },
Command: []string{"/usr/bin/switch-console", newConsole}, Command: []string{"/usr/bin/ros", "switch-console", newConsole},
VolumesFrom: []string{"all-volumes"}, VolumesFrom: []string{"all-volumes"},
}) })
if err != nil { if err != nil {

View File

@ -1,4 +1,4 @@
package console package control
import ( import (
"bytes" "bytes"
@ -11,9 +11,10 @@ import (
"strings" "strings"
"syscall" "syscall"
log "github.com/Sirupsen/logrus" "github.com/codegangsta/cli"
"github.com/rancher/os/cmd/cloudinitexecute" "github.com/rancher/os/cmd/cloudinitexecute"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
) )
@ -29,7 +30,7 @@ type symlink struct {
oldname, newname string oldname, newname string
} }
func Main() { func consoleInitAction(c *cli.Context) error {
cfg := config.LoadConfig() cfg := config.LoadConfig()
if _, err := os.Stat(rancherHome); os.IsNotExist(err) { if _, err := os.Stat(rancherHome); os.IsNotExist(err) {
@ -74,10 +75,6 @@ func Main() {
log.Error(err) log.Error(err)
} }
if err := writeOsRelease(); err != nil {
log.Error(err)
}
for _, link := range []symlink{ for _, link := range []symlink{
{"/var/lib/rancher/engine/docker", "/usr/bin/docker"}, {"/var/lib/rancher/engine/docker", "/usr/bin/docker"},
{"/var/lib/rancher/engine/docker-containerd", "/usr/bin/docker-containerd"}, {"/var/lib/rancher/engine/docker-containerd", "/usr/bin/docker-containerd"},
@ -86,6 +83,8 @@ func Main() {
{"/var/lib/rancher/engine/dockerd", "/usr/bin/dockerd"}, {"/var/lib/rancher/engine/dockerd", "/usr/bin/dockerd"},
{"/var/lib/rancher/engine/docker-proxy", "/usr/bin/docker-proxy"}, {"/var/lib/rancher/engine/docker-proxy", "/usr/bin/docker-proxy"},
{"/var/lib/rancher/engine/docker-runc", "/usr/bin/docker-runc"}, {"/var/lib/rancher/engine/docker-runc", "/usr/bin/docker-runc"},
{"/usr/share/rancher/os-release", "/usr/lib/os-release"},
{"/usr/share/rancher/os-release", "/etc/os-release"},
} { } {
syscall.Unlink(link.newname) syscall.Unlink(link.newname)
if err := os.Symlink(link.oldname, link.newname); err != nil { if err := os.Symlink(link.oldname, link.newname); err != nil {
@ -105,10 +104,10 @@ func Main() {
cloudinitexecute.ApplyConsole(cfg) cloudinitexecute.ApplyConsole(cfg)
if err := runScript(config.CloudConfigScriptFile); err != nil { if err := util.RunScript(config.CloudConfigScriptFile); err != nil {
log.Error(err) log.Error(err)
} }
if err := runScript(startScript); err != nil { if err := util.RunScript(startScript); err != nil {
log.Error(err) log.Error(err)
} }
@ -116,7 +115,7 @@ func Main() {
log.Error(err) log.Error(err)
} }
if err := runScript("/etc/rc.local"); err != nil { if err := util.RunScript("/etc/rc.local"); err != nil {
log.Error(err) log.Error(err)
} }
@ -124,10 +123,10 @@ func Main() {
respawnBinPath, err := exec.LookPath("respawn") respawnBinPath, err := exec.LookPath("respawn")
if err != nil { if err != nil {
log.Fatal(err) return err
} }
log.Fatal(syscall.Exec(respawnBinPath, []string{"respawn", "-f", "/etc/respawn.conf"}, os.Environ())) return syscall.Exec(respawnBinPath, []string{"respawn", "-f", "/etc/respawn.conf"}, os.Environ())
} }
func generateRespawnConf(cmdline string) string { func generateRespawnConf(cmdline string) string {
@ -211,33 +210,6 @@ func modifySshdConfig() error {
return ioutil.WriteFile("/etc/ssh/sshd_config", []byte(sshdConfigString), 0644) return ioutil.WriteFile("/etc/ssh/sshd_config", []byte(sshdConfigString), 0644)
} }
func writeOsRelease() error {
idLike := "busybox"
if osRelease, err := ioutil.ReadFile("/etc/os-release"); err == nil {
for _, line := range strings.Split(string(osRelease), "\n") {
if strings.HasPrefix(line, "ID_LIKE") {
split := strings.Split(line, "ID_LIKE")
if len(split) > 1 {
idLike = split[1]
}
}
}
}
return ioutil.WriteFile("/etc/os-release", []byte(fmt.Sprintf(`
NAME="RancherOS"
VERSION=%s
ID=rancheros
ID_LIKE=%s
VERSION_ID=%s
PRETTY_NAME="RancherOS %s"
HOME_URL=
SUPPORT_URL=
BUG_REPORT_URL=
BUILD_ID=
`, config.VERSION, idLike, config.VERSION, config.VERSION)), 0644)
}
func setupSSH(cfg *config.CloudConfig) error { func setupSSH(cfg *config.CloudConfig) error {
for _, keyType := range []string{"rsa", "dsa", "ecdsa", "ed25519"} { for _, keyType := range []string{"rsa", "dsa", "ecdsa", "ed25519"} {
outputFile := fmt.Sprintf("/etc/ssh/ssh_host_%s_key", keyType) outputFile := fmt.Sprintf("/etc/ssh/ssh_host_%s_key", keyType)
@ -247,8 +219,8 @@ func setupSSH(cfg *config.CloudConfig) error {
continue continue
} }
saved, savedExists := cfg.Rancher.Ssh.Keys[keyType] saved, savedExists := cfg.Rancher.SSH.Keys[keyType]
pub, pubExists := cfg.Rancher.Ssh.Keys[keyType+"-pub"] pub, pubExists := cfg.Rancher.SSH.Keys[keyType+"-pub"]
if savedExists && pubExists { if savedExists && pubExists {
// TODO check permissions // TODO check permissions
@ -282,29 +254,3 @@ func setupSSH(cfg *config.CloudConfig) error {
return os.MkdirAll("/var/run/sshd", 0644) return os.MkdirAll("/var/run/sshd", 0644)
} }
func runScript(path string) error {
if !util.ExistsAndExecutable(path) {
return nil
}
script, err := os.Open(path)
if err != nil {
return err
}
magic := make([]byte, 2)
if _, err = script.Read(magic); err != nil {
return err
}
cmd := exec.Command("/bin/sh", path)
if string(magic) == "#!" {
cmd = exec.Command(path)
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}

View File

@ -1,4 +1,4 @@
package dockerinit package control
import ( import (
"fmt" "fmt"
@ -9,19 +9,19 @@ import (
"syscall" "syscall"
"time" "time"
log "github.com/Sirupsen/logrus" "github.com/codegangsta/cli"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
) )
const ( const (
consoleDone = "/run/console-done" dockerConf = "/var/lib/rancher/conf/docker"
dockerConf = "/var/lib/rancher/conf/docker" dockerDone = "/run/docker-done"
dockerDone = "/run/docker-done" dockerLog = "/var/log/docker.log"
dockerLog = "/var/log/docker.log"
) )
func Main() { func dockerInitAction(c *cli.Context) error {
for { for {
if _, err := os.Stat(consoleDone); err == nil { if _, err := os.Stat(consoleDone); err == nil {
break break
@ -54,7 +54,7 @@ func Main() {
mountInfo, err := ioutil.ReadFile("/proc/self/mountinfo") mountInfo, err := ioutil.ReadFile("/proc/self/mountinfo")
if err != nil { if err != nil {
log.Fatal(err) return err
} }
for _, mount := range strings.Split(string(mountInfo), "\n") { for _, mount := range strings.Split(string(mountInfo), "\n") {
@ -66,7 +66,7 @@ func Main() {
args := []string{ args := []string{
"bash", "bash",
"-c", "-c",
fmt.Sprintf(`[ -e %s ] && source %s; exec /usr/bin/dockerlaunch %s %s $DOCKER_OPTS >> %s 2>&1`, dockerConf, dockerConf, dockerBin, strings.Join(os.Args[1:], " "), dockerLog), fmt.Sprintf(`[ -e %s ] && source %s; exec /usr/bin/dockerlaunch %s %s $DOCKER_OPTS >> %s 2>&1`, dockerConf, dockerConf, dockerBin, strings.Join(c.Args(), " "), dockerLog),
} }
cfg := config.LoadConfig() cfg := config.LoadConfig()
@ -75,5 +75,5 @@ func Main() {
log.Error(err) log.Error(err)
} }
log.Fatal(syscall.Exec("/bin/bash", args, os.Environ())) return syscall.Exec("/bin/bash", args, os.Environ())
} }

View File

@ -8,18 +8,14 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/docker/libcompose/project/options" "github.com/docker/libcompose/project/options"
"github.com/rancher/os/compose" "github.com/rancher/os/compose"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util/network" "github.com/rancher/os/util/network"
) )
const (
dockerDone = "/run/docker-done"
)
func engineSubcommands() []cli.Command { func engineSubcommands() []cli.Command {
return []cli.Command{ return []cli.Command{
{ {

View File

@ -5,8 +5,8 @@ import (
"os/exec" "os/exec"
"syscall" "syscall"
log "github.com/Sirupsen/logrus"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/rancher/os/log"
"golang.org/x/net/context" "golang.org/x/net/context"
"github.com/rancher/os/cmd/cloudinitexecute" "github.com/rancher/os/cmd/cloudinitexecute"
@ -45,6 +45,8 @@ func entrypointAction(c *cli.Context) error {
writeFiles(cfg) writeFiles(cfg)
} }
setupPowerOperations()
if len(os.Args) < 3 { if len(os.Args) < 3 {
return nil return nil
} }
@ -58,7 +60,7 @@ func entrypointAction(c *cli.Context) error {
} }
func writeFiles(cfg *config.CloudConfig) error { func writeFiles(cfg *config.CloudConfig) error {
id, err := util.GetCurrentContainerId() id, err := util.GetCurrentContainerID()
if err != nil { if err != nil {
return err return err
} }
@ -74,3 +76,29 @@ func writeFiles(cfg *config.CloudConfig) error {
cloudinitexecute.WriteFiles(cfg, info.Name[1:]) cloudinitexecute.WriteFiles(cfg, info.Name[1:])
return nil return nil
} }
func setupPowerOperations() {
for _, powerOperation := range []string{
"/sbin/poweroff",
"/sbin/shutdown",
"/sbin/reboot",
"/sbin/halt",
"/usr/sbin/poweroff",
"/usr/sbin/shutdown",
"/usr/sbin/reboot",
"/usr/sbin/halt",
} {
os.Remove(powerOperation)
}
for _, link := range []symlink{
{config.RosBin, "/sbin/poweroff"},
{config.RosBin, "/sbin/reboot"},
{config.RosBin, "/sbin/halt"},
{config.RosBin, "/sbin/shutdown"},
} {
if err := os.Symlink(link.oldname, link.newname); err != nil {
log.Error(err)
}
}
}

View File

@ -1,13 +1,12 @@
package control package control
import ( import (
"bufio"
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"strings" "strings"
log "github.com/Sirupsen/logrus" "github.com/rancher/os/log"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/rancher/os/cmd/power" "github.com/rancher/os/cmd/power"
@ -22,8 +21,10 @@ var installCommand = cli.Command{
Action: installAction, Action: installAction,
Flags: []cli.Flag{ Flags: []cli.Flag{
cli.StringFlag{ cli.StringFlag{
Name: "image, i", // TODO: need to validate ? -i rancher/os:v0.3.1 just sat there.
Usage: "install from a certain image", Name: "image, i",
Usage: `install from a certain image (e.g., 'rancher/os:v0.7.0')
use 'ros os list' to see what versions are available.`,
}, },
cli.StringFlag{ cli.StringFlag{
Name: "install-type, t", Name: "install-type, t",
@ -65,7 +66,7 @@ func installAction(c *cli.Context) error {
image := c.String("image") image := c.String("image")
cfg := config.LoadConfig() cfg := config.LoadConfig()
if image == "" { if image == "" {
image = cfg.Rancher.Upgrade.Image + ":" + config.VERSION + config.SUFFIX image = cfg.Rancher.Upgrade.Image + ":" + config.Version + config.Suffix
} }
installType := c.String("install-type") installType := c.String("install-type")
@ -97,12 +98,10 @@ func installAction(c *cli.Context) error {
} }
func runInstall(image, installType, cloudConfig, device, append string, force, reboot bool) error { func runInstall(image, installType, cloudConfig, device, append string, force, reboot bool) error {
in := bufio.NewReader(os.Stdin)
fmt.Printf("Installing from %s\n", image) fmt.Printf("Installing from %s\n", image)
if !force { if !force {
if !yes(in, "Continue") { if !yes("Continue") {
os.Exit(1) os.Exit(1)
} }
} }
@ -122,7 +121,7 @@ func runInstall(image, installType, cloudConfig, device, append string, force, r
return err return err
} }
if reboot && (force || yes(in, "Continue with reboot")) { if reboot && (force || yes("Continue with reboot")) {
log.Info("Rebooting") log.Info("Rebooting")
power.Reboot() power.Reboot()
} }

View File

@ -1,7 +1,6 @@
package control package control
import ( import (
"bufio"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -11,8 +10,8 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/rancher/os/log"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
dockerClient "github.com/docker/engine-api/client" dockerClient "github.com/docker/engine-api/client"
@ -79,31 +78,32 @@ func osSubcommands() []cli.Command {
} }
} }
// TODO: this and the getLatestImage should probably move to utils/network and be suitably cached.
func getImages() (*Images, error) { func getImages() (*Images, error) {
upgradeUrl, err := getUpgradeUrl() upgradeURL, err := getUpgradeURL()
if err != nil { if err != nil {
return nil, err return nil, err
} }
var body []byte var body []byte
if strings.HasPrefix(upgradeUrl, "/") { if strings.HasPrefix(upgradeURL, "/") {
body, err = ioutil.ReadFile(upgradeUrl) body, err = ioutil.ReadFile(upgradeURL)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} else { } else {
u, err := url.Parse(upgradeUrl) u, err := url.Parse(upgradeURL)
if err != nil { if err != nil {
return nil, err return nil, err
} }
q := u.Query() q := u.Query()
q.Set("current", config.VERSION) q.Set("current", config.Version)
u.RawQuery = q.Encode() u.RawQuery = q.Encode()
upgradeUrl = u.String() upgradeURL = u.String()
resp, err := http.Get(upgradeUrl) resp, err := http.Get(upgradeURL)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -128,13 +128,30 @@ func osMetaDataGet(c *cli.Context) error {
log.Fatal(err) log.Fatal(err)
} }
for _, image := range images.Available { cfg := config.LoadConfig()
runningName := cfg.Rancher.Upgrade.Image + ":" + config.Version
foundRunning := false
for i := len(images.Available) - 1; i >= 0; i-- {
image := images.Available[i]
_, _, err := client.ImageInspectWithRaw(context.Background(), image, false) _, _, err := client.ImageInspectWithRaw(context.Background(), image, false)
local := "local"
if dockerClient.IsErrImageNotFound(err) { if dockerClient.IsErrImageNotFound(err) {
fmt.Println(image, "remote") local = "remote"
} else {
fmt.Println(image, "local")
} }
available := "available"
if image == images.Current {
available = "latest"
}
var running string
if image == runningName {
foundRunning = true
running = "running"
}
fmt.Println(image, local, available, running)
}
if !foundRunning {
fmt.Println(config.Version, "running")
} }
return nil return nil
@ -173,16 +190,14 @@ func osUpgrade(c *cli.Context) error {
} }
func osVersion(c *cli.Context) error { func osVersion(c *cli.Context) error {
fmt.Println(config.VERSION) fmt.Println(config.Version)
return nil return nil
} }
func startUpgradeContainer(image string, stage, force, reboot, kexec bool, upgradeConsole bool, kernelArgs string) error { func startUpgradeContainer(image string, stage, force, reboot, kexec bool, upgradeConsole bool, kernelArgs string) error {
in := bufio.NewReader(os.Stdin)
command := []string{ command := []string{
"-t", "rancher-upgrade", "-t", "rancher-upgrade",
"-r", config.VERSION, "-r", config.Version,
} }
if kexec { if kexec {
@ -203,10 +218,10 @@ func startUpgradeContainer(image string, stage, force, reboot, kexec bool, upgra
fmt.Printf("Upgrading to %s\n", image) fmt.Printf("Upgrading to %s\n", image)
confirmation := "Continue" confirmation := "Continue"
imageSplit := strings.Split(image, ":") imageSplit := strings.Split(image, ":")
if len(imageSplit) > 1 && imageSplit[1] == config.VERSION+config.SUFFIX { if len(imageSplit) > 1 && imageSplit[1] == config.Version+config.Suffix {
confirmation = fmt.Sprintf("Already at version %s. Continue anyway", imageSplit[1]) confirmation = fmt.Sprintf("Already at version %s. Continue anyway", imageSplit[1])
} }
if !force && !yes(in, confirmation) { if !force && !yes(confirmation) {
os.Exit(1) os.Exit(1)
} }
@ -217,7 +232,7 @@ func startUpgradeContainer(image string, stage, force, reboot, kexec bool, upgra
Pid: "host", Pid: "host",
Image: image, Image: image,
Labels: map[string]string{ Labels: map[string]string{
config.SCOPE: config.SYSTEM, config.ScopeLabel: config.System,
}, },
Command: command, Command: command,
}) })
@ -256,7 +271,7 @@ func startUpgradeContainer(image string, stage, force, reboot, kexec bool, upgra
return err return err
} }
if reboot && (force || yes(in, "Continue with reboot")) { if reboot && (force || yes("Continue with reboot")) {
log.Info("Rebooting") log.Info("Rebooting")
power.Reboot() power.Reboot()
} }
@ -275,7 +290,7 @@ func parseBody(body []byte) (*Images, error) {
return update, nil return update, nil
} }
func getUpgradeUrl() (string, error) { func getUpgradeURL() (string, error) {
cfg := config.LoadConfig() cfg := config.LoadConfig()
return cfg.Rancher.Upgrade.Url, nil return cfg.Rancher.Upgrade.URL, nil
} }

106
cmd/control/preload.go Normal file
View File

@ -0,0 +1,106 @@
package control
import (
"compress/gzip"
"context"
"fmt"
"io"
"io/ioutil"
"os"
"path"
"regexp"
"strings"
"github.com/codegangsta/cli"
dockerClient "github.com/docker/engine-api/client"
"github.com/rancher/os/docker"
"github.com/rancher/os/log"
)
const (
userImagesPreloadDirectory = "/var/lib/rancher/preload/docker"
)
func preloadImagesAction(c *cli.Context) error {
return PreloadImages(docker.NewDefaultClient, userImagesPreloadDirectory)
}
func shouldLoad(file string) bool {
if strings.HasSuffix(file, ".done") {
return false
}
if _, err := os.Stat(fmt.Sprintf("%s.done", file)); err == nil {
return false
}
return true
}
func PreloadImages(clientFactory func() (dockerClient.APIClient, error), imagesDir string) error {
var client dockerClient.APIClient
clientInitialized := false
if _, err := os.Stat(imagesDir); os.IsNotExist(err) {
if err = os.MkdirAll(imagesDir, 0755); err != nil {
return err
}
} else if err != nil {
return err
}
files, err := ioutil.ReadDir(imagesDir)
if err != nil {
return err
}
for _, file := range files {
filename := path.Join(imagesDir, file.Name())
if !shouldLoad(filename) {
continue
}
image, err := os.Open(filename)
if err != nil {
return err
}
var imageReader io.Reader
imageReader = image
match, err := regexp.MatchString(".t?gz$", file.Name())
if err != nil {
return err
}
if match {
imageReader, err = gzip.NewReader(image)
if err != nil {
return err
}
}
if !clientInitialized {
client, err = clientFactory()
if err != nil {
return err
}
clientInitialized = true
}
log.Infof("Loading image %s", filename)
if _, err = client.ImageLoad(context.Background(), imageReader, false); err != nil {
return err
}
if err = image.Close(); err != nil {
return err
}
doneStamp, err := os.Create(fmt.Sprintf("%s.done", filename))
if err != nil {
return err
}
if err = doneStamp.Close(); err != nil {
return err
}
}
return nil
}

View File

@ -50,7 +50,7 @@ func selinuxCommand() cli.Command {
"-v", "/etc/selinux:/etc/selinux", "-v", "/etc/selinux:/etc/selinux",
"-v", "/var/lib/selinux:/var/lib/selinux", "-v", "/var/lib/selinux:/var/lib/selinux",
"-v", "/usr/share/selinux:/usr/share/selinux", "-v", "/usr/share/selinux:/usr/share/selinux",
fmt.Sprintf("%s/os-selinuxtools:%s%s", config.OS_REPO, config.VERSION, config.SUFFIX), "bash"} fmt.Sprintf("%s/os-selinuxtools:%s%s", config.OsRepo, config.Version, config.Suffix), "bash"}
syscall.Exec("/bin/system-docker", argv, []string{}) syscall.Exec("/bin/system-docker", argv, []string{})
return nil return nil
} }

View File

@ -0,0 +1,180 @@
package app
import (
"fmt"
"os"
"os/signal"
"strings"
"syscall"
"github.com/rancher/os/log"
"golang.org/x/net/context"
"github.com/codegangsta/cli"
"github.com/docker/libcompose/project"
"github.com/docker/libcompose/project/options"
)
func ProjectPs(p project.APIProject, c *cli.Context) error {
qFlag := c.Bool("q")
allInfo, err := p.Ps(context.Background(), qFlag, c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
os.Stdout.WriteString(allInfo.String(!qFlag))
return nil
}
func ProjectStop(p project.APIProject, c *cli.Context) error {
err := p.Stop(context.Background(), c.Int("timeout"), c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectDown(p project.APIProject, c *cli.Context) error {
options := options.Down{
RemoveVolume: c.Bool("volumes"),
RemoveImages: options.ImageType(c.String("rmi")),
RemoveOrphans: c.Bool("remove-orphans"),
}
err := p.Down(context.Background(), options, c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectBuild(p project.APIProject, c *cli.Context) error {
config := options.Build{
NoCache: c.Bool("no-cache"),
ForceRemove: c.Bool("force-rm"),
Pull: c.Bool("pull"),
}
err := p.Build(context.Background(), config, c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectCreate(p project.APIProject, c *cli.Context) error {
options := options.Create{
NoRecreate: c.Bool("no-recreate"),
ForceRecreate: c.Bool("force-recreate"),
NoBuild: c.Bool("no-build"),
}
err := p.Create(context.Background(), options, c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectUp(p project.APIProject, c *cli.Context) error {
options := options.Up{
Create: options.Create{
NoRecreate: c.Bool("no-recreate"),
ForceRecreate: c.Bool("force-recreate"),
NoBuild: c.Bool("no-build"),
},
}
ctx, cancelFun := context.WithCancel(context.Background())
err := p.Up(ctx, options, c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
if c.Bool("foreground") {
signalChan := make(chan os.Signal, 1)
cleanupDone := make(chan bool)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
errChan := make(chan error)
go func() {
errChan <- p.Log(ctx, true, c.Args()...)
}()
go func() {
select {
case <-signalChan:
fmt.Printf("\nGracefully stopping...\n")
cancelFun()
ProjectStop(p, c)
cleanupDone <- true
case err := <-errChan:
if err != nil {
log.Fatal(err)
}
cleanupDone <- true
}
}()
<-cleanupDone
return nil
}
return nil
}
func ProjectStart(p project.APIProject, c *cli.Context) error {
err := p.Start(context.Background(), c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectRestart(p project.APIProject, c *cli.Context) error {
err := p.Restart(context.Background(), c.Int("timeout"), c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectLog(p project.APIProject, c *cli.Context) error {
err := p.Log(context.Background(), c.Bool("follow"), c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectPull(p project.APIProject, c *cli.Context) error {
err := p.Pull(context.Background(), c.Args()...)
if err != nil && !c.Bool("ignore-pull-failures") {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectDelete(p project.APIProject, c *cli.Context) error {
options := options.Delete{
RemoveVolume: c.Bool("v"),
}
if !c.Bool("force") {
options.BeforeDeleteCallback = func(stoppedContainers []string) bool {
fmt.Printf("Going to remove %v\nAre you sure? [yN]\n", strings.Join(stoppedContainers, ", "))
var answer string
_, err := fmt.Scanln(&answer)
if err != nil {
log.Error(err)
return false
}
if answer != "y" && answer != "Y" {
return false
}
return true
}
}
err := p.Delete(context.Background(), options, c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}
func ProjectKill(p project.APIProject, c *cli.Context) error {
err := p.Kill(context.Background(), c.String("signal"), c.Args()...)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
return nil
}

View File

@ -0,0 +1,243 @@
package command
import (
"errors"
"github.com/codegangsta/cli"
composeApp "github.com/docker/libcompose/cli/app"
"github.com/rancher/os/cmd/control/service/app"
)
func verifyOneOrMoreServices(c *cli.Context) error {
if len(c.Args()) == 0 {
return errors.New("Must specify one or more services")
}
return nil
}
func CreateCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "create",
Usage: "Create services",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectCreate),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "no-recreate",
Usage: "If containers already exist, don't recreate them. Incompatible with --force-recreate.",
},
cli.BoolFlag{
Name: "force-recreate",
Usage: "Recreate containers even if their configuration and image haven't changed. Incompatible with --no-recreate.",
},
cli.BoolFlag{
Name: "no-build",
Usage: "Don't build an image, even if it's missing.",
},
},
}
}
func BuildCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "build",
Usage: "Build or rebuild services",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectBuild),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "no-cache",
Usage: "Do not use cache when building the image",
},
cli.BoolFlag{
Name: "force-rm",
Usage: "Always remove intermediate containers",
},
cli.BoolFlag{
Name: "pull",
Usage: "Always attempt to pull a newer version of the image",
},
},
}
}
func PsCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "ps",
Usage: "List containers",
Action: composeApp.WithProject(factory, app.ProjectPs),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "q",
Usage: "Only display IDs",
},
},
}
}
func UpCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "up",
Usage: "Create and start containers",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectUp),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "foreground",
Usage: "Run in foreground and log",
},
cli.BoolFlag{
Name: "no-build",
Usage: "Don't build an image, even if it's missing.",
},
cli.BoolFlag{
Name: "no-recreate",
Usage: "If containers already exist, don't recreate them. Incompatible with --force-recreate.",
},
cli.BoolFlag{
Name: "force-recreate",
Usage: "Recreate containers even if their configuration and image haven't changed. Incompatible with --no-recreate.",
},
},
}
}
func StartCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "start",
Usage: "Start services",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectStart),
Flags: []cli.Flag{
cli.BoolTFlag{
Name: "foreground",
Usage: "Run in foreground and log",
},
},
}
}
func PullCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "pull",
Usage: "Pulls service images",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectPull),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "ignore-pull-failures",
Usage: "Pull what it can and ignores images with pull failures.",
},
},
}
}
func LogsCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "logs",
Usage: "View output from containers",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectLog),
Flags: []cli.Flag{
cli.IntFlag{
Name: "lines",
Usage: "number of lines to tail",
Value: 100,
},
cli.BoolFlag{
Name: "follow",
Usage: "Follow log output.",
},
},
}
}
func RestartCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "restart",
Usage: "Restart services",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectRestart),
Flags: []cli.Flag{
cli.IntFlag{
Name: "timeout,t",
Usage: "Specify a shutdown timeout in seconds.",
Value: 10,
},
},
}
}
func StopCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "stop",
Usage: "Stop services",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectStop),
Flags: []cli.Flag{
cli.IntFlag{
Name: "timeout,t",
Usage: "Specify a shutdown timeout in seconds.",
Value: 10,
},
},
}
}
func DownCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "down",
Usage: "Stop and remove containers, networks, images, and volumes",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectDown),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "volumes,v",
Usage: "Remove data volumes",
},
cli.StringFlag{
Name: "rmi",
Usage: "Remove images, type may be one of: 'all' to remove all images, or 'local' to remove only images that don't have an custom name set by the `image` field",
},
cli.BoolFlag{
Name: "remove-orphans",
Usage: "Remove containers for services not defined in the Compose file",
},
},
}
}
func RmCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "rm",
Usage: "Delete services",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectDelete),
Flags: []cli.Flag{
cli.BoolFlag{
Name: "force,f",
Usage: "Allow deletion of all services",
},
cli.BoolFlag{
Name: "v",
Usage: "Remove volumes associated with containers",
},
},
}
}
func KillCommand(factory composeApp.ProjectFactory) cli.Command {
return cli.Command{
Name: "kill",
Usage: "Kill containers",
Before: verifyOneOrMoreServices,
Action: composeApp.WithProject(factory, app.ProjectKill),
Flags: []cli.Flag{
cli.StringFlag{
Name: "signal,s",
Usage: "SIGNAL to send to the container",
Value: "SIGKILL",
},
},
}
}

View File

@ -1,16 +1,16 @@
package control package service
import ( import (
"fmt" "fmt"
"strings" "strings"
"github.com/Sirupsen/logrus"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/docker/libcompose/cli/command"
dockerApp "github.com/docker/libcompose/cli/docker/app" dockerApp "github.com/docker/libcompose/cli/docker/app"
"github.com/docker/libcompose/project" "github.com/docker/libcompose/project"
"github.com/rancher/os/cmd/control/service/command"
"github.com/rancher/os/compose" "github.com/rancher/os/compose"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util/network" "github.com/rancher/os/util/network"
) )
@ -24,12 +24,12 @@ func (p *projectFactory) Create(c *cli.Context) (project.APIProject, error) {
func beforeApp(c *cli.Context) error { func beforeApp(c *cli.Context) error {
if c.GlobalBool("verbose") { if c.GlobalBool("verbose") {
logrus.SetLevel(logrus.DebugLevel) log.SetLevel(log.DebugLevel)
} }
return nil return nil
} }
func serviceCommand() cli.Command { func Commands() cli.Command {
factory := &projectFactory{} factory := &projectFactory{}
app := cli.Command{} app := cli.Command{}
@ -37,7 +37,9 @@ func serviceCommand() cli.Command {
app.ShortName = "s" app.ShortName = "s"
app.Usage = "Command line interface for services and compose." app.Usage = "Command line interface for services and compose."
app.Before = beforeApp app.Before = beforeApp
app.Flags = append(command.CommonFlags(), dockerApp.DockerClientFlags()...) app.Flags = append(dockerApp.DockerClientFlags(), cli.BoolFlag{
Name: "verbose,debug",
})
app.Subcommands = append(serviceSubCommands(), app.Subcommands = append(serviceSubCommands(),
command.BuildCommand(factory), command.BuildCommand(factory),
command.CreateCommand(factory), command.CreateCommand(factory),
@ -46,11 +48,9 @@ func serviceCommand() cli.Command {
command.LogsCommand(factory), command.LogsCommand(factory),
command.RestartCommand(factory), command.RestartCommand(factory),
command.StopCommand(factory), command.StopCommand(factory),
command.ScaleCommand(factory),
command.RmCommand(factory), command.RmCommand(factory),
command.PullCommand(factory), command.PullCommand(factory),
command.KillCommand(factory), command.KillCommand(factory),
command.PortCommand(factory),
command.PsCommand(factory), command.PsCommand(factory),
) )
@ -101,7 +101,7 @@ func disable(c *cli.Context) error {
if changed { if changed {
if err := updateIncludedServices(cfg); err != nil { if err := updateIncludedServices(cfg); err != nil {
logrus.Fatal(err) log.Fatal(err)
} }
} }
@ -122,7 +122,7 @@ func del(c *cli.Context) error {
if changed { if changed {
if err := updateIncludedServices(cfg); err != nil { if err := updateIncludedServices(cfg); err != nil {
logrus.Fatal(err) log.Fatal(err)
} }
} }
@ -137,7 +137,7 @@ func enable(c *cli.Context) error {
for _, service := range c.Args() { for _, service := range c.Args() {
if val, ok := cfg.Rancher.ServicesInclude[service]; !ok || !val { if val, ok := cfg.Rancher.ServicesInclude[service]; !ok || !val {
if strings.HasPrefix(service, "/") && !strings.HasPrefix(service, "/var/lib/rancher/conf") { if strings.HasPrefix(service, "/") && !strings.HasPrefix(service, "/var/lib/rancher/conf") {
logrus.Fatalf("ERROR: Service should be in path /var/lib/rancher/conf") log.Fatalf("ERROR: Service should be in path /var/lib/rancher/conf")
} }
cfg.Rancher.ServicesInclude[service] = true cfg.Rancher.ServicesInclude[service] = true
@ -147,11 +147,11 @@ func enable(c *cli.Context) error {
if len(enabledServices) > 0 { if len(enabledServices) > 0 {
if err := compose.StageServices(cfg, enabledServices...); err != nil { if err := compose.StageServices(cfg, enabledServices...); err != nil {
logrus.Fatal(err) log.Fatal(err)
} }
if err := updateIncludedServices(cfg); err != nil { if err := updateIncludedServices(cfg); err != nil {
logrus.Fatal(err) log.Fatal(err)
} }
} }
@ -168,7 +168,7 @@ func list(c *cli.Context) error {
services, err := network.GetServices(cfg.Rancher.Repositories.ToArray()) services, err := network.GetServices(cfg.Rancher.Repositories.ToArray())
if err != nil { if err != nil {
logrus.Fatalf("Failed to get services: %v", err) log.Fatalf("Failed to get services: %v", err)
} }
for _, service := range services { for _, service := range services {

View File

@ -1,31 +1,32 @@
package switchconsole package control
import ( import (
"os" "errors"
log "github.com/Sirupsen/logrus" "github.com/codegangsta/cli"
"github.com/docker/libcompose/project/options" "github.com/docker/libcompose/project/options"
"github.com/rancher/os/compose" "github.com/rancher/os/compose"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
func Main() { func switchConsoleAction(c *cli.Context) error {
if len(os.Args) != 2 { if len(c.Args()) != 1 {
log.Fatal("Must specify exactly one existing container") return errors.New("Must specify exactly one existing container")
} }
newConsole := os.Args[1] newConsole := c.Args()[0]
cfg := config.LoadConfig() cfg := config.LoadConfig()
project, err := compose.GetProject(cfg, true, false) project, err := compose.GetProject(cfg, true, false)
if err != nil { if err != nil {
log.Fatal(err) return err
} }
if newConsole != "default" { if newConsole != "default" {
if err = compose.LoadSpecialService(project, cfg, "console", newConsole); err != nil { if err = compose.LoadSpecialService(project, cfg, "console", newConsole); err != nil {
log.Fatal(err) return err
} }
} }
@ -36,10 +37,12 @@ func Main() {
if err = project.Up(context.Background(), options.Up{ if err = project.Up(context.Background(), options.Up{
Log: true, Log: true,
}, "console"); err != nil { }, "console"); err != nil {
log.Fatal(err) return err
} }
if err = project.Restart(context.Background(), 10, "docker"); err != nil { if err = project.Restart(context.Background(), 10, "docker"); err != nil {
log.Errorf("Failed to restart Docker: %v", err) log.Errorf("Failed to restart Docker: %v", err)
} }
return nil
} }

View File

@ -5,7 +5,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
log "github.com/Sirupsen/logrus" "github.com/rancher/os/log"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
machineUtil "github.com/docker/machine/utils" machineUtil "github.com/docker/machine/utils"
@ -16,8 +16,8 @@ import (
const ( const (
NAME string = "rancher" NAME string = "rancher"
BITS int = 2048 BITS int = 2048
ServerTlsPath string = "/etc/docker/tls" ServerTLSPath string = "/etc/docker/tls"
ClientTlsPath string = "/home/rancher/.docker" ClientTLSPath string = "/home/rancher/.docker"
Cert string = "cert.pem" Cert string = "cert.pem"
Key string = "key.pem" Key string = "key.pem"
ServerCert string = "server-cert.pem" ServerCert string = "server-cert.pem"
@ -141,9 +141,9 @@ func generate(c *cli.Context) error {
func Generate(generateServer bool, outDir string, hostnames []string) error { func Generate(generateServer bool, outDir string, hostnames []string) error {
if outDir == "" { if outDir == "" {
if generateServer { if generateServer {
outDir = ServerTlsPath outDir = ServerTLSPath
} else { } else {
outDir = ClientTlsPath outDir = ClientTLSPath
} }
log.Infof("Out directory (-d, --dir) not specified, using default: %s", outDir) log.Infof("Out directory (-d, --dir) not specified, using default: %s", outDir)
} }

36
cmd/control/udevsettle.go Normal file
View File

@ -0,0 +1,36 @@
package control
import (
"os"
"os/exec"
"github.com/codegangsta/cli"
"github.com/rancher/os/log"
)
func udevSettleAction(c *cli.Context) {
if err := UdevSettle(); err != nil {
log.Fatal(err)
}
}
func UdevSettle() error {
cmd := exec.Command("udevd", "--daemon")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
cmd = exec.Command("udevadm", "trigger", "--action=add")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
cmd = exec.Command("udevadm", "settle")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}

View File

@ -1,4 +1,4 @@
package userdocker package control
import ( import (
"io" "io"
@ -12,37 +12,43 @@ import (
"path/filepath" "path/filepath"
log "github.com/Sirupsen/logrus" "github.com/codegangsta/cli"
composeClient "github.com/docker/libcompose/docker/client" composeClient "github.com/docker/libcompose/docker/client"
"github.com/docker/libcompose/project" "github.com/docker/libcompose/project"
"github.com/rancher/os/cmd/control"
"github.com/rancher/os/compose" "github.com/rancher/os/compose"
"github.com/rancher/os/config" "github.com/rancher/os/config"
rosDocker "github.com/rancher/os/docker" rosDocker "github.com/rancher/os/docker"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
) )
const ( const (
DEFAULT_STORAGE_CONTEXT = "console" defaultStorageContext = "console"
DOCKER_PID_FILE = "/var/run/docker.pid" dockerPidFile = "/var/run/docker.pid"
DOCKER_COMMAND = "docker-init" userDocker = "user-docker"
userDocker = "user-docker" sourceDirectory = "/engine"
sourceDirectory = "/engine" destDirectory = "/var/lib/rancher/engine"
destDirectory = "/var/lib/rancher/engine"
) )
func Main() { var (
dockerCommand = []string{
"ros",
"docker-init",
}
)
func userDockerAction(c *cli.Context) error {
if err := copyBinaries(sourceDirectory, destDirectory); err != nil { if err := copyBinaries(sourceDirectory, destDirectory); err != nil {
log.Fatal(err) return err
} }
if err := syscall.Mount("/host/sys", "/sys", "", syscall.MS_BIND|syscall.MS_REC, ""); err != nil { if err := syscall.Mount("/host/sys", "/sys", "", syscall.MS_BIND|syscall.MS_REC, ""); err != nil {
log.Fatal(err) return err
} }
cfg := config.LoadConfig() cfg := config.LoadConfig()
log.Fatal(startDocker(cfg)) return startDocker(cfg)
} }
func copyBinaries(source, dest string) error { func copyBinaries(source, dest string) error {
@ -98,15 +104,15 @@ func copyBinaries(source, dest string) error {
return nil return nil
} }
func writeCerts(cfg *config.CloudConfig) error { func writeConfigCerts(cfg *config.CloudConfig) error {
outDir := control.ServerTlsPath outDir := ServerTLSPath
if err := os.MkdirAll(outDir, 0700); err != nil { if err := os.MkdirAll(outDir, 0700); err != nil {
return err return err
} }
caCertPath := filepath.Join(outDir, control.CaCert) caCertPath := filepath.Join(outDir, CaCert)
caKeyPath := filepath.Join(outDir, control.CaKey) caKeyPath := filepath.Join(outDir, CaKey)
serverCertPath := filepath.Join(outDir, control.ServerCert) serverCertPath := filepath.Join(outDir, ServerCert)
serverKeyPath := filepath.Join(outDir, control.ServerKey) serverKeyPath := filepath.Join(outDir, ServerKey)
if cfg.Rancher.Docker.CACert != "" { if cfg.Rancher.Docker.CACert != "" {
if err := util.WriteFileAtomic(caCertPath, []byte(cfg.Rancher.Docker.CACert), 0400); err != nil { if err := util.WriteFileAtomic(caCertPath, []byte(cfg.Rancher.Docker.CACert), 0400); err != nil {
return err return err
@ -131,7 +137,7 @@ func writeCerts(cfg *config.CloudConfig) error {
func startDocker(cfg *config.CloudConfig) error { func startDocker(cfg *config.CloudConfig) error {
storageContext := cfg.Rancher.Docker.StorageContext storageContext := cfg.Rancher.Docker.StorageContext
if storageContext == "" { if storageContext == "" {
storageContext = DEFAULT_STORAGE_CONTEXT storageContext = defaultStorageContext
} }
log.Infof("Starting Docker in context: %s", storageContext) log.Infof("Starting Docker in context: %s", storageContext)
@ -160,7 +166,7 @@ func startDocker(cfg *config.CloudConfig) error {
log.Debugf("User Docker args: %v", args) log.Debugf("User Docker args: %v", args)
if dockerCfg.TLS { if dockerCfg.TLS {
if err := writeCerts(cfg); err != nil { if err := writeConfigCerts(cfg); err != nil {
return err return err
} }
} }
@ -173,7 +179,7 @@ func startDocker(cfg *config.CloudConfig) error {
cmd := []string{"docker-runc", "exec", "--", info.ID, "env"} cmd := []string{"docker-runc", "exec", "--", info.ID, "env"}
log.Info(dockerCfg.AppendEnv()) log.Info(dockerCfg.AppendEnv())
cmd = append(cmd, dockerCfg.AppendEnv()...) cmd = append(cmd, dockerCfg.AppendEnv()...)
cmd = append(cmd, DOCKER_COMMAND) cmd = append(cmd, dockerCommand...)
cmd = append(cmd, args...) cmd = append(cmd, args...)
log.Infof("Running %v", cmd) log.Infof("Running %v", cmd)
@ -208,7 +214,7 @@ func getPid(service string, project *project.Project) (int, error) {
} }
client, err := composeClient.Create(composeClient.Options{ client, err := composeClient.Create(composeClient.Options{
Host: config.DOCKER_SYSTEM_HOST, Host: config.SystemDockerHost,
}) })
if err != nil { if err != nil {
return 0, err return 0, err

View File

@ -1,16 +1,16 @@
package control package control
import ( import (
"bufio"
"fmt" "fmt"
"strings" "strings"
log "github.com/Sirupsen/logrus" "github.com/rancher/os/log"
) )
func yes(in *bufio.Reader, question string) bool { func yes(question string) bool {
fmt.Printf("%s [y/N]: ", question) fmt.Printf("%s [y/N]: ", question)
line, err := in.ReadString('\n') var line string
_, err := fmt.Scan(&line)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }

View File

@ -1,60 +1,31 @@
package network package network
import ( import (
"flag" "github.com/rancher/os/log"
"os"
"golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
"github.com/docker/libnetwork/resolvconf" "github.com/docker/libnetwork/resolvconf"
"github.com/rancher/netconf"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/docker"
"github.com/rancher/os/hostname" "github.com/rancher/os/hostname"
"github.com/rancher/os/netconf"
) )
var (
stopNetworkPre bool
flags *flag.FlagSet
)
func init() {
flags = flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
flags.BoolVar(&stopNetworkPre, "stop-network-pre", false, "")
}
func Main() { func Main() {
flags.Parse(os.Args[1:]) log.InitLogger()
log.Infof("Running network")
log.Infof("Running network: stop-network-pre=%v", stopNetworkPre)
if stopNetworkPre {
client, err := docker.NewSystemClient()
if err != nil {
log.Error(err)
}
err = client.ContainerStop(context.Background(), "network-pre", 10)
if err != nil {
log.Error(err)
}
_, err = client.ContainerWait(context.Background(), "network-pre")
if err != nil {
log.Error(err)
}
}
cfg := config.LoadConfig() cfg := config.LoadConfig()
ApplyNetworkConfig(cfg)
nameservers := cfg.Rancher.Network.Dns.Nameservers select {}
search := cfg.Rancher.Network.Dns.Search }
userSetDns := len(nameservers) > 0 || len(search) > 0
if !userSetDns { func ApplyNetworkConfig(cfg *config.CloudConfig) {
nameservers = cfg.Rancher.Defaults.Network.Dns.Nameservers nameservers := cfg.Rancher.Network.DNS.Nameservers
search = cfg.Rancher.Defaults.Network.Dns.Search search := cfg.Rancher.Network.DNS.Search
userSetDNS := len(nameservers) > 0 || len(search) > 0
if !userSetDNS {
nameservers = cfg.Rancher.Defaults.Network.DNS.Nameservers
search = cfg.Rancher.Defaults.Network.DNS.Search
} }
if _, err := resolvconf.Build("/etc/resolv.conf", nameservers, search, nil); err != nil { if _, err := resolvconf.Build("/etc/resolv.conf", nameservers, search, nil); err != nil {
@ -70,13 +41,11 @@ func Main() {
} }
userSetHostname := cfg.Hostname != "" userSetHostname := cfg.Hostname != ""
if err := netconf.RunDhcp(&cfg.Rancher.Network, !userSetHostname, !userSetDns); err != nil { if err := netconf.RunDhcp(&cfg.Rancher.Network, !userSetHostname, !userSetDNS); err != nil {
log.Error(err) log.Error(err)
} }
if err := hostname.SyncHostname(); err != nil { if err := hostname.SyncHostname(); err != nil {
log.Error(err) log.Error(err)
} }
select {}
} }

View File

@ -10,10 +10,10 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
"github.com/docker/engine-api/types/container" "github.com/docker/engine-api/types/container"
"github.com/docker/engine-api/types/filters" "github.com/docker/engine-api/types/filters"
"github.com/rancher/os/log"
"github.com/rancher/os/docker" "github.com/rancher/os/docker"
"github.com/rancher/os/util" "github.com/rancher/os/util"
@ -47,12 +47,12 @@ func runDocker(name string) error {
} }
} }
currentContainerId, err := util.GetCurrentContainerId() currentContainerID, err := util.GetCurrentContainerID()
if err != nil { if err != nil {
return err return err
} }
currentContainer, err := client.ContainerInspect(context.Background(), currentContainerId) currentContainer, err := client.ContainerInspect(context.Background(), currentContainerID)
if err != nil { if err != nil {
return err return err
} }
@ -110,7 +110,7 @@ func common(name string) {
} }
} }
func PowerOff() { func Off() {
common("poweroff") common("poweroff")
reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF) reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF)
} }
@ -181,7 +181,7 @@ func shutDownContainers() error {
return err return err
} }
currentContainerId, err := util.GetCurrentContainerId() currentContainerID, err := util.GetCurrentContainerID()
if err != nil { if err != nil {
return err return err
} }
@ -189,7 +189,7 @@ func shutDownContainers() error {
var stopErrorStrings []string var stopErrorStrings []string
for _, container := range containers { for _, container := range containers {
if container.ID == currentContainerId { if container.ID == currentContainerID {
continue continue
} }
@ -203,7 +203,7 @@ func shutDownContainers() error {
var waitErrorStrings []string var waitErrorStrings []string
for _, container := range containers { for _, container := range containers {
if container.ID == currentContainerId { if container.ID == currentContainerID {
continue continue
} }
_, waitErr := client.ContainerWait(context.Background(), container.ID) _, waitErr := client.ContainerWait(context.Background(), container.ID)

View File

@ -5,14 +5,16 @@ import (
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
) )
func Main() { func Main() {
log.InitLogger()
app := cli.NewApp() app := cli.NewApp()
app.Name = os.Args[0] app.Name = os.Args[0]
app.Usage = "Control and configure RancherOS" app.Usage = "Control and configure RancherOS"
app.Version = config.VERSION app.Version = config.Version
app.Author = "Rancher Labs, Inc." app.Author = "Rancher Labs, Inc."
app.Email = "sid@rancher.com" app.Email = "sid@rancher.com"
app.EnableBashCompletion = true app.EnableBashCompletion = true
@ -39,7 +41,7 @@ func shutdown(c *cli.Context) error {
if reboot == "now" { if reboot == "now" {
Reboot() Reboot()
} else if poweroff == "now" { } else if poweroff == "now" {
PowerOff() Off()
} }
return nil return nil

View File

@ -12,17 +12,18 @@ import (
"syscall" "syscall"
"time" "time"
log "github.com/Sirupsen/logrus"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/rancher/os/log"
) )
var ( var (
running bool = true running = true
processes map[int]*os.Process = map[int]*os.Process{} processes = map[int]*os.Process{}
processLock = sync.Mutex{} processLock = sync.Mutex{}
) )
func Main() { func Main() {
log.InitLogger()
runtime.GOMAXPROCS(1) runtime.GOMAXPROCS(1)
runtime.LockOSThread() runtime.LockOSThread()
app := cli.NewApp() app := cli.NewApp()

View File

@ -1,11 +1,12 @@
package sysinit package sysinit
import ( import (
log "github.com/Sirupsen/logrus"
initPkg "github.com/rancher/os/init" initPkg "github.com/rancher/os/init"
"github.com/rancher/os/log"
) )
func Main() { func Main() {
log.InitLogger()
if err := initPkg.SysInit(); err != nil { if err := initPkg.SysInit(); err != nil {
log.Fatal(err) log.Fatal(err)
} }

View File

@ -1,20 +1,21 @@
package systemdocker package systemdocker
import ( import (
"log"
"os" "os"
"github.com/docker/docker/docker" "github.com/docker/docker/docker"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
) )
func Main() { func Main() {
log.InitLogger()
if os.Geteuid() != 0 { if os.Geteuid() != 0 {
log.Fatalf("%s: Need to be root", os.Args[0]) log.Fatalf("%s: Need to be root", os.Args[0])
} }
if os.Getenv("DOCKER_HOST") == "" { if os.Getenv("DOCKER_HOST") == "" {
os.Setenv("DOCKER_HOST", config.DOCKER_SYSTEM_HOST) os.Setenv("DOCKER_HOST", config.SystemDockerHost)
} }
docker.Main() docker.Main()

View File

@ -3,17 +3,18 @@ package wait
import ( import (
"os" "os"
"github.com/Sirupsen/logrus"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/docker" "github.com/rancher/os/docker"
"github.com/rancher/os/log"
) )
func Main() { func Main() {
_, err := docker.NewClient(config.DOCKER_HOST) log.InitLogger()
_, err := docker.NewClient(config.DockerHost)
if err != nil { if err != nil {
logrus.Errorf("Failed to conect to Docker") log.Errorf("Failed to connect to Docker")
os.Exit(1) os.Exit(1)
} }
logrus.Infof("Docker is ready") log.Infof("Docker is ready")
} }

View File

@ -5,7 +5,6 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/docker/libcompose/cli/logger" "github.com/docker/libcompose/cli/logger"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
@ -16,6 +15,7 @@ import (
"github.com/docker/libcompose/project/options" "github.com/docker/libcompose/project/options"
"github.com/rancher/os/config" "github.com/rancher/os/config"
rosDocker "github.com/rancher/os/docker" rosDocker "github.com/rancher/os/docker"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
"github.com/rancher/os/util/network" "github.com/rancher/os/util/network"
) )
@ -201,7 +201,7 @@ func newCoreServiceProject(cfg *config.CloudConfig, useNetwork, loadConsole bool
go func() { go func() {
for event := range projectEvents { for event := range projectEvents {
if event.EventType == events.ContainerStarted && event.ServiceName == "ntp" { if event.EventType == events.ContainerStarted && event.ServiceName == "network" {
useNetwork = true useNetwork = true
} }
} }

View File

@ -3,12 +3,12 @@ package compose
import ( import (
"fmt" "fmt"
log "github.com/Sirupsen/logrus"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
"github.com/docker/libcompose/project" "github.com/docker/libcompose/project"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/docker" "github.com/rancher/os/docker"
"github.com/rancher/os/log"
"github.com/rancher/os/util/network" "github.com/rancher/os/util/network"
) )

View File

@ -18,7 +18,7 @@ func Merge(bytes []byte) error {
} }
func Export(private, full bool) (string, error) { func Export(private, full bool) (string, error) {
rawCfg := loadRawDiskConfig(full) rawCfg := loadRawConfig("", full)
if !private { if !private {
rawCfg = filterPrivateKeys(rawCfg) rawCfg = filterPrivateKeys(rawCfg)
} }

View File

@ -1,8 +1,8 @@
package config package config
import ( import (
log "github.com/Sirupsen/logrus"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/rancher/os/log"
"strings" "strings"

View File

@ -7,12 +7,12 @@ import (
"sort" "sort"
"strings" "strings"
log "github.com/Sirupsen/logrus"
yaml "github.com/cloudfoundry-incubator/candiedyaml" yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/coreos/coreos-cloudinit/datasource" "github.com/coreos/coreos-cloudinit/datasource"
"github.com/coreos/coreos-cloudinit/initialize" "github.com/coreos/coreos-cloudinit/initialize"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
) )
@ -31,27 +31,32 @@ func ReadConfig(bytes []byte, substituteMetadataVars bool, files ...string) (*Cl
return c, nil return c, nil
} }
func loadRawDiskConfig(full bool) map[interface{}]interface{} { func loadRawDiskConfig(dirPrefix string, full bool) map[interface{}]interface{} {
var rawCfg map[interface{}]interface{} var rawCfg map[interface{}]interface{}
if full { if full {
rawCfg, _ = readConfigs(nil, true, false, OsConfigFile, OemConfigFile) rawCfg, _ = readConfigs(nil, true, false, OsConfigFile, OemConfigFile)
} }
files := append(CloudConfigDirFiles(), CloudConfigFile) files := CloudConfigDirFiles(dirPrefix)
files = append(files, path.Join(dirPrefix, CloudConfigFile))
additionalCfgs, _ := readConfigs(nil, true, false, files...) additionalCfgs, _ := readConfigs(nil, true, false, files...)
return util.Merge(rawCfg, additionalCfgs) return util.Merge(rawCfg, additionalCfgs)
} }
func loadRawConfig() map[interface{}]interface{} { func loadRawConfig(dirPrefix string, full bool) map[interface{}]interface{} {
rawCfg := loadRawDiskConfig(true) rawCfg := loadRawDiskConfig(dirPrefix, full)
rawCfg = util.Merge(rawCfg, readCmdline()) rawCfg = util.Merge(rawCfg, readCmdline())
rawCfg = applyDebugFlags(rawCfg) rawCfg = applyDebugFlags(rawCfg)
return mergeMetadata(rawCfg, readMetadata()) return mergeMetadata(rawCfg, readMetadata())
} }
func LoadConfig() *CloudConfig { func LoadConfig() *CloudConfig {
rawCfg := loadRawConfig() return LoadConfigWithPrefix("")
}
func LoadConfigWithPrefix(dirPrefix string) *CloudConfig {
rawCfg := loadRawConfig(dirPrefix, true)
cfg := &CloudConfig{} cfg := &CloudConfig{}
if err := util.Convert(rawCfg, cfg); err != nil { if err := util.Convert(rawCfg, cfg); err != nil {
@ -63,8 +68,10 @@ func LoadConfig() *CloudConfig {
return cfg return cfg
} }
func CloudConfigDirFiles() []string { func CloudConfigDirFiles(dirPrefix string) []string {
files, err := ioutil.ReadDir(CloudConfigDir) cloudConfigDir := path.Join(dirPrefix, CloudConfigDir)
files, err := ioutil.ReadDir(cloudConfigDir)
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
// do nothing // do nothing
@ -78,7 +85,7 @@ func CloudConfigDirFiles() []string {
var finalFiles []string var finalFiles []string
for _, file := range files { for _, file := range files {
if !file.IsDir() && !strings.HasPrefix(file.Name(), ".") { if !file.IsDir() && !strings.HasPrefix(file.Name(), ".") {
finalFiles = append(finalFiles, path.Join(CloudConfigDir, file.Name())) finalFiles = append(finalFiles, path.Join(cloudConfigDir, file.Name()))
} }
} }
@ -176,9 +183,6 @@ func amendNils(c *CloudConfig) *CloudConfig {
if t.Rancher.Environment == nil { if t.Rancher.Environment == nil {
t.Rancher.Environment = map[string]string{} t.Rancher.Environment = map[string]string{}
} }
if t.Rancher.Autoformat == nil {
t.Rancher.Autoformat = map[string]*composeConfig.ServiceConfigV1{}
}
if t.Rancher.BootstrapContainers == nil { if t.Rancher.BootstrapContainers == nil {
t.Rancher.BootstrapContainers = map[string]*composeConfig.ServiceConfigV1{} t.Rancher.BootstrapContainers = map[string]*composeConfig.ServiceConfigV1{}
} }
@ -199,7 +203,6 @@ func amendNils(c *CloudConfig) *CloudConfig {
func amendContainerNames(c *CloudConfig) *CloudConfig { func amendContainerNames(c *CloudConfig) *CloudConfig {
for _, scm := range []map[string]*composeConfig.ServiceConfigV1{ for _, scm := range []map[string]*composeConfig.ServiceConfigV1{
c.Rancher.Autoformat,
c.Rancher.BootstrapContainers, c.Rancher.BootstrapContainers,
c.Rancher.Services, c.Rancher.Services,
} { } {

View File

@ -41,9 +41,17 @@ func generateEngineOptsSlice(opts EngineOpts) []string {
optsSlice = append(optsSlice, fmt.Sprintf("--%s=false", optTag)) optsSlice = append(optsSlice, fmt.Sprintf("--%s=false", optTag))
} }
} }
case []string:
for _, elem := range value {
if elem != "" {
optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag), elem)
}
}
case map[string]string: case map[string]string:
for k, v := range value { for k, v := range value {
optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag), fmt.Sprintf("%s=%s", k, v)) if v != "" {
optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag), fmt.Sprintf("%s=%s", k, v))
}
} }
} }
} }

View File

@ -18,6 +18,20 @@ func TestGenerateEngineOptsString(t *testing.T) {
if len(generateEngineOptsSlice(EngineOpts{})) != 0 { if len(generateEngineOptsSlice(EngineOpts{})) != 0 {
t.Fail() t.Fail()
} }
if len(generateEngineOptsSlice(EngineOpts{
Host: []string{
"",
},
})) != 0 {
t.Fail()
}
if len(generateEngineOptsSlice(EngineOpts{
LogOpts: map[string]string{
"max-file": "",
},
})) != 0 {
t.Fail()
}
testContains(t, fmt.Sprint(generateEngineOptsSlice(EngineOpts{ testContains(t, fmt.Sprint(generateEngineOptsSlice(EngineOpts{
Bridge: "bridge", Bridge: "bridge",
@ -30,6 +44,13 @@ func TestGenerateEngineOptsString(t *testing.T) {
SelinuxEnabled: &[]bool{false}[0], SelinuxEnabled: &[]bool{false}[0],
})), "--selinux-enabled=false") })), "--selinux-enabled=false")
testContains(t, fmt.Sprint(generateEngineOptsSlice(EngineOpts{
Host: []string{
"unix:///var/run/system-docker.sock",
"unix:///var/run/docker.sock",
},
})), "--host unix:///var/run/system-docker.sock", "--host unix:///var/run/docker.sock")
testContains(t, fmt.Sprint(generateEngineOptsSlice(EngineOpts{ testContains(t, fmt.Sprint(generateEngineOptsSlice(EngineOpts{
LogOpts: map[string]string{ LogOpts: map[string]string{
"max-size": "25m", "max-size": "25m",

200
config/schema.go Normal file
View File

@ -0,0 +1,200 @@
package config
var schema = `{
"type": "object",
"additionalProperties": false,
"properties": {
"ssh_authorized_keys": {"$ref": "#/definitions/list_of_strings"},
"write_files": {
"type": "array",
"items": {"$ref": "#/definitions/file_config"}
},
"hostname": {"type": "string"},
"mounts": {"type": "array"},
"rancher": {"$ref": "#/definitions/rancher_config"},
"runcmd": {"type": "array"},
"bootcmd": {"type": "array"}
},
"definitions": {
"rancher_config": {
"id": "#/definitions/rancher_config",
"type": "object",
"additionalProperties": false,
"properties": {
"console": {"type": "string"},
"environment": {"type": "object"},
"cloud_init_services": {"type": "object"},
"services": {"type": "object"},
"bootstrap": {"type": "object"},
"autoformat": {"type": "object"},
"bootstrap_docker": {"$ref": "#/definitions/docker_config"},
"cloud_init": {"$ref": "#/definitions/cloud_init_config"},
"debug": {"type": "boolean"},
"rm_usr": {"type": "boolean"},
"no_sharedroot": {"type": "boolean"},
"log": {"type": "boolean"},
"force_console_rebuild": {"type": "boolean"},
"disable": {"$ref": "#/definitions/list_of_strings"},
"services_include": {"type": "object"},
"modules": {"$ref": "#/definitions/list_of_strings"},
"network": {"$ref": "#/definitions/network_config"},
"default_network": {"type": "object"},
"repositories": {"type": "object"},
"ssh": {"$ref": "#/definitions/ssh_config"},
"state": {"$ref": "#/definitions/state_config"},
"system_docker": {"$ref": "#/definitions/docker_config"},
"upgrade": {"$ref": "#/definitions/upgrade_config"},
"docker": {"$ref": "#/definitions/docker_config"},
"registry_auths": {"type": "object"},
"defaults": {"$ref": "#/definitions/defaults_config"},
"resize_device": {"type": "string"},
"sysctl": {"type": "object"},
"restart_services": {"type": "array"}
}
},
"file_config": {
"id": "#/definitions/file_config",
"type": "object",
"additionalProperties": false,
"properties": {
"encoding": {"type": "string"},
"container": {"type": "string"},
"content": {"type": "string"},
"owner": {"type": "string"},
"path": {"type": "string"},
"permissions": {"type": "string"}
}
},
"network_config": {
"id": "#/definitions/network_config",
"type": "object",
"additionalProperties": false,
"properties": {
"pre_cmds": {"$ref": "#/definitions/list_of_strings"},
"dns": {"type": "object"},
"interfaces": {"type": "object"},
"post_cmds": {"$ref": "#/definitions/list_of_strings"},
"http_proxy": {"type": "string"},
"https_proxy": {"type": "string"},
"no_proxy": {"type": "string"}
}
},
"upgrade_config": {
"id": "#/definitions/upgrade_config",
"type": "object",
"additionalProperties": false,
"properties": {
"url": {"type": "string"},
"image": {"type": "string"},
"rollback": {"type": "string"}
}
},
"docker_config": {
"id": "#/definitions/docker_config",
"type": "object",
"additionalProperties": false,
"properties": {
"engine": {"type": "string"},
"tls": {"type": "boolean"},
"tls_args": {"$ref": "#/definitions/list_of_strings"},
"args": {"$ref": "#/definitions/list_of_strings"},
"extra_args": {"$ref": "#/definitions/list_of_strings"},
"server_cert": {"type": "string"},
"server_key": {"type": "string"},
"ca_cert": {"type": "string"},
"ca_key": {"type": "string"},
"environment": {"$ref": "#/definitions/list_of_strings"},
"storage_context": {"type": "string"},
"exec": {"type": ["boolean", "null"]},
"bridge": {"type": "string"},
"config_file": {"type": "string"},
"containerd": {"type": "string"},
"debug": {"type": ["boolean", "null"]},
"exec_root": {"type": "string"},
"group": {"type": "string"},
"graph": {"type": "string"},
"host": {"type": "array"},
"live_restore": {"type": ["boolean", "null"]},
"log_driver": {"type": "string"},
"log_opts": {"type": "object"},
"pid_file": {"type": "string"},
"registry_mirror": {"type": "string"},
"restart": {"type": ["boolean", "null"]},
"selinux_enabled": {"type": ["boolean", "null"]},
"storage_driver": {"type": "string"},
"userland_proxy": {"type": ["boolean", "null"]},
"insecure_registry": {"$ref": "#/definitions/list_of_strings"}
}
},
"ssh_config": {
"id": "#/definitions/ssh_config",
"type": "object",
"additionalProperties": false,
"properties": {
"keys": {"type": "object"}
}
},
"state_config": {
"id": "#/definitions/state_config",
"type": "object",
"additionalProperties": false,
"properties": {
"directory": {"type": "string"},
"fstype": {"type": "string"},
"dev": {"type": "string"},
"wait": {"type": "boolean"},
"required": {"type": "boolean"},
"autoformat": {"$ref": "#/definitions/list_of_strings"},
"mdadm_scan": {"type": "boolean"},
"script": {"type": "string"},
"oem_fstype": {"type": "string"},
"oem_dev": {"type": "string"}
}
},
"cloud_init_config": {
"id": "#/definitions/cloud_init_config",
"type": "object",
"additionalProperties": false,
"properties": {
"datasources": {"$ref": "#/definitions/list_of_strings"}
}
},
"defaults_config": {
"id": "#/definitions/defaults_config",
"type": "object",
"additionalProperties": false,
"properties": {
"hostname": {"type": "string"},
"docker": {"type": "object"},
"network": {"$ref": "#/definitions/network_config"}
}
},
"list_of_strings": {
"type": "array",
"items": {"type": "string"},
"uniqueItems": true
}
}
}
`

View File

@ -7,35 +7,34 @@ import (
"github.com/coreos/coreos-cloudinit/config" "github.com/coreos/coreos-cloudinit/config"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
"github.com/rancher/netconf" "github.com/rancher/os/config/yaml"
) )
const ( const (
OEM = "/usr/share/ros/oem" OEM = "/usr/share/ros/oem"
DOCKER_BIN = "/usr/bin/docker" DockerBin = "/usr/bin/docker"
DOCKER_DIST_BIN = "/usr/bin/docker.dist" DockerDistBin = "/usr/bin/docker.dist"
ROS_BIN = "/usr/bin/ros" RosBin = "/usr/bin/ros"
SYSINIT_BIN = "/usr/bin/ros-sysinit" SysInitBin = "/usr/bin/ros-sysinit"
DOCKER_SYSTEM_HOME = "/var/lib/system-docker" SystemDockerHome = "/var/lib/system-docker"
DOCKER_SYSTEM_HOST = "unix:///var/run/system-docker.sock" SystemDockerHost = "unix:///var/run/system-docker.sock"
DOCKER_HOST = "unix:///var/run/docker.sock" DockerHost = "unix:///var/run/docker.sock"
IMAGES_PATH = "/usr/share/ros" ImagesPath = "/usr/share/ros"
IMAGES_PATTERN = "images*.tar" ImagesPattern = "images*.tar"
MODULES_ARCHIVE = "/modules.tar" ModulesArchive = "/modules.tar"
DEBUG = false Debug = false
SYSTEM_DOCKER_LOG = "/var/log/system-docker.log" SystemDockerLog = "/var/log/system-docker.log"
SYSTEM_DOCKER_BIN = "/usr/bin/system-docker" SystemDockerBin = "/usr/bin/system-docker"
LABEL = "label" HashLabel = "io.rancher.os.hash"
HASH = "io.rancher.os.hash" IDLabel = "io.rancher.os.id"
ID = "io.rancher.os.id" DetachLabel = "io.rancher.os.detach"
DETACH = "io.rancher.os.detach" CreateOnlyLabel = "io.rancher.os.createonly"
CREATE_ONLY = "io.rancher.os.createonly" ReloadConfigLabel = "io.rancher.os.reloadconfig"
RELOAD_CONFIG = "io.rancher.os.reloadconfig" ConsoleLabel = "io.rancher.os.console"
CONSOLE = "io.rancher.os.console" ScopeLabel = "io.rancher.os.scope"
SCOPE = "io.rancher.os.scope" RebuildLabel = "io.docker.compose.rebuild"
REBUILD = "io.docker.compose.rebuild" System = "system"
SYSTEM = "system"
OsConfigFile = "/usr/share/ros/os-config.yml" OsConfigFile = "/usr/share/ros/os-config.yml"
CloudConfigDir = "/var/lib/rancher/conf/cloud-config.d" CloudConfigDir = "/var/lib/rancher/conf/cloud-config.d"
@ -48,11 +47,11 @@ const (
var ( var (
OemConfigFile = OEM + "/oem-config.yml" OemConfigFile = OEM + "/oem-config.yml"
VERSION string Version string
ARCH string Arch string
SUFFIX string Suffix string
OS_REPO string OsRepo string
OS_BASE string OsBase string
PrivateKeys = []string{ PrivateKeys = []string{
"rancher.ssh", "rancher.ssh",
"rancher.docker.ca_key", "rancher.docker.ca_key",
@ -63,33 +62,34 @@ var (
) )
func init() { func init() {
if VERSION == "" { if Version == "" {
VERSION = "v0.0.0-dev" Version = "v0.0.0-dev"
} }
if ARCH == "" { if Arch == "" {
ARCH = runtime.GOARCH Arch = runtime.GOARCH
} }
if SUFFIX == "" && ARCH != "amd64" { if Suffix == "" && Arch != "amd64" {
SUFFIX = "_" + ARCH Suffix = "_" + Arch
} }
if OS_BASE == "" { if OsBase == "" {
OS_BASE = fmt.Sprintf("%s/os-base:%s%s", OS_REPO, VERSION, SUFFIX) OsBase = fmt.Sprintf("%s/os-base:%s%s", OsRepo, Version, Suffix)
} }
} }
type Repository struct { type Repository struct {
Url string `yaml:"url,omitempty"` URL string `yaml:"url,omitempty"`
} }
type Repositories map[string]Repository type Repositories map[string]Repository
type CloudConfig struct { type CloudConfig struct {
SSHAuthorizedKeys []string `yaml:"ssh_authorized_keys"` SSHAuthorizedKeys []string `yaml:"ssh_authorized_keys"`
WriteFiles []File `yaml:"write_files"` WriteFiles []File `yaml:"write_files"`
Hostname string `yaml:"hostname"` Hostname string `yaml:"hostname"`
Mounts [][]string `yaml:"mounts,omitempty"` Mounts [][]string `yaml:"mounts,omitempty"`
Rancher RancherConfig `yaml:"rancher,omitempty"` Rancher RancherConfig `yaml:"rancher,omitempty"`
Runcmd [][]string `yaml:"runcmd,omitempty"` Runcmd []yaml.StringandSlice `yaml:"runcmd,omitempty"`
Bootcmd []yaml.StringandSlice `yaml:"bootcmd,omitempty"`
} }
type File struct { type File struct {
@ -102,7 +102,7 @@ type RancherConfig struct {
Environment map[string]string `yaml:"environment,omitempty"` Environment map[string]string `yaml:"environment,omitempty"`
Services map[string]*composeConfig.ServiceConfigV1 `yaml:"services,omitempty"` Services map[string]*composeConfig.ServiceConfigV1 `yaml:"services,omitempty"`
BootstrapContainers map[string]*composeConfig.ServiceConfigV1 `yaml:"bootstrap,omitempty"` BootstrapContainers map[string]*composeConfig.ServiceConfigV1 `yaml:"bootstrap,omitempty"`
Autoformat map[string]*composeConfig.ServiceConfigV1 `yaml:"autoformat,omitempty"` CloudInitServices map[string]*composeConfig.ServiceConfigV1 `yaml:"cloud_init_services,omitempty"`
BootstrapDocker DockerConfig `yaml:"bootstrap_docker,omitempty"` BootstrapDocker DockerConfig `yaml:"bootstrap_docker,omitempty"`
CloudInit CloudInit `yaml:"cloud_init,omitempty"` CloudInit CloudInit `yaml:"cloud_init,omitempty"`
Debug bool `yaml:"debug,omitempty"` Debug bool `yaml:"debug,omitempty"`
@ -113,10 +113,10 @@ type RancherConfig struct {
Disable []string `yaml:"disable,omitempty"` Disable []string `yaml:"disable,omitempty"`
ServicesInclude map[string]bool `yaml:"services_include,omitempty"` ServicesInclude map[string]bool `yaml:"services_include,omitempty"`
Modules []string `yaml:"modules,omitempty"` Modules []string `yaml:"modules,omitempty"`
Network netconf.NetworkConfig `yaml:"network,omitempty"` Network NetworkConfig `yaml:"network,omitempty"`
DefaultNetwork netconf.NetworkConfig `yaml:"default_network,omitempty"` DefaultNetwork NetworkConfig `yaml:"default_network,omitempty"`
Repositories Repositories `yaml:"repositories,omitempty"` Repositories Repositories `yaml:"repositories,omitempty"`
Ssh SshConfig `yaml:"ssh,omitempty"` SSH SSHConfig `yaml:"ssh,omitempty"`
State StateConfig `yaml:"state,omitempty"` State StateConfig `yaml:"state,omitempty"`
SystemDocker DockerConfig `yaml:"system_docker,omitempty"` SystemDocker DockerConfig `yaml:"system_docker,omitempty"`
Upgrade UpgradeConfig `yaml:"upgrade,omitempty"` Upgrade UpgradeConfig `yaml:"upgrade,omitempty"`
@ -129,29 +129,30 @@ type RancherConfig struct {
} }
type UpgradeConfig struct { type UpgradeConfig struct {
Url string `yaml:"url,omitempty"` URL string `yaml:"url,omitempty"`
Image string `yaml:"image,omitempty"` Image string `yaml:"image,omitempty"`
Rollback string `yaml:"rollback,omitempty"` Rollback string `yaml:"rollback,omitempty"`
} }
type EngineOpts struct { type EngineOpts struct {
Bridge string `yaml:"bridge,omitempty" opt:"bridge"` Bridge string `yaml:"bridge,omitempty" opt:"bridge"`
ConfigFile string `yaml:"config_file,omitempty" opt:"config-file"` ConfigFile string `yaml:"config_file,omitempty" opt:"config-file"`
Containerd string `yaml:"containerd,omitempty" opt:"containerd"` Containerd string `yaml:"containerd,omitempty" opt:"containerd"`
Debug *bool `yaml:"debug,omitempty" opt:"debug"` Debug *bool `yaml:"debug,omitempty" opt:"debug"`
ExecRoot string `yaml:"exec_root,omitempty" opt:"exec-root"` ExecRoot string `yaml:"exec_root,omitempty" opt:"exec-root"`
Group string `yaml:"group,omitempty" opt:"group"` Group string `yaml:"group,omitempty" opt:"group"`
Graph string `yaml:"graph,omitempty" opt:"graph"` Graph string `yaml:"graph,omitempty" opt:"graph"`
Host string `yaml:"host,omitempty" opt:"host"` Host []string `yaml:"host,omitempty" opt:"host"`
LiveRestore *bool `yaml:"live_restore,omitempty" opt:"live-restore"` InsecureRegistry []string `yaml:"insecure_registry" opt:"insecure-registry"`
LogDriver string `yaml:"log_driver,omitempty" opt:"log-driver"` LiveRestore *bool `yaml:"live_restore,omitempty" opt:"live-restore"`
LogOpts map[string]string `yaml:"log_opts,omitempty" opt:"log-opt"` LogDriver string `yaml:"log_driver,omitempty" opt:"log-driver"`
PidFile string `yaml:"pid_file,omitempty" opt:"pidfile"` LogOpts map[string]string `yaml:"log_opts,omitempty" opt:"log-opt"`
RegistryMirror string `yaml:"registry_mirror,omitempty" opt:"registry-mirror"` PidFile string `yaml:"pid_file,omitempty" opt:"pidfile"`
Restart *bool `yaml:"restart,omitempty" opt:"restart"` RegistryMirror string `yaml:"registry_mirror,omitempty" opt:"registry-mirror"`
SelinuxEnabled *bool `yaml:"selinux_enabled,omitempty" opt:"selinux-enabled"` Restart *bool `yaml:"restart,omitempty" opt:"restart"`
StorageDriver string `yaml:"storage_driver,omitempty" opt:"storage-driver"` SelinuxEnabled *bool `yaml:"selinux_enabled,omitempty" opt:"selinux-enabled"`
UserlandProxy *bool `yaml:"userland_proxy,omitempty" opt:"userland-proxy"` StorageDriver string `yaml:"storage_driver,omitempty" opt:"storage-driver"`
UserlandProxy *bool `yaml:"userland_proxy,omitempty" opt:"userland-proxy"`
} }
type DockerConfig struct { type DockerConfig struct {
@ -169,7 +170,40 @@ type DockerConfig struct {
Exec bool `yaml:"exec,omitempty"` Exec bool `yaml:"exec,omitempty"`
} }
type SshConfig struct { type NetworkConfig struct {
PreCmds []string `yaml:"pre_cmds,omitempty"`
DNS DNSConfig `yaml:"dns,omitempty"`
Interfaces map[string]InterfaceConfig `yaml:"interfaces,omitempty"`
PostCmds []string `yaml:"post_cmds,omitempty"`
HTTPProxy string `yaml:"http_proxy,omitempty"`
HTTPSProxy string `yaml:"https_proxy,omitempty"`
NoProxy string `yaml:"no_proxy,omitempty"`
}
type InterfaceConfig struct {
Match string `yaml:"match,omitempty"`
DHCP bool `yaml:"dhcp,omitempty"`
DHCPArgs string `yaml:"dhcp_args,omitempty"`
Address string `yaml:"address,omitempty"`
Addresses []string `yaml:"addresses,omitempty"`
IPV4LL bool `yaml:"ipv4ll,omitempty"`
Gateway string `yaml:"gateway,omitempty"`
GatewayIpv6 string `yaml:"gateway_ipv6,omitempty"`
MTU int `yaml:"mtu,omitempty"`
Bridge string `yaml:"bridge,omitempty"`
Bond string `yaml:"bond,omitempty"`
BondOpts map[string]string `yaml:"bond_opts,omitempty"`
PostUp []string `yaml:"post_up,omitempty"`
PreUp []string `yaml:"pre_up,omitempty"`
Vlans string `yaml:"vlans,omitempty"`
}
type DNSConfig struct {
Nameservers []string `yaml:"nameservers,flow,omitempty"`
Search []string `yaml:"search,flow,omitempty"`
}
type SSHConfig struct {
Keys map[string]string `yaml:"keys,omitempty"` Keys map[string]string `yaml:"keys,omitempty"`
} }
@ -191,16 +225,16 @@ type CloudInit struct {
} }
type Defaults struct { type Defaults struct {
Hostname string `yaml:"hostname,omitempty"` Hostname string `yaml:"hostname,omitempty"`
Docker DockerConfig `yaml:"docker,omitempty"` Docker DockerConfig `yaml:"docker,omitempty"`
Network netconf.NetworkConfig `yaml:"network,omitempty"` Network NetworkConfig `yaml:"network,omitempty"`
} }
func (r Repositories) ToArray() []string { func (r Repositories) ToArray() []string {
result := make([]string, 0, len(r)) result := make([]string, 0, len(r))
for _, repo := range r { for _, repo := range r {
if repo.Url != "" { if repo.URL != "" {
result = append(result, repo.Url) result = append(result, repo.URL)
} }
} }

43
config/validate.go Normal file
View File

@ -0,0 +1,43 @@
package config
import (
yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/xeipuuv/gojsonschema"
)
// ConvertKeysToStrings is temporarily copied from libcompose
// TODO: just import this in the future
func ConvertKeysToStrings(item interface{}) interface{} {
switch typedDatas := item.(type) {
case map[string]interface{}:
for key, value := range typedDatas {
typedDatas[key] = ConvertKeysToStrings(value)
}
return typedDatas
case map[interface{}]interface{}:
newMap := make(map[string]interface{})
for key, value := range typedDatas {
stringKey := key.(string)
newMap[stringKey] = ConvertKeysToStrings(value)
}
return newMap
case []interface{}:
for i, value := range typedDatas {
typedDatas[i] = ConvertKeysToStrings(value)
}
return typedDatas
default:
return item
}
}
func Validate(bytes []byte) (*gojsonschema.Result, error) {
var rawCfg map[string]interface{}
if err := yaml.Unmarshal([]byte(bytes), &rawCfg); err != nil {
return nil, err
}
rawCfg = ConvertKeysToStrings(rawCfg).(map[string]interface{})
loader := gojsonschema.NewGoLoader(rawCfg)
schemaLoader := gojsonschema.NewStringLoader(schema)
return gojsonschema.Validate(schemaLoader, loader)
}

53
config/validate_test.go Normal file
View File

@ -0,0 +1,53 @@
package config
import (
"fmt"
"strings"
"testing"
yaml "github.com/cloudfoundry-incubator/candiedyaml"
"github.com/rancher/os/util"
)
func testValidate(t *testing.T, cfg []byte, contains string) {
validationErrors, err := Validate(cfg)
if err != nil {
t.Fatal(err)
}
if contains == "" && len(validationErrors.Errors()) != 0 {
t.Fail()
}
if !strings.Contains(fmt.Sprint(validationErrors.Errors()), contains) {
t.Fail()
}
}
func TestValidate(t *testing.T) {
testValidate(t, []byte("{}"), "")
testValidate(t, []byte(`rancher:
log: true`), "")
testValidate(t, []byte(`write_files:
- container: console
path: /etc/rc.local
permissions: "0755"
owner: root
content: |
#!/bin/bash
wait-for-docker`), "")
testValidate(t, []byte(`rancher:
docker:
extra_args: ['--insecure-registry', 'my.registry.com']`), "")
testValidate(t, []byte("bad_key: {}"), "Additional property bad_key is not allowed")
testValidate(t, []byte("rancher: []"), "rancher: Invalid type. Expected: object, given: array")
var fullConfig map[string]interface{}
if err := util.ConvertIgnoreOmitEmpty(CloudConfig{}, &fullConfig); err != nil {
t.Fatal(err)
}
fullConfigBytes, err := yaml.Marshal(fullConfig)
if err != nil {
t.Fatal(err)
}
testValidate(t, fullConfigBytes, "")
}

44
config/yaml/command.go Normal file
View File

@ -0,0 +1,44 @@
package yaml
import "fmt"
// StringandSlice stores either a string or slice depending on original type
// Differs from libcompose Stringorslice by being able to determine original type
type StringandSlice struct {
StringValue string
SliceValue []string
}
// UnmarshalYAML implements the Unmarshaller interface.
// TODO: this needs to be ported to go-yaml
func (s *StringandSlice) UnmarshalYAML(tag string, value interface{}) error {
switch value := value.(type) {
case []interface{}:
parts, err := toStrings(value)
if err != nil {
return err
}
s.SliceValue = parts
case string:
s.StringValue = value
default:
return fmt.Errorf("Failed to unmarshal StringandSlice: %#v", value)
}
return nil
}
// TODO: use this function from libcompose
func toStrings(s []interface{}) ([]string, error) {
if len(s) == 0 {
return nil, nil
}
r := make([]string, len(s))
for k, v := range s {
if sv, ok := v.(string); ok {
r[k] = sv
} else {
return nil, fmt.Errorf("Cannot unmarshal '%v' of type %T into a string value", v, v)
}
}
return r, nil
}

View File

@ -1,5 +1,6 @@
// +build linux // +build linux
package dockerlaunch
package dfs
import ( import (
"os" "os"

View File

@ -1,4 +1,4 @@
package dockerlaunch package dfs
import ( import (
"bufio" "bufio"
@ -11,11 +11,12 @@ import (
"strings" "strings"
"syscall" "syscall"
log "github.com/Sirupsen/logrus"
"github.com/docker/libnetwork/resolvconf" "github.com/docker/libnetwork/resolvconf"
"github.com/rancher/docker-from-scratch/selinux" "github.com/rancher/os/config"
"github.com/rancher/docker-from-scratch/util" "github.com/rancher/os/log"
"github.com/rancher/netconf" "github.com/rancher/os/netconf"
"github.com/rancher/os/selinux"
"github.com/rancher/os/util"
) )
const ( const (
@ -45,7 +46,7 @@ type Config struct {
Fork bool Fork bool
PidOne bool PidOne bool
CommandName string CommandName string
DnsConfig netconf.DnsConfig DNSConfig config.DNSConfig
BridgeName string BridgeName string
BridgeAddress string BridgeAddress string
BridgeMtu int BridgeMtu int
@ -208,10 +209,9 @@ func execDocker(config *Config, docker, cmd string, args []string) (*exec.Cmd, e
PidOne() PidOne()
} }
return cmd, err return cmd, err
} else {
err := syscall.Exec(expand(docker), append([]string{cmd}, args...), env)
return nil, err
} }
return nil, syscall.Exec(expand(docker), append([]string{cmd}, args...), env)
} }
func copyDefault(folder, name string) error { func copyDefault(folder, name string) error {
@ -333,8 +333,8 @@ func createGroup() error {
return tryCreateFile("/etc/group", "root:x:0:\n") return tryCreateFile("/etc/group", "root:x:0:\n")
} }
func setupNetworking(config *Config) error { func setupNetworking(cfg *Config) error {
if config == nil { if cfg == nil {
return nil return nil
} }
@ -351,19 +351,19 @@ ff02::2 ip6-allrouters
127.0.1.1 `+hostname) 127.0.1.1 `+hostname)
if len(config.DnsConfig.Nameservers) != 0 { if len(cfg.DNSConfig.Nameservers) != 0 {
if _, err := resolvconf.Build("/etc/resolv.conf", config.DnsConfig.Nameservers, config.DnsConfig.Search, nil); err != nil { if _, err := resolvconf.Build("/etc/resolv.conf", cfg.DNSConfig.Nameservers, cfg.DNSConfig.Search, nil); err != nil {
return err return err
} }
} }
if config.BridgeName != "" && config.BridgeName != "none" { if cfg.BridgeName != "" && cfg.BridgeName != "none" {
log.Debugf("Creating bridge %s (%s)", config.BridgeName, config.BridgeAddress) log.Debugf("Creating bridge %s (%s)", cfg.BridgeName, cfg.BridgeAddress)
if err := netconf.ApplyNetworkConfigs(&netconf.NetworkConfig{ if err := netconf.ApplyNetworkConfigs(&config.NetworkConfig{
Interfaces: map[string]netconf.InterfaceConfig{ Interfaces: map[string]config.InterfaceConfig{
config.BridgeName: { cfg.BridgeName: {
Address: config.BridgeAddress, Address: cfg.BridgeAddress,
MTU: config.BridgeMtu, MTU: cfg.BridgeMtu,
Bridge: "true", Bridge: "true",
}, },
}, },
@ -375,23 +375,35 @@ ff02::2 ip6-allrouters
return nil return nil
} }
func GetValue(index int, args []string) string {
val := args[index]
parts := strings.SplitN(val, "=", 2)
if len(parts) == 1 {
if len(args) > index+1 {
return args[index+1]
}
return ""
}
return parts[1]
}
func ParseConfig(config *Config, args ...string) []string { func ParseConfig(config *Config, args ...string) []string {
for i, arg := range args { for i, arg := range args {
if strings.HasPrefix(arg, "--bip") { if strings.HasPrefix(arg, "--bip") {
config.BridgeAddress = util.GetValue(i, args) config.BridgeAddress = GetValue(i, args)
} else if strings.HasPrefix(arg, "--fixed-cidr") { } else if strings.HasPrefix(arg, "--fixed-cidr") {
config.BridgeAddress = util.GetValue(i, args) config.BridgeAddress = GetValue(i, args)
} else if strings.HasPrefix(arg, "-b") || strings.HasPrefix(arg, "--bridge") { } else if strings.HasPrefix(arg, "-b") || strings.HasPrefix(arg, "--bridge") {
config.BridgeName = util.GetValue(i, args) config.BridgeName = GetValue(i, args)
} else if strings.HasPrefix(arg, "--config-file") { } else if strings.HasPrefix(arg, "--config-file") {
config.DaemonConfig = util.GetValue(i, args) config.DaemonConfig = GetValue(i, args)
} else if strings.HasPrefix(arg, "--mtu") { } else if strings.HasPrefix(arg, "--mtu") {
mtu, err := strconv.Atoi(util.GetValue(i, args)) mtu, err := strconv.Atoi(GetValue(i, args))
if err != nil { if err != nil {
config.BridgeMtu = mtu config.BridgeMtu = mtu
} }
} else if strings.HasPrefix(arg, "-g") || strings.HasPrefix(arg, "--graph") { } else if strings.HasPrefix(arg, "-g") || strings.HasPrefix(arg, "--graph") {
config.GraphDirectory = util.GetValue(i, args) config.GraphDirectory = GetValue(i, args)
} }
} }
@ -454,7 +466,7 @@ func touchSockets(args ...string) error {
for i, arg := range args { for i, arg := range args {
if strings.HasPrefix(arg, "-H") { if strings.HasPrefix(arg, "-H") {
val := util.GetValue(i, args) val := GetValue(i, args)
if strings.HasPrefix(val, "unix://") { if strings.HasPrefix(val, "unix://") {
val = val[len("unix://"):] val = val[len("unix://"):]
log.Debugf("Creating temp file at %s", val) log.Debugf("Creating temp file at %s", val)
@ -682,6 +694,7 @@ func LaunchDocker(config *Config, docker string, args ...string) (*exec.Cmd, err
} }
func Main() { func Main() {
log.InitLogger()
if os.Getenv("DOCKER_LAUNCH_DEBUG") == "true" { if os.Getenv("DOCKER_LAUNCH_DEBUG") == "true" {
log.SetLevel(log.DebugLevel) log.SetLevel(log.DebugLevel)
} }

View File

@ -5,11 +5,11 @@ import (
"fmt" "fmt"
"strings" "strings"
log "github.com/Sirupsen/logrus"
"github.com/docker/docker/registry" "github.com/docker/docker/registry"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
"github.com/docker/libcompose/docker" "github.com/docker/libcompose/docker"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
) )
// ConfigAuthLookup will lookup registry auth info from cloud config // ConfigAuthLookup will lookup registry auth info from cloud config

View File

@ -7,11 +7,11 @@ import (
) )
func NewSystemClient() (dockerClient.APIClient, error) { func NewSystemClient() (dockerClient.APIClient, error) {
return NewClient(config.DOCKER_SYSTEM_HOST) return NewClient(config.SystemDockerHost)
} }
func NewDefaultClient() (dockerClient.APIClient, error) { func NewDefaultClient() (dockerClient.APIClient, error) {
return NewClient(config.DOCKER_HOST) return NewClient(config.DockerHost)
} }
func NewClient(endpoint string) (dockerClient.APIClient, error) { func NewClient(endpoint string) (dockerClient.APIClient, error) {

View File

@ -6,11 +6,11 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
dockerclient "github.com/docker/engine-api/client" dockerclient "github.com/docker/engine-api/client"
composeClient "github.com/docker/libcompose/docker/client" composeClient "github.com/docker/libcompose/docker/client"
"github.com/docker/libcompose/project" "github.com/docker/libcompose/project"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"github.com/rancher/os/util" "github.com/rancher/os/util"
) )
@ -25,8 +25,8 @@ func NewClientFactory(opts composeClient.Options) (project.ClientFactory, error)
userOpts := opts userOpts := opts
systemOpts := opts systemOpts := opts
userOpts.Host = config.DOCKER_HOST userOpts.Host = config.DockerHost
systemOpts.Host = config.DOCKER_SYSTEM_HOST systemOpts.Host = config.SystemDockerHost
userClient, err := composeClient.Create(userOpts) userClient, err := composeClient.Create(userOpts)
if err != nil { if err != nil {
@ -46,11 +46,11 @@ func NewClientFactory(opts composeClient.Options) (project.ClientFactory, error)
func (c *ClientFactory) Create(service project.Service) dockerclient.APIClient { func (c *ClientFactory) Create(service project.Service) dockerclient.APIClient {
if IsSystemContainer(service.Config()) { if IsSystemContainer(service.Config()) {
waitFor(&c.systemOnce, c.systemClient, config.DOCKER_SYSTEM_HOST) waitFor(&c.systemOnce, c.systemClient, config.SystemDockerHost)
return c.systemClient return c.systemClient
} }
waitFor(&c.userOnce, c.userClient, config.DOCKER_HOST) waitFor(&c.userOnce, c.userClient, config.DockerHost)
return c.userClient return c.userClient
} }

View File

@ -2,10 +2,13 @@ package docker
import ( import (
"fmt" "fmt"
"io/ioutil"
"strings" "strings"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
"github.com/rancher/os/config" "github.com/rancher/os/config"
log "github.com/Sirupsen/logrus"
) )
type ConfigEnvironment struct { type ConfigEnvironment struct {
@ -29,18 +32,24 @@ func appendEnv(array []string, key, value string) []string {
func environmentFromCloudConfig(cfg *config.CloudConfig) map[string]string { func environmentFromCloudConfig(cfg *config.CloudConfig) map[string]string {
environment := cfg.Rancher.Environment environment := cfg.Rancher.Environment
if cfg.Rancher.Network.HttpProxy != "" { if cfg.Rancher.Network.HTTPProxy != "" {
environment["http_proxy"] = cfg.Rancher.Network.HttpProxy environment["http_proxy"] = cfg.Rancher.Network.HTTPProxy
environment["HTTP_PROXY"] = cfg.Rancher.Network.HttpProxy environment["HTTP_PROXY"] = cfg.Rancher.Network.HTTPProxy
} }
if cfg.Rancher.Network.HttpsProxy != "" { if cfg.Rancher.Network.HTTPSProxy != "" {
environment["https_proxy"] = cfg.Rancher.Network.HttpsProxy environment["https_proxy"] = cfg.Rancher.Network.HTTPSProxy
environment["HTTPS_PROXY"] = cfg.Rancher.Network.HttpsProxy environment["HTTPS_PROXY"] = cfg.Rancher.Network.HTTPSProxy
} }
if cfg.Rancher.Network.NoProxy != "" { if cfg.Rancher.Network.NoProxy != "" {
environment["no_proxy"] = cfg.Rancher.Network.NoProxy environment["no_proxy"] = cfg.Rancher.Network.NoProxy
environment["NO_PROXY"] = cfg.Rancher.Network.NoProxy environment["NO_PROXY"] = cfg.Rancher.Network.NoProxy
} }
b, err := ioutil.ReadFile("/proc/version")
if err == nil {
elem := strings.Split(string(b), " ")
environment["KERNEL_VERSION"] = elem[2]
log.Debugf("Using /proc/version to set rancher.environment.KERNEL_VERSION = %s", elem[2])
}
return environment return environment
} }

View File

@ -3,7 +3,6 @@ package docker
import ( import (
"fmt" "fmt"
"github.com/Sirupsen/logrus"
dockerclient "github.com/docker/engine-api/client" dockerclient "github.com/docker/engine-api/client"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
composeConfig "github.com/docker/libcompose/config" composeConfig "github.com/docker/libcompose/config"
@ -11,6 +10,7 @@ import (
"github.com/docker/libcompose/project" "github.com/docker/libcompose/project"
"github.com/docker/libcompose/project/options" "github.com/docker/libcompose/project/options"
"github.com/rancher/os/config" "github.com/rancher/os/config"
"github.com/rancher/os/log"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -41,9 +41,7 @@ func (s *Service) DependentServices() []project.ServiceRelationship {
} }
if s.requiresUserDocker() { if s.requiresUserDocker() {
// Linking to cloud-init is a hack really. The problem is we need to link to something rels = appendLink(rels, "docker", false, s.project)
// that will trigger a reload
rels = appendLink(rels, "cloud-init", false, s.project)
} else if s.missingImage() { } else if s.missingImage() {
rels = appendLink(rels, "network", false, s.project) rels = appendLink(rels, "network", false, s.project)
} }
@ -65,7 +63,7 @@ func (s *Service) requiresSyslog() bool {
} }
func (s *Service) requiresUserDocker() bool { func (s *Service) requiresUserDocker() bool {
return s.Config().Labels[config.SCOPE] != config.SYSTEM return s.Config().Labels[config.ScopeLabel] != config.System
} }
func appendLink(deps []project.ServiceRelationship, name string, optional bool, p *project.Project) []project.ServiceRelationship { func appendLink(deps []project.ServiceRelationship, name string, optional bool, p *project.Project) []project.ServiceRelationship {
@ -95,10 +93,10 @@ func (s *Service) shouldRebuild(ctx context.Context) (bool, error) {
} }
name := containerInfo.Name[1:] name := containerInfo.Name[1:]
origRebuildLabel := containerInfo.Config.Labels[config.REBUILD] origRebuildLabel := containerInfo.Config.Labels[config.RebuildLabel]
newRebuildLabel := s.Config().Labels[config.REBUILD] newRebuildLabel := s.Config().Labels[config.RebuildLabel]
rebuildLabelChanged := newRebuildLabel != origRebuildLabel rebuildLabelChanged := newRebuildLabel != origRebuildLabel
logrus.WithFields(logrus.Fields{ log.WithFields(log.Fields{
"origRebuildLabel": origRebuildLabel, "origRebuildLabel": origRebuildLabel,
"newRebuildLabel": newRebuildLabel, "newRebuildLabel": newRebuildLabel,
"rebuildLabelChanged": rebuildLabelChanged, "rebuildLabelChanged": rebuildLabelChanged,
@ -115,15 +113,15 @@ func (s *Service) shouldRebuild(ctx context.Context) (bool, error) {
} }
if outOfSync { if outOfSync {
if s.Name() == "console" { if s.Name() == "console" {
origConsoleLabel := containerInfo.Config.Labels[config.CONSOLE] origConsoleLabel := containerInfo.Config.Labels[config.ConsoleLabel]
newConsoleLabel := s.Config().Labels[config.CONSOLE] newConsoleLabel := s.Config().Labels[config.ConsoleLabel]
if newConsoleLabel != origConsoleLabel { if newConsoleLabel != origConsoleLabel {
return true, nil return true, nil
} }
} else if rebuildLabelChanged || origRebuildLabel != "false" { } else if rebuildLabelChanged || origRebuildLabel != "false" {
return true, nil return true, nil
} else { } else {
logrus.Warnf("%s needs rebuilding", name) log.Warnf("%s needs rebuilding", name)
} }
} }
} }
@ -142,7 +140,7 @@ func (s *Service) Up(ctx context.Context, options options.Up) error {
return err return err
} }
if shouldRebuild { if shouldRebuild {
logrus.Infof("Rebuilding %s", s.Name()) log.Infof("Rebuilding %s", s.Name())
cs, err := s.Service.Containers(ctx) cs, err := s.Service.Containers(ctx)
if err != nil { if err != nil {
return err return err
@ -156,13 +154,13 @@ func (s *Service) Up(ctx context.Context, options options.Up) error {
return err return err
} }
} }
if labels[config.CREATE_ONLY] == "true" { if labels[config.CreateOnlyLabel] == "true" {
return s.checkReload(labels) return s.checkReload(labels)
} }
if err := s.Service.Up(ctx, options); err != nil { if err := s.Service.Up(ctx, options); err != nil {
return err return err
} }
if labels[config.DETACH] == "false" { if labels[config.DetachLabel] == "false" {
if err := s.wait(ctx); err != nil { if err := s.wait(ctx); err != nil {
return err return err
} }
@ -172,7 +170,7 @@ func (s *Service) Up(ctx context.Context, options options.Up) error {
} }
func (s *Service) checkReload(labels map[string]string) error { func (s *Service) checkReload(labels map[string]string) error {
if labels[config.RELOAD_CONFIG] == "true" { if labels[config.ReloadConfigLabel] == "true" {
return project.ErrRestart return project.ErrRestart
} }
return nil return nil
@ -223,9 +221,8 @@ func (s *Service) rename(ctx context.Context) error {
} }
if len(info.Name) > 0 && info.Name[1:] != s.Name() { if len(info.Name) > 0 && info.Name[1:] != s.Name() {
logrus.Debugf("Renaming container %s => %s", info.Name[1:], s.Name()) log.Debugf("Renaming container %s => %s", info.Name[1:], s.Name())
return client.ContainerRename(context.Background(), info.ID, s.Name()) return client.ContainerRename(context.Background(), info.ID, s.Name())
} else {
return nil
} }
return nil
} }

View File

@ -15,11 +15,17 @@ type ServiceFactory struct {
func (s *ServiceFactory) Create(project *project.Project, name string, serviceConfig *composeConfig.ServiceConfig) (project.Service, error) { func (s *ServiceFactory) Create(project *project.Project, name string, serviceConfig *composeConfig.ServiceConfig) (project.Service, error) {
if after := serviceConfig.Labels["io.rancher.os.after"]; after != "" { if after := serviceConfig.Labels["io.rancher.os.after"]; after != "" {
for _, dep := range util.TrimSplit(after, ",") { for _, dep := range util.TrimSplit(after, ",") {
if dep == "cloud-init" {
dep = "cloud-init-execute"
}
s.Deps[name] = append(s.Deps[name], dep) s.Deps[name] = append(s.Deps[name], dep)
} }
} }
if before := serviceConfig.Labels["io.rancher.os.before"]; before != "" { if before := serviceConfig.Labels["io.rancher.os.before"]; before != "" {
for _, dep := range util.TrimSplit(before, ",") { for _, dep := range util.TrimSplit(before, ",") {
if dep == "cloud-init" {
dep = "cloud-init-execute"
}
s.Deps[dep] = append(s.Deps[dep], name) s.Deps[dep] = append(s.Deps[dep], name)
} }
} }

View File

@ -6,6 +6,5 @@ import (
) )
func IsSystemContainer(serviceConfig *composeConfig.ServiceConfig) bool { func IsSystemContainer(serviceConfig *composeConfig.ServiceConfig) bool {
return serviceConfig.Labels[config.SCOPE] == config.SYSTEM return serviceConfig.Labels[config.ScopeLabel] == config.System
} }

7
docs/Gemfile Normal file
View File

@ -0,0 +1,7 @@
source 'https://rubygems.org'
require 'json'
require 'open-uri'
versions = JSON.parse(open('https://pages.github.com/versions.json').read)
gem 'github-pages'

131
docs/Gemfile.lock Normal file
View File

@ -0,0 +1,131 @@
GEM
remote: https://rubygems.org/
specs:
RedCloth (4.2.9)
activesupport (4.2.5)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.3.8)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.10.0)
colorator (0.1)
ethon (0.8.0)
ffi (>= 1.3.0)
execjs (2.6.0)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.10)
gemoji (2.1.0)
github-pages (51)
RedCloth (= 4.2.9)
github-pages-health-check (= 1.0.1)
jekyll (= 3.0.3)
jekyll-coffeescript (= 1.0.1)
jekyll-feed (= 0.4.0)
jekyll-gist (= 1.4.0)
jekyll-mentions (= 1.0.1)
jekyll-paginate (= 1.1.0)
jekyll-redirect-from (= 0.9.1)
jekyll-sass-converter (= 1.3.0)
jekyll-seo-tag (= 1.2.0)
jekyll-sitemap (= 0.10.0)
jekyll-textile-converter (= 0.1.0)
jemoji (= 0.5.1)
kramdown (= 1.9.0)
liquid (= 3.0.6)
mercenary (~> 0.3)
rdiscount (= 2.1.8)
redcarpet (= 3.3.3)
rouge (= 1.10.1)
terminal-table (~> 1.4)
github-pages-health-check (1.0.1)
addressable (~> 2.3)
net-dns (~> 0.8)
octokit (~> 4.0)
public_suffix (~> 1.4)
typhoeus (~> 0.7)
html-pipeline (2.3.0)
activesupport (>= 2, < 5)
nokogiri (>= 1.4)
i18n (0.7.0)
jekyll (3.0.3)
colorator (~> 0.1)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1)
kramdown (~> 1.3)
liquid (~> 3.0)
mercenary (~> 0.3.3)
rouge (~> 1.7)
safe_yaml (~> 1.0)
jekyll-coffeescript (1.0.1)
coffee-script (~> 2.2)
jekyll-feed (0.4.0)
jekyll-gist (1.4.0)
octokit (~> 4.2)
jekyll-mentions (1.0.1)
html-pipeline (~> 2.3)
jekyll (~> 3.0)
jekyll-paginate (1.1.0)
jekyll-redirect-from (0.9.1)
jekyll (>= 2.0)
jekyll-sass-converter (1.3.0)
sass (~> 3.2)
jekyll-seo-tag (1.2.0)
jekyll (>= 2.0)
jekyll-sitemap (0.10.0)
jekyll-textile-converter (0.1.0)
RedCloth (~> 4.0)
jekyll-watch (1.3.0)
listen (~> 3.0)
jemoji (0.5.1)
gemoji (~> 2.0)
html-pipeline (~> 2.2)
jekyll (>= 2.0)
json (1.8.1)
kramdown (1.9.0)
liquid (3.0.6)
listen (3.0.4)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
mercenary (0.3.5)
mini_portile (0.6.2)
minitest (5.8.2)
multipart-post (2.0.0)
net-dns (0.8.0)
nokogiri (1.6.6.2)
mini_portile (~> 0.6.0)
octokit (4.2.0)
sawyer (~> 0.6.0, >= 0.5.3)
public_suffix (1.5.2)
rb-fsevent (0.9.6)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
rdiscount (2.1.8)
redcarpet (3.3.3)
rouge (1.10.1)
safe_yaml (1.0.4)
sass (3.4.19)
sawyer (0.6.0)
addressable (~> 2.3.5)
faraday (~> 0.8, < 0.10)
terminal-table (1.5.2)
thread_safe (0.3.5)
typhoeus (0.8.0)
ethon (>= 0.8.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
PLATFORMS
ruby
DEPENDENCIES
github-pages
json
BUNDLED WITH
1.11.2

20
docs/README.md Normal file
View File

@ -0,0 +1,20 @@
# Documentation for the `master` version of `rancher/os`
This dir is _not_ the documentation for any released version of RancherOS.
You can find that at the [Rancher Labs Documentation site](https://docs.rancher.com) and
specifically for [RancherOS](https://docs.rancher.com/os/).
When there are Pull Requests to the `rancher/os` repository that affect the user (or developer),
then it should include changes to the documenation in this directory.
When we make a new release of RancherOS, the `docs/os` dir will be copied into the `rancher/rancher.github.io`
repository to be accessible by users.
## Previewing your changes
You can either build and view your docs locally by running `make docs`, or you can
set your fork of the `rancher/os` repository to render your `master` using `GitHub Pages`.
To set up `GitHub Pages`, browse to your fork, then to the `Settings` - under `GitHub Pages`, set the `Source`
to `master branch /docs folder` and hit the `Save` button. GitHub will tell you the URL at which the
documenation can be read.

16
docs/_config.yml Normal file
View File

@ -0,0 +1,16 @@
name: Rancher Documentation
description: Documentation for Rancher
#URL: http://rancher.github.io
baseurl: ""
markdown: kramdown
highlighter: rouge
kramdown:
input: GFM
syntax_highlighter: rouge
permalink: pretty
gems:
- jekyll-redirect-from

View File

@ -0,0 +1,142 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/rancher-os/"><img src="{{site.baseurl}}/img/rancheros-logo-horiz-wht.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse" >
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/os/">Overview</a></li>
<li><a href="{{site.baseurl}}/os/quick-start-guide/">Quick Start Guide</a></li>
<li class="panel">
<a href="#running-rancheros" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">
<!--OLD HREF => {{site.baseurl}}/os/running-rancheros/-->
Running RancherOS <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="running-rancheros">
<li class="panel">
<a href="#workstation" data-toggle="collapse" class="collapsed" data-parent="#running-rancheros">Workstation <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="workstation">
<li><a href="{{site.baseurl}}/os/running-rancheros/workstation/docker-machine/">Docker Machine</a></li>
<li><a href="{{site.baseurl}}/os/running-rancheros/workstation/boot-from-iso/">Boot from ISO</a></li>
</ul>
</li>
<li class="panel">
<a href="#cloud" data-toggle="collapse" class="collapsed" data-parent="#running-rancheros">Cloud <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="cloud">
<li><a href="{{site.baseurl}}/os/running-rancheros/cloud/aws/">AWS</a></li>
<li><a href="{{site.baseurl}}/os/running-rancheros/cloud/gce/">GCE</a></li>
<!--<li><a href="{{site.baseurl}}/os/running-rancheros/cloud/do/">DigitalOcean</a></li>-->
<li><a href="{{site.baseurl}}/os/running-rancheros/cloud/openstack/">Openstack</a></li>
<li><a href="{{site.baseurl}}/os/running-rancheros/cloud/azure/">Azure</a></li>
</ul>
</li>
<li class="panel">
<a href="#virtual-server" data-toggle="collapse" class="collapsed" data-parent="#running-rancheros">Bare metal and Virtual Server <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="virtual-server">
<li><a href="{{site.baseurl}}/os/running-rancheros/server/install-to-disk/">Install to Disk</a></li>
<li><a href="{{site.baseurl}}/os/running-rancheros/server/pxe/">PXE</a></li>
<li><a href="{{site.baseurl}}/os/running-rancheros/server/raspberry-pi/">Raspberry Pi</a></li>
</ul>
</li>
</ul>
</li>
<li class="panel">
<a href="#configuration" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Configuration <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="configuration">
<li><a href="{{site.baseurl}}/os/configuration/">Configuring RancherOS</a></li>
<li><a href="{{site.baseurl}}/os/configuration/ssh-keys/">SSH Keys</a></li>
<li><a href="{{site.baseurl}}/os/configuration/write-files/">Writing Files</a></li>
<li><a href="{{site.baseurl}}/os/configuration/running-commands/">Running Commands</a></li>
<li><a href="{{site.baseurl}}/os/configuration/hostname/">Setting the Hostname</a></li>
<li><a href="{{site.baseurl}}/os/configuration/custom-console/">Custom Console</a></li>
<li><a href="{{site.baseurl}}/os/configuration/docker/">Configuring Docker or System Docker</a></li>
<li><a href="{{site.baseurl}}/os/configuration/setting-up-docker-tls/">Setting up Docker TLS</a></li>
<li><a href="{{site.baseurl}}/os/configuration/private-registries/">Private Registries</a></li>
<li><a href="{{site.baseurl}}/os/configuration/switching-docker-versions/">Switching Docker Versions</a></li>
<li><a href="{{site.baseurl}}/os/configuration/users/">Users</a></li>
<li><a href="{{site.baseurl}}/os/configuration/resizing-device-partition/">Resizing a Device Partition</a></li>
<li><a href="{{site.baseurl}}/os/configuration/sysctl/">sysctl Settings</a></li>
<li><a href="{{site.baseurl}}/os/configuration/loading-kernel-modules/">Loading kernel modules</a></li>
<li><a href="{{site.baseurl}}/os/configuration/kernel-modules-kernel-headers/">Install kernel modules that require kernel headers</a></li>
<li><a href="{{site.baseurl}}/os/configuration/dkms/">DKMS</a></li>
</ul>
</li>
<li class="panel">
<a href="#systemservices" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">System Services<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="systemservices">
<li><a href="{{site.baseurl}}/os/system-services/adding-system-services/">System Services</a></li>
<li><a href="{{site.baseurl}}/os/system-services/built-in-system-services/">Built-in System Services</a></li>
<li><a href="{{site.baseurl}}/os/system-services/custom-system-services/">Custom Services</a></li>
<li><a href="{{site.baseurl}}/os/system-services/system-docker-volumes/">System Docker Volumes</a></li>
<li><a href="{{site.baseurl}}/os/system-services/environment/">Environment</a></li>
</ul>
<li class="panel">
<a href="#bootprocess" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Boot Process<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="bootprocess">
<li><a href="{{site.baseurl}}/os/boot-process/built-in-system-services/">Built-in System Services</a></li>
<li><a href="{{site.baseurl}}/os/boot-process/cloud-init">Cloud-init</a></li>
<li><a href="{{site.baseurl}}/os/boot-process/image-preloading">Image Preloading</a></li>
</ul>
</li>
</li>
<li class="panel">
<a href="#storage" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Storage<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="storage">
<li><a href="{{site.baseurl}}/os/storage/state-partition">State Partition</a></li>
<li><a href="{{site.baseurl}}/os/storage/additional-mounts/">Additional Mounts</a></li>
<li><a href="{{site.baseurl}}/os/storage/using-zfs/">Using ZFS</a></li>
</ul>
</li>
<li class="panel">
<a href="#networking" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Networking<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="networking">
<li><a href="{{site.baseurl}}/os/networking/interfaces/">Interfaces</a></li>
<li><a href="{{site.baseurl}}/os/networking/dns/">DNS</a></li>
<li><a href="{{site.baseurl}}/os/networking/proxy-settings/">Proxy Settings</a></li>
</ul>
</li>
<li class="panel">
<a href="#custombuilds" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Custom Builds<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="custombuilds">
<li><a href="{{site.baseurl}}/os/custom-builds/custom-rancheros-iso/">Custom RancherOS ISO</a></li>
<li><a href="{{site.baseurl}}/os/custom-builds/custom-kernels/">Custom Kernels</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/os/upgrading/">Upgrading</a></li>
<li><a href="{{site.baseurl}}/os/amazon-ecs/">Amazon ECS</a></li>
<li><a href="{{site.baseurl}}/os/contributing/">Contributing to RancherOS</a></li>
<li><a href="{{site.baseurl}}/os/running-rancher-on-rancheros/">Tips on using Rancher with RancherOS</a></li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,615 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/" data-toggle="refresh">Rancher Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/">How to use the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-keys/">What are API keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">API Resources</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/common/">Common Resource Fields</a></li>
<li class="panel">
<a href="#account" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Account <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="account">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/" data-toggle="refresh">Account</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#addOutputsInput" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AddOutputsInput <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="addOutputsInput">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/addOutputsInput/" data-toggle="refresh">AddOutputsInput</a></li>
</ul>
</li>
<li class="panel">
<a href="#amazonec2Config" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Amazonec2Config <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="amazonec2Config">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/amazonec2Config/" data-toggle="refresh">Amazonec2Config</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/amazonec2Config/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#apiKey" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ApiKey <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="apiKey">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/" data-toggle="refresh">ApiKey</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#auditLog" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AuditLog <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="auditLog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/auditLog/" data-toggle="refresh">AuditLog</a></li>
</ul>
</li>
<li class="panel">
<a href="#azureConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AzureConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="azureConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/azureConfig/" data-toggle="refresh">AzureConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/azureConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#certificate" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Certificate <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="certificate">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/" data-toggle="refresh">Certificate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#container" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Container <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="container">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/" data-toggle="refresh">Container</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#console" data-toggle="refresh">Console</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#execute" data-toggle="refresh">Execute</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#logs" data-toggle="refresh">Logs</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#proxy" data-toggle="refresh">Proxy</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#start" data-toggle="refresh">Start</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#stop" data-toggle="refresh">Stop</a></li>
</ul>
</li>
<li class="panel">
<a href="#containerExec" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ContainerExec <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="containerExec">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/containerExec/" data-toggle="refresh">ContainerExec</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/containerExec/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#digitaloceanConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DigitaloceanConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="digitaloceanConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/digitaloceanConfig/" data-toggle="refresh">DigitaloceanConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/digitaloceanConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#dnsService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DnsService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dnsService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/" data-toggle="refresh">DnsService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#dockerBuild" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DockerBuild <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dockerBuild">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dockerBuild/" data-toggle="refresh">DockerBuild</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dockerBuild/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#environment" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environment <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environment">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/" data-toggle="refresh">Environment</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#activateservices" data-toggle="refresh">Activateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#deactivateservices" data-toggle="refresh">Deactivateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#exportconfig" data-toggle="refresh">Exportconfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#rollback" data-toggle="refresh">Rollback</a></li>
</ul>
</li>
<li class="panel">
<a href="#environmentUpgrade" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">EnvironmentUpgrade <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environmentUpgrade">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environmentUpgrade/" data-toggle="refresh">EnvironmentUpgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environmentUpgrade/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#exoscaleConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ExoscaleConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="exoscaleConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/exoscaleConfig/" data-toggle="refresh">ExoscaleConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/exoscaleConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#externalService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ExternalService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="externalService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/" data-toggle="refresh">ExternalService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#genericConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">GenericConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="genericConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/genericConfig/" data-toggle="refresh">GenericConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/genericConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#googleConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">GoogleConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="googleConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/googleConfig/" data-toggle="refresh">GoogleConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/googleConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#healthcheckInstanceHostMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HealthcheckInstanceHostMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="healthcheckInstanceHostMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/healthcheckInstanceHostMap/" data-toggle="refresh">HealthcheckInstanceHostMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#host" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Host <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="host">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/" data-toggle="refresh">Host</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#dockersocket" data-toggle="refresh">Dockersocket</a></li>
</ul>
</li>
<li class="panel">
<a href="#hostAccess" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HostAccess <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hostAccess">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/hostAccess/" data-toggle="refresh">HostAccess</a></li>
</ul>
</li>
<li class="panel">
<a href="#hypervConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HypervConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hypervConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/hypervConfig/" data-toggle="refresh">HypervConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/hypervConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#identity" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Identity <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="identity">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/identity/" data-toggle="refresh">Identity</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/" data-toggle="refresh">LoadBalancerConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/" data-toggle="refresh">LoadBalancerService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#machine" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Machine <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machine">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/" data-toggle="refresh">Machine</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#openstackConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">OpenstackConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="openstackConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/openstackConfig/" data-toggle="refresh">OpenstackConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/openstackConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#packetConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PacketConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="packetConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/packetConfig/" data-toggle="refresh">PacketConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/packetConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#project" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Project <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="project">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/" data-toggle="refresh">Project</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#setmembers" data-toggle="refresh">Setmembers</a></li>
</ul>
</li>
<li class="panel">
<a href="#projectMember" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ProjectMember <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="projectMember">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/" data-toggle="refresh">ProjectMember</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#pullTask" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PullTask <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="pullTask">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/" data-toggle="refresh">PullTask</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#rackspaceConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RackspaceConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rackspaceConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/rackspaceConfig/" data-toggle="refresh">RackspaceConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/rackspaceConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registrationToken" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistrationToken <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registrationToken">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/" data-toggle="refresh">RegistrationToken</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registry" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Registry <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registry">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/" data-toggle="refresh">Registry</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#registryCredential" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistryCredential <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registryCredential">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/" data-toggle="refresh">RegistryCredential</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#service" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Service <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="service">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/" data-toggle="refresh">Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceConsumeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceConsumeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceConsumeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceConsumeMap/" data-toggle="refresh">ServiceConsumeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceExposeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceExposeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceExposeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceExposeMap/" data-toggle="refresh">ServiceExposeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#setting" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Setting <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="setting">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/setting/" data-toggle="refresh">Setting</a></li>
</ul>
</li>
<li class="panel">
<a href="#softlayerConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">SoftlayerConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="softlayerConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/softlayerConfig/" data-toggle="refresh">SoftlayerConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/softlayerConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#statsAccess" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">StatsAccess <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="statsAccess">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/statsAccess/" data-toggle="refresh">StatsAccess</a></li>
</ul>
</li>
<li class="panel">
<a href="#subscribe" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Subscribe <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="subscribe">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/" data-toggle="refresh">Subscribe</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#ubiquityConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">UbiquityConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="ubiquityConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/ubiquityConfig/" data-toggle="refresh">UbiquityConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/ubiquityConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#virtualboxConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">VirtualboxConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="virtualboxConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/virtualboxConfig/" data-toggle="refresh">VirtualboxConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/virtualboxConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#vmwarefusionConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">VmwarefusionConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="vmwarefusionConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/vmwarefusionConfig/" data-toggle="refresh">VmwarefusionConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/vmwarefusionConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#vmwarevcloudairConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">VmwarevcloudairConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="vmwarevcloudairConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/vmwarevcloudairConfig/" data-toggle="refresh">VmwarevcloudairConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/vmwarevcloudairConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#vmwarevsphereConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">VmwarevsphereConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="vmwarevsphereConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/vmwarevsphereConfig/" data-toggle="refresh">VmwarevsphereConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/vmwarevsphereConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#volume" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Volume <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="volume">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/" data-toggle="refresh">Volume</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,532 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/" data-toggle="refresh">Rancher Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/">How to use the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/access-control/">Setting up Access Control using the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-keys/">What are API keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">API Resources</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/common/">Common Resource Fields</a></li>
<li class="panel">
<a href="#account" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Account <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="account">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/" data-toggle="refresh">Account</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#addOutputsInput" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AddOutputsInput <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="addOutputsInput">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/addOutputsInput/" data-toggle="refresh">AddOutputsInput</a></li>
</ul>
</li>
<li class="panel">
<a href="#amazonec2Config" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Amazonec2Config <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="amazonec2Config">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/amazonec2Config/" data-toggle="refresh">Amazonec2Config</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/amazonec2Config/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#apiKey" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ApiKey <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="apiKey">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/" data-toggle="refresh">ApiKey</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#auditLog" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AuditLog <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="auditLog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/auditLog/" data-toggle="refresh">AuditLog</a></li>
</ul>
</li>
<li class="panel">
<a href="#azureConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AzureConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="azureConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/azureConfig/" data-toggle="refresh">AzureConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/azureConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#certificate" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Certificate <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="certificate">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/" data-toggle="refresh">Certificate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#container" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Container <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="container">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/" data-toggle="refresh">Container</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#console" data-toggle="refresh">Console</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#execute" data-toggle="refresh">Execute</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#logs" data-toggle="refresh">Logs</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#proxy" data-toggle="refresh">Proxy</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#start" data-toggle="refresh">Start</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#stop" data-toggle="refresh">Stop</a></li>
</ul>
</li>
<li class="panel">
<a href="#containerExec" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ContainerExec <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="containerExec">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/containerExec/" data-toggle="refresh">ContainerExec</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/containerExec/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#digitaloceanConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DigitaloceanConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="digitaloceanConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/digitaloceanConfig/" data-toggle="refresh">DigitaloceanConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/digitaloceanConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#dnsService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DnsService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dnsService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/" data-toggle="refresh">DnsService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#dockerBuild" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DockerBuild <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dockerBuild">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dockerBuild/" data-toggle="refresh">DockerBuild</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dockerBuild/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#environment" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environment <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environment">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/" data-toggle="refresh">Environment</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#activateservices" data-toggle="refresh">Activateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#deactivateservices" data-toggle="refresh">Deactivateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#exportconfig" data-toggle="refresh">Exportconfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#rollback" data-toggle="refresh">Rollback</a></li>
</ul>
</li>
<li class="panel">
<a href="#environmentUpgrade" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">EnvironmentUpgrade <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environmentUpgrade">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environmentUpgrade/" data-toggle="refresh">EnvironmentUpgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environmentUpgrade/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#externalService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ExternalService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="externalService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/" data-toggle="refresh">ExternalService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#healthcheckInstanceHostMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HealthcheckInstanceHostMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="healthcheckInstanceHostMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/healthcheckInstanceHostMap/" data-toggle="refresh">HealthcheckInstanceHostMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#host" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Host <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="host">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/" data-toggle="refresh">Host</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#dockersocket" data-toggle="refresh">Dockersocket</a></li>
</ul>
</li>
<li class="panel">
<a href="#hostAccess" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HostAccess <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hostAccess">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/hostAccess/" data-toggle="refresh">HostAccess</a></li>
</ul>
</li>
<li class="panel">
<a href="#identity" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Identity <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="identity">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/identity/" data-toggle="refresh">Identity</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/" data-toggle="refresh">LoadBalancerConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerConfig/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/" data-toggle="refresh">LoadBalancerService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#machine" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Machine <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machine">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/" data-toggle="refresh">Machine</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#machineDriver" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">MachineDriver <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machineDriver">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/" data-toggle="refresh">MachineDriver</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#reactivate" data-toggle="refresh">Reactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#packetConfig" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PacketConfig <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="packetConfig">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/packetConfig/" data-toggle="refresh">PacketConfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/packetConfig/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#project" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Project <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="project">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/" data-toggle="refresh">Project</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#setmembers" data-toggle="refresh">Setmembers</a></li>
</ul>
</li>
<li class="panel">
<a href="#projectMember" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ProjectMember <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="projectMember">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/" data-toggle="refresh">ProjectMember</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#pullTask" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PullTask <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="pullTask">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/" data-toggle="refresh">PullTask</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registrationToken" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistrationToken <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registrationToken">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/" data-toggle="refresh">RegistrationToken</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registry" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Registry <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registry">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/" data-toggle="refresh">Registry</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#registryCredential" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistryCredential <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registryCredential">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/" data-toggle="refresh">RegistryCredential</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#scalePolicy" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ScalePolicy <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="scalePolicy">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/scalePolicy/" data-toggle="refresh">ScalePolicy</a></li>
</ul>
</li>
<li class="panel">
<a href="#service" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Service <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="service">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/" data-toggle="refresh">Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceConsumeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceConsumeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceConsumeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceConsumeMap/" data-toggle="refresh">ServiceConsumeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceExposeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceExposeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceExposeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceExposeMap/" data-toggle="refresh">ServiceExposeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#setting" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Setting <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="setting">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/setting/" data-toggle="refresh">Setting</a></li>
</ul>
</li>
<li class="panel">
<a href="#snapshotBackupInput" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">SnapshotBackupInput <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="snapshotBackupInput">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/snapshotBackupInput/" data-toggle="refresh">SnapshotBackupInput</a></li>
</ul>
</li>
<li class="panel">
<a href="#statsAccess" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">StatsAccess <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="statsAccess">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/statsAccess/" data-toggle="refresh">StatsAccess</a></li>
</ul>
</li>
<li class="panel">
<a href="#subscribe" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Subscribe <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="subscribe">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/" data-toggle="refresh">Subscribe</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#volume" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Volume <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="volume">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/" data-toggle="refresh">Volume</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#restorefrombackup" data-toggle="refresh">Restorefrombackup</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#reverttosnapshot" data-toggle="refresh">Reverttosnapshot</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#snapshot" data-toggle="refresh">Snapshot</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,410 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/" data-toggle="refresh">Rancher Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/">How to use the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/access-control/">Setting up Access Control using the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-keys/">What are API keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">API Resources</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/common/">Common Resource Fields</a></li>
<li class="panel">
<a href="#account" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Account <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="account">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/" data-toggle="refresh">Account</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#apiKey" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ApiKey <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="apiKey">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/" data-toggle="refresh">ApiKey</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#auditLog" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AuditLog <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="auditLog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/auditLog/" data-toggle="refresh">AuditLog</a></li>
</ul>
</li>
<li class="panel">
<a href="#certificate" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Certificate <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="certificate">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/" data-toggle="refresh">Certificate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#container" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Container <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="container">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/" data-toggle="refresh">Container</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#console" data-toggle="refresh">Console</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#execute" data-toggle="refresh">Execute</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#logs" data-toggle="refresh">Logs</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#proxy" data-toggle="refresh">Proxy</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#start" data-toggle="refresh">Start</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#stop" data-toggle="refresh">Stop</a></li>
</ul>
</li>
<li class="panel">
<a href="#dnsService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DnsService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dnsService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/" data-toggle="refresh">DnsService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#environment" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environment <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environment">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/" data-toggle="refresh">Environment</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#activateservices" data-toggle="refresh">Activateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#deactivateservices" data-toggle="refresh">Deactivateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#exportconfig" data-toggle="refresh">Exportconfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#rollback" data-toggle="refresh">Rollback</a></li>
</ul>
</li>
<li class="panel">
<a href="#externalService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ExternalService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="externalService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/" data-toggle="refresh">ExternalService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#healthcheckInstanceHostMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HealthcheckInstanceHostMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="healthcheckInstanceHostMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/healthcheckInstanceHostMap/" data-toggle="refresh">HealthcheckInstanceHostMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#host" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Host <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="host">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/" data-toggle="refresh">Host</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#dockersocket" data-toggle="refresh">Dockersocket</a></li>
</ul>
</li>
<li class="panel">
<a href="#identity" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Identity <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="identity">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/identity/" data-toggle="refresh">Identity</a></li>
</ul>
</li>
<li class="panel">
<a href="#kubernetesStackUpgrade" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">KubernetesStackUpgrade <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="kubernetesStackUpgrade">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/kubernetesStackUpgrade/" data-toggle="refresh">KubernetesStackUpgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/kubernetesStackUpgrade/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/" data-toggle="refresh">LoadBalancerService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#machine" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Machine <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machine">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/" data-toggle="refresh">Machine</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#machineDriver" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">MachineDriver <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machineDriver">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/" data-toggle="refresh">MachineDriver</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#reactivate" data-toggle="refresh">Reactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#project" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Project <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="project">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/" data-toggle="refresh">Project</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#setmembers" data-toggle="refresh">Setmembers</a></li>
</ul>
</li>
<li class="panel">
<a href="#projectMember" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ProjectMember <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="projectMember">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/" data-toggle="refresh">ProjectMember</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#pullTask" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PullTask <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="pullTask">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/" data-toggle="refresh">PullTask</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registrationToken" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistrationToken <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registrationToken">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/" data-toggle="refresh">RegistrationToken</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registry" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Registry <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registry">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/" data-toggle="refresh">Registry</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#registryCredential" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistryCredential <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registryCredential">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/" data-toggle="refresh">RegistryCredential</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#service" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Service <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="service">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/" data-toggle="refresh">Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelrollback" data-toggle="refresh">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceConsumeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceConsumeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceConsumeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceConsumeMap/" data-toggle="refresh">ServiceConsumeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceExposeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceExposeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceExposeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceExposeMap/" data-toggle="refresh">ServiceExposeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#setting" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Setting <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="setting">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/setting/" data-toggle="refresh">Setting</a></li>
</ul>
</li>
<li class="panel">
<a href="#subscribe" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Subscribe <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="subscribe">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/" data-toggle="refresh">Subscribe</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#volume" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Volume <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="volume">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/" data-toggle="refresh">Volume</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#restorefrombackup" data-toggle="refresh">Restorefrombackup</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#reverttosnapshot" data-toggle="refresh">Reverttosnapshot</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#snapshot" data-toggle="refresh">Snapshot</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,405 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">All Resources</a></li>
<li class="panel">
<a href="#account" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Account <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="account">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/">Account</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/account/#deactivate">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#apiKey" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ApiKey <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="apiKey">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/">ApiKey</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/apiKey/#deactivate">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#auditLog" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AuditLog <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="auditLog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/auditLog/">AuditLog</a></li>
</ul>
</li>
<li class="panel">
<a href="#certificate" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Certificate <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="certificate">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/">Certificate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/certificate/#delete">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#container" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Container <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="container">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/">Container</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#console">Console</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#execute">Execute</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#logs">Logs</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#proxy">Proxy</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#restart">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#start">Start</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/container/#stop">Stop</a></li>
</ul>
</li>
<li class="panel">
<a href="#dnsService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DnsService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dnsService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/">DnsService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#removeservicelink">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#rollback">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#setservicelinks">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/dnsService/#upgrade">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#environment" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environment <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environment">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/">Environment</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#activateservices">Activateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelrollback">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#cancelupgrade">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#deactivateservices">Deactivateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#exportconfig">Exportconfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#finishupgrade">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/environment/#rollback">Rollback</a></li>
</ul>
</li>
<li class="panel">
<a href="#externalService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ExternalService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="externalService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/">ExternalService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelrollback">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#cancelupgrade">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#finishupgrade">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#rollback">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/externalService/#upgrade">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#healthcheckInstanceHostMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HealthcheckInstanceHostMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="healthcheckInstanceHostMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/healthcheckInstanceHostMap/">HealthcheckInstanceHostMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#host" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Host <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="host">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/">Host</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/host/#dockersocket">Dockersocket</a></li>
</ul>
</li>
<li class="panel">
<a href="#identity" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Identity <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="identity">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/identity/">Identity</a></li>
</ul>
</li>
<li class="panel">
<a href="#kubernetesStackUpgrade" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">KubernetesStackUpgrade <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="kubernetesStackUpgrade">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/kubernetesStackUpgrade/">KubernetesStackUpgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/kubernetesStackUpgrade/#create">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/">LoadBalancerService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#addservicelink">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelrollback">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#cancelupgrade">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#finishupgrade">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#removeservicelink">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#rollback">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#setservicelinks">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/loadBalancerService/#upgrade">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#machine" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Machine <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machine">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/">Machine</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machine/#delete">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#machineDriver" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">MachineDriver <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machineDriver">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/">MachineDriver</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/machineDriver/#reactivate">Reactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#project" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Project <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="project">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/">Project</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/project/#setmembers">Setmembers</a></li>
</ul>
</li>
<li class="panel">
<a href="#projectMember" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ProjectMember <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="projectMember">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/">ProjectMember</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/projectMember/#deactivate">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#pullTask" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PullTask <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="pullTask">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/">PullTask</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/pullTask/#create">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registrationToken" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistrationToken <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registrationToken">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/">RegistrationToken</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registrationToken/#create">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registry" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Registry <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registry">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/">Registry</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registry/#deactivate">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#registryCredential" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistryCredential <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registryCredential">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/">RegistryCredential</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/registryCredential/#deactivate">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#service" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Service <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="service">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/">Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#update">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#activate">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#addservicelink">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelrollback">Cancelrollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#cancelupgrade">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#deactivate">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#finishupgrade">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#removeservicelink">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#restart">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#rollback">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/service/#setservicelinks">Setservicelinks</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceConsumeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceConsumeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceConsumeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceConsumeMap/">ServiceConsumeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceExposeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceExposeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceExposeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/serviceExposeMap/">ServiceExposeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#setting" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Setting <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="setting">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/setting/">Setting</a></li>
</ul>
</li>
<li class="panel">
<a href="#subscribe" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Subscribe <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="subscribe">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/">Subscribe</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/subscribe/#create">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#volume" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Volume <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="volume">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/">Volume</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#create">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#delete">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#restorefrombackup">Restorefrombackup</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#reverttosnapshot">Reverttosnapshot</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/volume/#snapshot">Snapshot</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,435 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/" data-toggle="refresh">Rancher Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/">How to use the API v2-beta</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/access-control/">Setting up Access Control using the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-keys/">What are API keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/">API Resources</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/common/">Common Resource Fields</a></li>
<li class="panel">
<a href="#account" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Account <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="account">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/account/" data-toggle="refresh">Account</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/account/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/account/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#apiKey" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ApiKey <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="apiKey">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/apiKey/" data-toggle="refresh">ApiKey</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/apiKey/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/apiKey/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/apiKey/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/apiKey/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/apiKey/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#auditLog" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">AuditLog <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="auditLog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/auditLog/" data-toggle="refresh">AuditLog</a></li>
</ul>
</li>
<li class="panel">
<a href="#binding" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Binding <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="binding">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/binding/" data-toggle="refresh">Binding</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/binding/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/binding/#update" data-toggle="refresh">Update</a></li>
</ul>
</li>
<li class="panel">
<a href="#certificate" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Certificate <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="certificate">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/certificate/" data-toggle="refresh">Certificate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/certificate/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/certificate/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/certificate/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#container" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Container <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="container">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/" data-toggle="refresh">Container</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#console" data-toggle="refresh">Console</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#execute" data-toggle="refresh">Execute</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#logs" data-toggle="refresh">Logs</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#proxy" data-toggle="refresh">Proxy</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#start" data-toggle="refresh">Start</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/container/#stop" data-toggle="refresh">Stop</a></li>
</ul>
</li>
<li class="panel">
<a href="#dnsService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">DnsService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="dnsService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/" data-toggle="refresh">DnsService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#continueupgrade" data-toggle="refresh">Continueupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/dnsService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#externalService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ExternalService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="externalService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/" data-toggle="refresh">ExternalService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#continueupgrade" data-toggle="refresh">Continueupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/externalService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#healthcheckInstanceHostMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">HealthcheckInstanceHostMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="healthcheckInstanceHostMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/healthcheckInstanceHostMap/" data-toggle="refresh">HealthcheckInstanceHostMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#host" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Host <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="host">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/host/" data-toggle="refresh">Host</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/host/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/host/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/host/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/host/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/host/#dockersocket" data-toggle="refresh">Dockersocket</a></li>
</ul>
</li>
<li class="panel">
<a href="#identity" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Identity <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="identity">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/identity/" data-toggle="refresh">Identity</a></li>
</ul>
</li>
<li class="panel">
<a href="#loadBalancerService" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">LoadBalancerService <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="loadBalancerService">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/" data-toggle="refresh">LoadBalancerService</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#continueupgrade" data-toggle="refresh">Continueupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/loadBalancerService/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#machine" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Machine <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machine">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machine/" data-toggle="refresh">Machine</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machine/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machine/#delete" data-toggle="refresh">Delete</a></li>
</ul>
</li>
<li class="panel">
<a href="#machineDriver" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">MachineDriver <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="machineDriver">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machineDriver/" data-toggle="refresh">MachineDriver</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machineDriver/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machineDriver/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/machineDriver/#reactivate" data-toggle="refresh">Reactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#project" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Project <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="project">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/project/" data-toggle="refresh">Project</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/project/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/project/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/project/#setmembers" data-toggle="refresh">Setmembers</a></li>
</ul>
</li>
<li class="panel">
<a href="#projectMember" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ProjectMember <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="projectMember">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/projectMember/" data-toggle="refresh">ProjectMember</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/projectMember/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/projectMember/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#pullTask" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">PullTask <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="pullTask">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/pullTask/" data-toggle="refresh">PullTask</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/pullTask/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registrationToken" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistrationToken <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registrationToken">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registrationToken/" data-toggle="refresh">RegistrationToken</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registrationToken/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#registry" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Registry <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registry">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registry/" data-toggle="refresh">Registry</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registry/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registry/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registry/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registry/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registry/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#registryCredential" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">RegistryCredential <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="registryCredential">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registryCredential/" data-toggle="refresh">RegistryCredential</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registryCredential/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registryCredential/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registryCredential/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registryCredential/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/registryCredential/#deactivate" data-toggle="refresh">Deactivate</a></li>
</ul>
</li>
<li class="panel">
<a href="#service" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Service <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="service">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/" data-toggle="refresh">Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#activate" data-toggle="refresh">Activate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#addservicelink" data-toggle="refresh">Addservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#continueupgrade" data-toggle="refresh">Continueupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#deactivate" data-toggle="refresh">Deactivate</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#removeservicelink" data-toggle="refresh">Removeservicelink</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#restart" data-toggle="refresh">Restart</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/service/#setservicelinks" data-toggle="refresh">Setservicelinks</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceBinding" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceBinding <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceBinding">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/serviceBinding/" data-toggle="refresh">ServiceBinding</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/serviceBinding/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/serviceBinding/#update" data-toggle="refresh">Update</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceConsumeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceConsumeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceConsumeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/serviceConsumeMap/" data-toggle="refresh">ServiceConsumeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceExposeMap" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceExposeMap <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceExposeMap">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/serviceExposeMap/" data-toggle="refresh">ServiceExposeMap</a></li>
</ul>
</li>
<li class="panel">
<a href="#serviceLog" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">ServiceLog <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="serviceLog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/serviceLog/" data-toggle="refresh">ServiceLog</a></li>
</ul>
</li>
<li class="panel">
<a href="#setting" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Setting <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="setting">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/setting/" data-toggle="refresh">Setting</a></li>
</ul>
</li>
<li class="panel">
<a href="#stack" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Stack <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="stack">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/" data-toggle="refresh">Stack</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#update" data-toggle="refresh">Update</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#activateservices" data-toggle="refresh">Activateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#addoutputs" data-toggle="refresh">Addoutputs</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#cancelupgrade" data-toggle="refresh">Cancelupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#deactivateservices" data-toggle="refresh">Deactivateservices</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#error" data-toggle="refresh">Error</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#exportconfig" data-toggle="refresh">Exportconfig</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#finishupgrade" data-toggle="refresh">Finishupgrade</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#rollback" data-toggle="refresh">Rollback</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/stack/#upgrade" data-toggle="refresh">Upgrade</a></li>
</ul>
</li>
<li class="panel">
<a href="#subscribe" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Subscribe <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="subscribe">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/subscribe/" data-toggle="refresh">Subscribe</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/subscribe/#create" data-toggle="refresh">Create</a></li>
</ul>
</li>
<li class="panel">
<a href="#volume" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Volume <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="volume">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/volume/" data-toggle="refresh">Volume</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/volume/#create" data-toggle="refresh">Create</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/volume/#delete" data-toggle="refresh">Delete</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/volume/#restorefrombackup" data-toggle="refresh">Restorefrombackup</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/volume/#reverttosnapshot" data-toggle="refresh">Reverttosnapshot</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/{{page.apiVersion}}/api-resources/volume/#snapshot" data-toggle="refresh">Snapshot</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,207 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.png"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/">Overview</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/quick-start-guide/">Quick Start Guide</a></li>
<li class="panel">
<a href="#installing-rancher" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Installing Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="installing-rancher">
<li>
<a href="#installing-server" data-toggle="collapse" class="collapsed" data-parent="#installing-server">Installing Rancher server<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="installing-server">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/"><i class="fa fa-angle-double-right"></i>Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/multi-nodes/"><i class="fa fa-angle-double-right"></i>Multi Nodes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/basic-ssl-config/"><i class="fa fa-angle-double-right"></i>Basic SSL Configuration</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/no-internet-access/"><i class="fa fa-angle-double-right"></i>No Internet Access</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/">Adding Hosts</a></li>
</ul>
</li>
<li class="panel">
<a href="#concepts" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Concepts<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="concepts">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#users">Users</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#environments">Environments</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#host">Hosts</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#networking">Networking</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#service-discovery">Service Discovery</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#load-balancer">Load Balancer</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#distributed-dns-service">Distributed DNS Service</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#health-checks">Health Checks</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#service-ha">Service HA</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#service-upgrade">Service Upgrade</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#rancher-compose">Rancher Compose</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#stacks">Stacks</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#container-scheduling">Scheduling</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#sidekicks">Sidekicks</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/concepts/#metadata-services">Metadata Services</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherservice" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Services<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherservice">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/health-checks/">Health Checks</a></li>
<li>
<a href="#dnsservice" data-toggle="collapse" class="collapsed" data-parent="#dnsservice">DNS Service<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="dnsservice">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/internal-dns-service/"><i class="fa fa-angle-double-right"></i>Internal DNS Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/dns-service/"><i class="fa fa-angle-double-right"></i>External DNS Service using Route 53</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/metadata-service/">Metadata Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/storage-service/">Storage Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/audit-log/">Audit Logging</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/service-accounts/">Service Accounts</a></li>
</ul>
</li>
<li class="panel">
<a href="#configuration" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Configuration<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<!--OLD href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/"-->
<ul class="collapse list-group-submenu" id="configuration">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/access-control/">Access Control</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/accounts/">Accounts</a></li>
<li>
<a href="#settings" data-toggle="collapse" class="collapsed" data-parent="#settings">Settings <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="settings">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#host-registration"><i class="fa fa-angle-double-right"></i>Host-Registration</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#catalog"><i class="fa fa-angle-double-right"></i>Catalog</a></li>
</ul>
</li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/machine-drivers/">Machine Drivers</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/environments/">Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/registries/">Registries</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/native-docker/">Using Native Docker CLI with Rancher</a></li>
<li class="panel">
<a href="#rancher-compose" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Using Rancher through Rancher-Compose<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancher-compose">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/">Using Rancher Compose</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/upgrading/">Upgrading Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/environment-interpolation/">Environment Interpolation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/rancher-services/">Rancher Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/scheduling/">Scheduling</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-compose/build/">Building with S3</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherui" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher UI<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherui">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/scheduling/">Scheduling Services</a></li>
<li>
<a href="#stacks" data-toggle="collapse" class="collapsed" data-parent="#stacks">Stacks<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="stacks">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/applications/stacks/adding-services/">Adding Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/applications/stacks/adding-service-alias/"></i>Adding Service Alias</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/applications/stacks/adding-balancers/">Adding Load Balancers</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/applications/stacks/adding-external-services/">Adding External Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/applications/stacks/">Stack Options</a></li>
</ul>
</li>
<li>
<a href="#hosts" data-toggle="collapse" class="collapsed" data-parent="#hosts">Infrastructure/Hosts <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hosts">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/"><i class="fa fa-angle-double-right"></i>Getting Started with Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/custom/"><i class="fa fa-angle-double-right"></i>Adding Custom Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/amazon/"><i class="fa fa-angle-double-right"></i>Amazon EC2</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/azure/"><i class="fa fa-angle-double-right"></i>Azure</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/digitalocean/"><i class="fa fa-angle-double-right"></i>DigitalOcean</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/exoscale/"><i class="fa fa-angle-double-right"></i>Exoscale</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/packet/"><i class="fa fa-angle-double-right"></i>Packet</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/rackspace/"><i class="fa fa-angle-double-right"></i>Rackspace</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/hosts/other/"><i class="fa fa-angle-double-right"></i>Other Drivers</a></li>
</ul>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/containers/">Infrastructure/Containers</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-ui/infrastructure/certificates/">Infrastructure/Certificates</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/">Rancher Catalog</a></li>
<li class="panel">
<a href="#kubernetes" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Kubernetes<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="kubernetes">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/">How to work with Kubernetes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/ingress/">Ingress Support</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/k8s-internal-dns-service/">K8s Internal DNS Service</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/swarm/">Swarm</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/mesos/">Mesos</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/labels/">Labels in Rancher</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/">Upgrading Rancher</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/contributing/">Contributing to Rancher</a></li>
<li class="panel">
<a href="#api" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">API<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="api">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/api-keys/">API Keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/">How to use the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/access-control/">Access Control using the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/common/">Common Resource Fields</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">API Resources</a></li>
</ul>
</li>
<li class="panel">
<a href="#faqs" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">FAQs<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="faqs">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/server/">Rancher Server</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/agents/">Rancher Agents/Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/troubleshooting/">Troubleshooting</a></li>
</ul>
</li>
<li class="panel">
<a href="#docsarchive1" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Docs Archive<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="docsarchive1">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/" data-toggle="refresh">Rancher v1.0</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
<!--language select
<div class="btn-group" role="group" aria-label="...">
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/en/">English</a>
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/zh/">Chinese</a>
</div>
-->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,187 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/">Overview</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/quick-start-guide/">Quick Start Guide</a></li>
<li class="panel">
<a href="#installing-rancher" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Installing Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="installing-rancher">
<li>
<a href="#installing-server" data-toggle="collapse" class="collapsed" data-parent="#installing-server">Installing Rancher server<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="installing-server">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/installing-rancher/installing-server/"><i class="fa fa-angle-double-right"></i>Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/installing-rancher/installing-server/multi-nodes/"><i class="fa fa-angle-double-right"></i>Multi Nodes</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/installing-rancher/installing-server/basic-ssl-config/"><i class="fa fa-angle-double-right"></i>Basic SSL Configuration</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/installing-rancher/installing-server/no-internet-access/"><i class="fa fa-angle-double-right"></i>No Internet Access</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/">Adding Hosts</a></li>
</ul>
</li>
<li class="panel">
<a href="#concepts" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Concepts<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="concepts">
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#users">Users</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#environments">Environments</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#host">Hosts</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#networking">Networking</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#service-discovery">Service Discovery</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#load-balancer">Load Balancer</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#distributed-dns-service">Distributed DNS Service</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#health-checks">Health Checks</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#service-ha">Service HA</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#service-upgrade">Service Upgrade</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#rancher-compose">Rancher Compose</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#stacks">Stacks</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#container-scheduling">Scheduling</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#sidekicks">Sidekicks</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/concepts/#metadata-services">Metadata Services</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherservice" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Services<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherservice">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-services/health-checks/">Health Checks</a></li>
<li>
<a href="#dnsservice" data-toggle="collapse" class="collapsed" data-parent="#dnsservice">DNS Service<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="dnsservice">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-services/internal-dns-service/"><i class="fa fa-angle-double-right"></i>Internal DNS Service</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-services/dns-service/"><i class="fa fa-angle-double-right"></i>External DNS Service using Route 53</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-services/metadata-service/">Metadata Service</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-services/storage-service/">Storage Service</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-services/audit-log/">Audit Logging</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/service-accounts/">Service Accounts</a></li>
</ul>
</li>
<li class="panel">
<a href="#configuration" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Configuration<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<!--OLD href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/"-->
<ul class="collapse list-group-submenu" id="configuration">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/access-control/">Access Control</a></li>
<li>
<a href="#settings" data-toggle="collapse" class="collapsed" data-parent="#settings">Settings <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="settings">
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/settings/#host-registration"><i class="fa fa-angle-double-right"></i>Host-Registration</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/settings/#catalog"><i class="fa fa-angle-double-right"></i>Catalog</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/settings/#machine-drivers"><i class="fa fa-angle-double-right"></i>Machine Drivers</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/accounts/">Accounts</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/environments/">Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/api-keys/">API Keys</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/configuration/registries/">Registries</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/native-docker/">Using Native Docker CLI with Rancher</a></li>
<li class="panel">
<a href="#rancher-compose" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Using Rancher through Rancher-Compose<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancher-compose">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/">Using Rancher Compose</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/upgrading/">Upgrading Services</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/environment-interpolation/">Environment Interpolation</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/rancher-services/">Rancher Services</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/scheduling/">Scheduling</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-compose/build/">Building with S3</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherui" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher UI<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherui">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/scheduling/">Scheduling Services</a></li>
<li>
<a href="#stacks" data-toggle="collapse" class="collapsed" data-parent="#stacks">Application/Stacks<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="stacks">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/applications/stacks/adding-services/">Adding Services</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/applications/stacks/adding-service-alias/"></i>Adding Service Alias</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/applications/stacks/adding-balancers/">Adding Load Balancers</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/applications/stacks/adding-external-services/">Adding External Services</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/applications/stacks/">Stack Options</a></li>
</ul>
</li>
<li>
<a href="#hosts" data-toggle="collapse" class="collapsed" data-parent="#hosts">Infrastructure/Hosts <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hosts">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/"><i class="fa fa-angle-double-right"></i>Getting Started with Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/custom/"><i class="fa fa-angle-double-right"></i>Adding Custom Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/amazon/"><i class="fa fa-angle-double-right"></i>Amazon EC2</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/azure/"><i class="fa fa-angle-double-right"></i>Azure</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/digitalocean/"><i class="fa fa-angle-double-right"></i>DigitalOcean</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/exoscale/"><i class="fa fa-angle-double-right"></i>Exoscale</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/packet/"><i class="fa fa-angle-double-right"></i>Packet</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/rackspace/"><i class="fa fa-angle-double-right"></i>Rackspace</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/hosts/other/"><i class="fa fa-angle-double-right"></i>Other Drivers</a></li>
</ul>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/containers/">Infrastructure/Containers</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/rancher-ui/infrastructure/certificates/">Infrastructure/Certificates</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/catalog/">Rancher Catalog</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/kubernetes/">Kubernetes</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/swarm/">Swarm</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/labels/">Labels in Rancher</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/upgrading/">Upgrading Rancher</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/contributing/">Contributing to Rancher</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/api/" data-toggle="refresh">API Documentation</a></li>
<li class="panel">
<a href="#faqs" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">FAQs<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="faqs">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/faqs/server/">Rancher Server</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/faqs/agents/">Rancher Agents/Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/faqs/troubleshooting">Troubleshooting</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
<!--language select
<div class="btn-group" role="group" aria-label="...">
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/v1.0/en/">English</a>
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/v1.0/zh/">Chinese</a>
</div>
-->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,182 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/">Overview</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/quick-start-guide/">Quick Start Guide</a></li>
<li class="panel">
<a href="#installing-rancher" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Installing Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="installing-rancher">
<li>
<a href="#installing-server" data-toggle="collapse" class="collapsed" data-parent="#installing-server">Installing Rancher server<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="installing-server">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/"><i class="fa fa-angle-double-right"></i>Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/multi-nodes/"><i class="fa fa-angle-double-right"></i>Multi Nodes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/basic-ssl-config/"><i class="fa fa-angle-double-right"></i>Basic SSL Configuration</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/no-internet-access/"><i class="fa fa-angle-double-right"></i>No Internet Access</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/">Adding Hosts</a></li>
</ul>
</li>
<li class="panel">
<a href="#upgrading" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Upgrading Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="upgrading">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/">Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/multi-nodes/">Multi Nodes</a></li>
</ul>
</li>
<li class="panel">
<a href="#configuration" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Configuration<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="configuration">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/access-control/">Access Control</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/accounts/">Accounts</a></li>
<li>
<a href="#settings" data-toggle="collapse" class="collapsed" data-parent="#settings">Settings <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="settings">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#host-registration"><i class="fa fa-angle-double-right"></i>Host-Registration</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#catalog"><i class="fa fa-angle-double-right"></i>Catalog</a></li>
</ul>
</li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/machine-drivers/">Machine Drivers</a></li>
</ul>
</li>
<li class="panel">
<a href="#environments" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environments <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environments">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/">Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/registries/">Registries</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/certificates/">Certificates</a></li>
</ul>
</li>
<li class="panel">
<a href="#hosts" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Hosts <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hosts">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/">Getting Started with Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/custom/">Adding Custom Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/amazon/">Adding Amazon EC2 Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/azure/">Adding Azure Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/digitalocean/">Adding DigitalOcean Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/exoscale/">Adding Exoscale Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/packet/">Adding Packet Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/rackspace/">Adding Rackspace Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/other/">Adding Hosts from Other Cloud Providers</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherservice" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Infrastructure Services<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherservice">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/networking">Networking</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/load-balancer">Load Balancer</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/dns-service/">DNS Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/metadata-service/">Metadata Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/storage-service/">Persistent Storage Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/audit-log/">Audit Logging</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/service-accounts/">Service Accounts</a></li>
</ul>
</li>
<li class="panel">
<a href="#cattle" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Cattle<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="cattle">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/stacks">Stacks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-services/">Adding Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-load-balancers/">Adding Load Balancers</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-external-services/">Adding External Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-service-alias/">Adding Service Alias</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/health-checks/">Health Checks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/scheduling/">Scheduling Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/internal-dns-service/">Internal DNS Service in Cattle Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/external-dns-service/">External DNS Service using Route 53</a></li>
<li class="panel">
<a href="#rancher-compose" class="collapsed" data-toggle="collapse" data-parent="#cattle">Rancher-Compose<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancher-compose">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/">Rancher Compose</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/upgrading/">Upgrading Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/environment-interpolation/">Environment Interpolation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/build/">Building with AWS S3</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/labels/"> Labels in Rancher</a></li>
</ul>
</li>
<li class="panel">
<a href="#kubernetes" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Kubernetes<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="kubernetes">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/">Kubernetes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/ingress/">Ingress Support</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/k8s-internal-dns-service/">Internal DNS Service in Kubernetes Environments</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/mesos/">Mesos</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/swarm/">Swarm</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/native-docker/">Using Native Docker CLI with Rancher</a></li>
<li class="panel">
<a href="#catalog" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Catalog<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="catalog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/">Catalog</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/private-catalog/">Creating Private Catalogs</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/" data-toggle="refresh">API Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/contributing/">Contributing to Rancher</a></li>
<li class="panel">
<a href="#faqs" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">FAQs<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="faqs">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/server/">FAQs about Rancher Server</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/agents/">FAQs about Rancher Agents/Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/troubleshooting/">Troubleshooting FAQS</a></li>
</ul>
</li>
<li class="panel">
<a href="#docsarchive1" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Docs Archive<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="docsarchive1">
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/" data-toggle="refresh">Rancher v1.0</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
<!--language select
<div class="btn-group" role="group" aria-label="...">
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/en/">English</a>
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/zh/">Chinese</a>
</div>
-->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,203 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/">Overview</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/quick-start-guide/">Quick Start Guide</a></li>
<li class="panel">
<a href="#installing-rancher" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Installing Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="installing-rancher">
<li>
<a href="#installing-server" data-toggle="collapse" class="collapsed" data-parent="#installing-server">Installing Rancher server<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="installing-server">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/"><i class="fa fa-angle-double-right"></i>Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/multi-nodes/"><i class="fa fa-angle-double-right"></i>Multi Nodes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/basic-ssl-config/"><i class="fa fa-angle-double-right"></i>Basic SSL Configuration</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/no-internet-access/"><i class="fa fa-angle-double-right"></i>No Internet Access</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/">Adding Hosts</a></li>
</ul>
</li>
<li class="panel">
<a href="#upgrading" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Upgrading Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="upgrading">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/">Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/multi-nodes/">Multi Nodes</a></li>
</ul>
</li>
<li class="panel">
<a href="#configuration" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Configuration<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="configuration">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/access-control/">Access Control</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/accounts/">Accounts</a></li>
<li>
<a href="#settings" data-toggle="collapse" class="collapsed" data-parent="#settings">Settings <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="settings">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#host-registration"><i class="fa fa-angle-double-right"></i>Host-Registration</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#catalog"><i class="fa fa-angle-double-right"></i>Catalog</a></li>
</ul>
</li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/machine-drivers/">Machine Drivers</a></li>
</ul>
</li>
<li class="panel">
<a href="#environments" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environments <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environments">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/">Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/registries/">Registries</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/certificates/">Certificates</a></li>
</ul>
</li>
<li class="panel">
<a href="#hosts" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Hosts <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hosts">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/">Getting Started with Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/custom/">Adding Custom Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/amazon/">Adding Amazon EC2 Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/azure/">Adding Azure Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/digitalocean/">Adding DigitalOcean Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/exoscale/">Adding Exoscale Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/packet/">Adding Packet Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/rackspace/">Adding Rackspace Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/other/">Adding Hosts from Other Cloud Providers</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherservice" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Infrastructure Services<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherservice">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/networking">Networking</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/load-balancer">Load Balancer</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/dns-service/">DNS Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/metadata-service/">Metadata Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/storage-service/">Persistent Storage Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/audit-log/">Audit Logging</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/service-accounts/">Service Accounts</a></li>
</ul>
</li>
<li class="panel">
<a href="#cattle" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Cattle<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="cattle">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/stacks">Stacks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-services/">Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-load-balancers/">Load Balancers</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-external-services/">External Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-service-alias/">Service Alias</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/health-checks/">Health Checks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/scheduling/">Scheduling Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/upgrading/">Upgrading Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/internal-dns-service/">Internal DNS Service in Cattle Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/external-dns-service/">External DNS Service</a></li>
<li class="panel">
<a href="#rancher-compose" class="collapsed" data-toggle="collapse" data-parent="#cattle">Rancher-Compose<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancher-compose">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/">Rancher Compose</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/environment-interpolation/">Environment Interpolation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/build/">Building with AWS S3</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/labels/"> Labels in Cattle</a></li>
</ul>
</li>
<li class="panel">
<a href="#kubernetes" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Kubernetes<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="kubernetes">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/">Kubernetes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/ingress/">Ingress Support</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/k8s-internal-dns-service/">Internal DNS Service in Kubernetes Environments</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/mesos/">Mesos</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/swarm/">Swarm</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/native-docker/">Using Native Docker CLI with Rancher</a></li>
<li class="panel">
<a href="#catalog" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Catalog<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="catalog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/">Catalog</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/private-catalog/">Creating Private Catalogs</a></li>
</ul>
</li>
<li class="panel">
<a href="#cli" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher CLI<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="cli">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cli/">Rancher CLI</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cli/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cli/environment-interpolation/">Environment Interpolation</a></li>
</ul>
</li>
<!--<li class="panel">
<a href="#api" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">API<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="api">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/">How to use the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/access-control/">Setting up Access Control using the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-keys/">What are API Keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/common/">Common Resource Fields</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">API Resources</a></li>
</ul>
</li>-->
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/" data-toggle="refresh">API Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/contributing/">Contributing to Rancher</a></li>
<li class="panel">
<a href="#faqs" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">FAQs<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="faqs">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/server/">FAQs about Rancher Server</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/agents/">FAQs about Rancher Agents/Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/troubleshooting/">Troubleshooting FAQS</a></li>
</ul>
</li>
<li class="panel">
<a href="#docsarchive1" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Docs Archive<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="docsarchive1">
<li><a href="{{site.baseurl}}/rancher/v1.1/{{page.lang}}/" data-toggle="refresh">Rancher v1.1</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/" data-toggle="refresh">Rancher v1.0</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
<!--language select
<div class="btn-group" role="group" aria-label="...">
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/en/">English</a>
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/zh/">Chinese</a>
</div>
-->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,203 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<div>
<!--Start Google Search-->
<script>
(function() {
var cx = '007896692384436596364:60akf3bfmxm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<!--End Google Search-->
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/">Overview</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/quick-start-guide/">Quick Start Guide</a></li>
<li class="panel">
<a href="#installing-rancher" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Installing Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="installing-rancher">
<li>
<a href="#installing-server" data-toggle="collapse" class="collapsed" data-parent="#installing-server">Installing Rancher server<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse" id="installing-server">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/"><i class="fa fa-angle-double-right"></i>Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/multi-nodes/"><i class="fa fa-angle-double-right"></i>Multi Nodes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/basic-ssl-config/"><i class="fa fa-angle-double-right"></i>Basic SSL Configuration</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/installing-rancher/installing-server/no-internet-access/"><i class="fa fa-angle-double-right"></i>No Internet Access</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/">Adding Hosts</a></li>
</ul>
</li>
<li class="panel">
<a href="#upgrading" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Upgrading Rancher<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="upgrading">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/">Single Node</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/upgrading/multi-nodes/">Multi Nodes</a></li>
</ul>
</li>
<li class="panel">
<a href="#configuration" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Configuration<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="configuration">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/access-control/">Access Control</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/accounts/">Accounts</a></li>
<li>
<a href="#settings" data-toggle="collapse" class="collapsed" data-parent="#settings">Settings <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="settings">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#host-registration"><i class="fa fa-angle-double-right"></i>Host-Registration</a></li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/settings/#catalog"><i class="fa fa-angle-double-right"></i>Catalog</a></li>
</ul>
</li>
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/configuration/machine-drivers/">Machine Drivers</a></li>
</ul>
</li>
<li class="panel">
<a href="#environments" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Environments <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="environments">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/">Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/registries/">Registries</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/environments/certificates/">Certificates</a></li>
</ul>
</li>
<li class="panel">
<a href="#hosts" data-toggle="collapse" class="collapsed" data-parent="#mainmenu">Hosts <i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="hosts">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/">Getting Started with Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/custom/">Adding Custom Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/amazon/">Adding Amazon EC2 Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/azure/">Adding Azure Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/digitalocean/">Adding DigitalOcean Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/exoscale/">Adding Exoscale Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/packet/">Adding Packet Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/rackspace/">Adding Rackspace Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/hosts/other/">Adding Hosts from Other Cloud Providers</a></li>
</ul>
</li>
<li class="panel">
<a href="#rancherservice" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Infrastructure Services<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancherservice">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/networking">Networking</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/load-balancer">Load Balancer</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/dns-service/">DNS Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/metadata-service/">Metadata Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/storage-service/">Persistent Storage Service</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/audit-log/">Audit Logging</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/rancher-services/service-accounts/">Service Accounts</a></li>
</ul>
</li>
<li class="panel">
<a href="#cattle" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Cattle<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="cattle">
<li><a class="hash" href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/stacks">Stacks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-services/">Adding Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-load-balancers/">Adding Load Balancers</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-external-services/">Adding External Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/adding-service-alias/">Adding Service Alias</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/health-checks/">Health Checks</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/scheduling/">Scheduling Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/internal-dns-service/">Internal DNS Service in Cattle Environments</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/external-dns-service/">External DNS Service using Route 53</a></li>
<li class="panel">
<a href="#rancher-compose" class="collapsed" data-toggle="collapse" data-parent="#cattle">Rancher-Compose<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="rancher-compose">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/">Rancher Compose</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/upgrading/">Upgrading Services</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/environment-interpolation/">Environment Interpolation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/rancher-compose/build/">Building with AWS S3</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cattle/labels/"> Labels in Rancher</a></li>
</ul>
</li>
<li class="panel">
<a href="#kubernetes" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Kubernetes<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="kubernetes">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/">Kubernetes</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/ingress/">Ingress Support</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/kubernetes/k8s-internal-dns-service/">Internal DNS Service in Kubernetes Environments</a></li>
</ul>
</li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/mesos/">Mesos</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/swarm/">Swarm</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/native-docker/">Using Native Docker CLI with Rancher</a></li>
<li class="panel">
<a href="#catalog" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher Catalog<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="catalog">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/">Catalog</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/catalog/private-catalog/">Creating Private Catalogs</a></li>
</ul>
</li>
<li class="panel">
<a href="#cli" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Rancher CLI<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="cli">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cli/">Rancher CLI</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cli/commands/">Commands and Options</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/cli/environment-interpolation/">Environment Interpolation</a></li>
</ul>
</li>
<!--<li class="panel">
<a href="#api" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">API<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="api">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/">How to use the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/access-control/">Setting up Access Control using the API</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-keys/">What are API Keys</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/common/">Common Resource Fields</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/api-resources/">API Resources</a></li>
</ul>
</li>-->
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/api/" data-toggle="refresh">API Documentation</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/contributing/">Contributing to Rancher</a></li>
<li class="panel">
<a href="#faqs" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">FAQs<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="faqs">
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/server/">FAQs about Rancher Server</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/agents/">FAQs about Rancher Agents/Hosts</a></li>
<li><a href="{{site.baseurl}}/rancher/{{page.version}}/{{page.lang}}/faqs/troubleshooting/">Troubleshooting FAQS</a></li>
</ul>
</li>
<li class="panel">
<a href="#docsarchive1" class="collapsed" data-toggle="collapse" data-parent="#mainmenu">Docs Archive<i class="pull-right fa fa-angle-down"></i><i class="pull-right fa fa-angle-up"></i></a>
<ul class="collapse list-group-submenu" id="docsarchive1">
<li><a href="{{site.baseurl}}/rancher/v1.1/{{page.lang}}/" data-toggle="refresh">Rancher v1.1</a></li>
<li><a href="{{site.baseurl}}/rancher/v1.0/{{page.lang}}/" data-toggle="refresh">Rancher v1.0</a></li>
</ul>
</li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
<!--language select
<div class="btn-group" role="group" aria-label="...">
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/en/">English</a>
<a class="btn btn-default btn-xs" href="{{site.baseurl}}/rancher/{{page.version}}/zh/">Chinese</a>
</div>
-->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,28 @@
<div class="sidebar-nav">
<div class="navbar navbar-inverse" role="navigation">
<!-- Brand and Toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://rancher.com/"><img src="{{site.baseurl}}/img/rancher-logo-nopadding.svg"></a>
</div>
<div class="clearfix"></div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="navbar-collapse collapse" >
<ul class="nav navbar-nav" id="mainmenu">
<li><a href="{{site.baseurl}}/volume/">Overview</a></li>
<li><a href="{{site.baseurl}}/volume/quick-start-guide/">Quick Start Guide</a></li>
<li><a href="{{site.baseurl}}/volume/command-line-tools/">Command Line Tools</a></li>
<li><a href="{{site.baseurl}}/volume/contributing/">Contributing to RancherOS</a></li>
<li><a href="{{site.baseurl}}/volume/faqs/">FAQs</a></li>
</ul><!-- /.navbar-nav -->
</div><!-- /.navbar-collapse -->
</div> <!-- /.navbar-inverse -->
</div> <!-- /.sidebar-nav -->

View File

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include os-sidebar.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
<!-- <div class="col-sm-12">
<div class="row">
<span class="copyright" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</span>
</div>
</div> -->
</div>
</div>
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-api-sidebar-v1.0.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-api-sidebar-v1.1.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-api-sidebar-v1.2.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-api-v2-beta-sidebar-v1.2.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-sidebar-v1.0.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-sidebar-v1.1.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-sidebar-v1.2.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link rel="shortcut icon" type="image/png" href="/favicon.png" sizes="16x16">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include rancher-sidebar.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
<footer class="clearfix">
<div class="copyright pull-left" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</div>
<a class="btn btn-primary pull-right" href="https://github.com/rancher/rancher.github.io/tree/master/{{page.path }}">Edit this page <i class="fa fa-pencil"></i></a>
</div>
</footer>
</div>
</div>
</div>
<!-- Start of Async HubSpot Analytics Code -->
<script type="text/javascript">
(function(d,s,i,r) {
if (d.getElementById(i)){return;}
var n=d.createElement(s),e=d.getElementsByTagName(s)[0];
n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/468859.js';
e.parentNode.insertBefore(n, e);
})(document,"script","hs-analytics",300000);
</script>
<!-- End of Async HubSpot Analytics Code -->
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ site.name }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ site.description }}">
<link href="{{site.baseurl}}/css/bootstrap.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/syntax.css" rel="stylesheet">
<link href="{{site.baseurl}}/css/rancher.css" rel="stylesheet">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/vendor/lato/lato.css">
</head>
<body>
<div class="container-fluid">
<div class="row body" >
<div class="col-sm-3">
{% include volume-sidebar.html %}
</div>
<div class="col-sm-9">
<div class="content-container">
{{ content }}
</div>
</div>
<div class="col-sm-12">
<div class="row">
<span class="copyright" >Copyright &copy; 2016 <a href="http://rancher.com">Rancher Labs</a>. All Rights Reserved.</span>
</div>
</div>
</div>
</div>
</body>
<script src="{{site.baseurl}}/vendor/jquery.js"></script>
<script src="{{site.baseurl}}/vendor/bootstrap.js"></script>
<script src="{{site.baseurl}}/js/rancher.js"></script>
</html>

6585
docs/css/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

5
docs/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

685
docs/css/rancher.css Normal file
View File

@ -0,0 +1,685 @@
.sidebar-nav .btn-group {
margin: 15px 0 0 15px;
}
BODY {
background-color: #f0f2f2;
font-family: 'Lato', sans-serif;
font-size: 14px;
}
img {
max-width: 100%;
height: auto;
}
/* make sidebar nav vertical */
@media (min-width: 768px) {
.sidebar-nav .navbar .navbar-collapse {
padding: 0;
max-height: none;
}
.sidebar-nav .navbar ul {
float: none;
}
.sidebar-nav .navbar ul:not {
display: block;
}
.sidebar-nav .navbar li {
float: none;
display: block;
}
.sidebar-nav .navbar li a {
padding-top: 8px;
padding-bottom: 8px;
font-weight: 300;
}
}
pre {
padding: 0;
margin: 0;
background-color: transparent;
border: none;
border-radius: 0;
}
pre code {
display: block;
padding: 9.5px;
font-size: 13px;
line-height: 1.42857143;
color: #ECF0F1;
word-break: break-all;
word-wrap: break-word;
background-color: #334851;
border: 1px solid #0A141A;
border-radius: 4px;
}
.language-bash pre code{
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.42857143;
word-break: break-all;
word-wrap: break-word;
border-radius: 4px;
border: black;
background-color: #2B2B2B;
color: #ECF0F1;
}
.language-sh pre code{
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.42857143;
word-break: break-all;
word-wrap: break-word;
border-radius: 4px;
border: black;
background-color: black;
color: white;
}
/* Link Color in Content*/
a {
color: #005f88;
text-decoration: none;
}
a:hover,
a:focus {
color: #0077aa;
text-decoration: none;
}
/* Heading in Markdown using # */
h1, h2 {
font-weight: 300;
}
/*h3 {
text-align: center;
}
h3:before, h3:after {
content: "";
width: 50px;
height: 3px;
background: #5c686f;
display: inline-block;
vertical-align: middle;
margin: 0 10px;
}
*/
/*HEADERS*/
h1, h2 {
font-weight: 300;
}
h3,
h4,
h5,
h6 {
text-transform: uppercase;
color: #5c686f;
letter-spacing: .75px;
}
h3,
h4,
h5,
h6 {
text-transform: uppercase;
color: #5c686f;
font-weight: 900;
}
h3 {
color: #334851;
}
/* Line bar in markdown as --- */
hr {
margin-top: 10px;
}
/*Remove rounded corners on navigation*/
@media (min-width: 768px) {
.navbar {
border-radius: 0px;
}
}
/* Remove right and left padding on column containers for */
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
padding-right: 0px;
padding-left: 0px;
}
.container {
margin-right: 0;
margin-left: 0;
width: 100%;
}
/*Provides padding around context*/
.content-container {
padding-left: 5%;
max-width: 80%;
}
.navbar-inverse {
background:#fff;
border: none;
color: #5c686f;
}
.navbar-inverse .navbar-nav > li > a {
color: #777;
font-weight: normal;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #0075a8;
background-color: transparent;
text-decoration: none;
}
.navbar-inverse .navbar-nav > li > .no-list-group {
color: #788188;
}
.navbar-inverse .navbar-nav > li > .no-list-group:hover,
.navbar-inverse .navbar-nav > li > .no-list-group:focus {
background-color: #5c686f;
color:#0075a8;
text-decoration: none;
}
.list-group-item {
position: relative;
display: block;
padding: 10px 10px;
margin-bottom: -1px;
background-color: transparent;
border: none;
}
.list-group-submenu li {
list-style: none;
margin-left: 0;
margin-bottom:7px;
color:#788188;
padding:0;
}
span.highlight {
background-color: yellow;
}
blockquote {
font-size: inherit;
}
code{
padding:2px 5px;
display:inline-block;
background: #21364a;
color: #0075a8;
}
.row{
width:100%;
position:relative;
display:inline-block;
}
.row .col-sm-3{
background-color: #fff;
}
.copyright {
height: 34px;
line-height: 34px;
}
a i {
font-size: 16px;
margin-top: 3px;
padding-right:10px;
}
a.btn i {
margin: 0;
padding: 0;
}
a.collapsed i.fa-angle-down, a i.fa-angle-up{
display:block;
}
a.collapsed i.fa-angle-up, a i.fa-angle-down{
display:none;
}
/*ul li a[aria-expanded=true]{
background-color: #ecf0f1;
}*/
/*NESTED SUBMENU*/
ul.nav.navbar-nav li ul.list-group-submenu {
border-left: solid #0075a8 thick;
padding: 12px;
}
ul.nav.navbar-nav li ul.list-group-submenu li ul{
border-left: solid rgba(0,0,0,.75) thick;
padding-left: 40px;
margin-left: -17px;
}
ul.nav.navbar-nav li ul.list-group-submenu li ul ul {
padding: 0;
margin: 0;
border: none;
margin-left: 27px;
}
ul.collapse {
padding: 0;
}
.navbar-inverse .clearfix{
background-color:#0075A8;
}
.sidebar-nav{
background-color: #5c686f;
}
.navbar-inverse .navbar-nav > li > a.active {
background: #5c686f;
color: white;
}
ul.nav.navbar-nav li a.active:after {
content: "";
border: solid transparent;
height: 0;
width: 0;
pointer-events: none;
border-color: transparent;
border-left-color: #5c686f;
border-width: 10px;
position: absolute;
right: -20px;
top: calc(50% - 10px);
}
ul.nav.navbar-nav .list-group-submenu li a.active:after {
display: none;
}
ul.collapse.in a.active {
color: #0075A8;
}
.panel {
margin-bottom: 0px;
border: 0px;
border-radius: 0px;
-webkit-box-shadow:none;
box-shadow:none;
}
@media (max-width:768px){
.col-sm-9 .content-container{
padding-left: 15px;
}
.row .col-sm-3 {f
height: auto;
min-height: 0px;
}
.container-fluid{
padding:0;
}
.row{
width:100%;
padding:0;
margin:0;
}
.row .col-sm-3{
width:100%;
top:auto;
left:auto;
bottom:auto;
position:relative;
background-color: #5c686f;
}
.row .col-sm-9{
position:relative;
width:100%;
float:right;
}
}
.header-anchor {
font-size: 14px;
visibility: hidden;
position: relative;
top: -3px;
left: 5px;
}
H3:hover .header-anchor,
H4:hover .header-anchor,
H5:hover .header-anchor,
H6:hover .header-anchor {
visibility: visible;
}
/*ANCHORS*/
a {
color: #0075a8;
text-decoration: none;
}
a:hover {
text-decoration: none;
}
hr {
margin: 2% 0;
border-top: 1px solid #BFBFBF;
}
/*LISTS*/
ol {
counter-reset: li;
margin: 20px 0;
padding-left: 0;
}
ol > li {
position: relative;
margin: 0 0 25px 2em;
padding: 4px 8px 4px 20px;
list-style: none;
background: rgba(255,255,255,.75);
}
ol > li::before {
content: counter(li);
counter-increment: li;
position: absolute;
top: 0;
left: -2em;
bottom: 0;
width: 2em;
margin-right: 8px;
padding: 4px;
font-weight: bold;
text-align: center;
background: #BDC3C7;
color: white;
}
li ol,
li ul {
margin-top: 6px;
}
ol ol li:last-child {
margin-bottom: 0;
}
ol > li::before {
}
/*TABLES*/
table {
background: white;
width: 100%;
border-collapse: collapse;
word-wrap:break-word;
}
th {
background: #0075a8;
color: white;
font-weight: 400;
}
th a {
color: #efefef;
border-bottom: solid 2px;
}
td,
th {
padding: 10px;
text-align: left;
}
td {
border: 1px solid #ccd1d3;
}
th {
border-right: 1px dotted rgba(255, 255, 255, 0.15);
border-bottom: 1px dotted rgba(255, 255, 255, 0.15);
}
tr:nth-child(even) {
background: #efefef;
}
td code {
background: rgba(0,0,0,.05);
}
.gsc-search-box td, .gsc-results-wrapper-overlay td {
border-color: transparent;
}
.gsc-table-result td {
border-bottom: solid 2px #efefef;
padding-bottom: 30px;
}
.gsc-search-box td, .gsc-above-wrapper-area-container td {
padding: 0;
}
.cse .gsc-search-button input.gsc-search-button-v2, input.gsc-search-button-v2 {
width: auto!important;
height: auto!important;
}
.gsc-above-wrapper-area .gsc-selected-option-container {
min-width: 100px;
}
.gsc-results-wrapper-overlay {
-webkit-box-shadow: 0 0 0 transparent!important;
-moz-box-shadow: 0 0 0 transparent!important;
-ms-box-shadow: 0 0 0 transparent!important;
-o-box-shadow: 0 0 0 transparent!important;
box-shadow: 0 0 0 transparent!important;
}
.gsc-modal-background-image {
background-color: rgba(153,163,168,.75)!important;
}
/*CODE SNIPPETS*/
code {
word-wrap:break-word;
border-radius: 3px;
color: #444;
background-color: #ddd;
}
/*BLOCKQUOTES*/
blockquote {
border-left: solid thick #0075a8;
padding: 1% 5%;
position: relative;
background: white;
margin-left: 0;
margin-right: 0;
}
blockquote:before {
content: "";
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: transparent;
border-left-color: #0075a8;
border-width: 8px;
position: absolute;
left: 0;
top: calc(50% - 8px);
}
blockquote strong:first-child{
display: block;
text-transform: uppercase;
margin-bottom: 10px;
color: #5c686f;
}
/*ACTIONS*/
#other-actions p:first-child {
margin: 0;
}
.action > span {
display: block;
}
.action .header {
color: #0075a8;
font-weight: bold;
text-transform: uppercase;
background-color: #99c8dc;
float: left;
width: 100%;
line-height: 48px;
padding-left: 10px;
}
.action .header > *{
display: inline-block;
vertical-align: middle;
}
.action .header .headerright {
float: right;
background: #66accb;
color: white;
padding: 8px 10px;
text-transform: none;
line-height: normal;
}
.action .header .headerright code {
color: white;
background: #3391b9;
margin-left: 10px;
padding: 8px;
font-weight: normal;
text-transform: none;
}
.action{
border: solid thin #efefef;
background: white;
display: block;
margin: 10px 0;
}
.action-contents{
padding:20px;
border: solid thin #efefef;
background: white;
clear: both;
}
.action-contents th {
background: #66767c;
}
.input, .output{
background-color: #e5f1f6;
padding: 10px 0;
display: block;
width: 100%;
}
.input strong, .output strong {
padding: 10px;
background: #99c8dc;
position: relative;
margin-right: 15px;
}
.input strong:before,.output strong:before {
content: "";
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: transparent;
border-left-color: #99c8dc;
border-width: 8px;
position: absolute;
right: -15px;
top: calc(50% - 8px);
}
footer {
margin: 20px 0;
padding: 10px 0;
border-top: solid thin #BDC3C7;
height: 34px;
clear: both;
}
@media (max-width:768px){
.navbar-inverse .navbar-toggle {
background: rgba(0,0,0,.25);
}
.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
background: rgba(0,0,0,.5);
}
.navbar-inverse .navbar-header{
background: #0075a8;
}
.col-sm-9 .content-container{
padding: 0 2%;
max-width: 100%;
}
.row .col-sm-3 {
height: auto !important;
min-height: 0px !important;
}
.container-fluid{
padding:0;
}
.row{
width:100%;
padding:0;
margin:0;
}
.row .col-sm-3{
width:100%;
top:auto;
left:auto;
bottom:auto;
position:relative;
background-color:#f2efef;
}
.row .col-sm-9{
position:relative;
width:100%;
float:right;
}
}

62
docs/css/syntax.css Normal file
View File

@ -0,0 +1,62 @@
.highlight .c { color: #66767C; font-style: italic } /* Comment */
.highlight .err { color: #ffffff } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #C0392B } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #C0392B } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #F15354; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0075A8 } /* Literal.Number */
.highlight .s { color: #EADF5A } /* Literal.String */
.highlight .na { color: #A5C63B } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #0075A8 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #C0392B; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #78C9CF; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #F15354 } /* Name.Tag */
.highlight .nv { color: #FFFFFF } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #0075A8 } /* Literal.Number.Float */
.highlight .mh { color: #0075A8 } /* Literal.Number.Hex */
.highlight .mi { color: #0075A8 } /* Literal.Number.Integer */
.highlight .mo { color: #0075A8 } /* Literal.Number.Oct */
.highlight .sb { color: #EADF5A } /* Literal.String.Backtick */
.highlight .sc { color: #EADF5A } /* Literal.String.Char */
.highlight .sd { color: #EADF5A } /* Literal.String.Doc */
.highlight .s2 { color: #EADF5A } /* Literal.String.Double */
.highlight .se { color: #EADF5A } /* Literal.String.Escape */
.highlight .sh { color: #EADF5A } /* Literal.String.Heredoc */
.highlight .si { color: #EADF5A } /* Literal.String.Interpol */
.highlight .sx { color: #EADF5A } /* Literal.String.Other */
.highlight .sr { color: #EADF5A } /* Literal.String.Regex */
.highlight .s1 { color: #EADF5A } /* Literal.String.Single */
.highlight .ss { color: #EADF5A } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #FFFFFF } /* Name.Variable.Class */
.highlight .vg { color: #FFFFFF } /* Name.Variable.Global */
.highlight .vi { color: #FFFFFF } /* Name.Variable.Instance */
.highlight .il { color: #0075A8 } /* Literal.Number.Integer.Long */
.highlight .lineno { color: #ccc; display:inline-block; padding: 0 5px; border-right:1px solid #ccc; }
.highlight pre code { display: block; white-space: pre; overflow-x: auto; word-wrap: normal; }

BIN
docs/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

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